先日、HadoopとHBaseをインストールしていた時に
今まで見た中で一番分かりやすい解説ページがあったので紹介する。
■Hadoop/Hbase Clusterの構築
http://lunarium.info/arc/index.php/Hadoop/Hbase_Cluster%E3%81%AE%E6%A7%8B%E7%AF%89
これで簡単に「話題のクラウド化」へ!?
先日、HadoopとHBaseをインストールしていた時に
今まで見た中で一番分かりやすい解説ページがあったので紹介する。
■Hadoop/Hbase Clusterの構築
http://lunarium.info/arc/index.php/Hadoop/Hbase_Cluster%E3%81%AE%E6%A7%8B%E7%AF%89
これで簡単に「話題のクラウド化」へ!?
Nutchというクローラ、インデクサ、検索を行なうオープンソースがあったので、
軽く触ってみた。
Nutch内部ではLucene、Hadoopが動作してるようなので、勉強にはちょうどいいかと思う。
早速、インストールから動作までの解説をする。
■クローラ
1.Nutch本体ダウンロード、解凍
# tar -xvzf nutch-0.9.tar.gz # mv nutch-0.9 /usr/local/nutch
2.環境変数にパスを通す
# vi /etc/bashrc
export NUTCH_HOME=/usr/local/nutch
export PATH=${NUTCH_HOME}/bin:${PATH}
# source /etc/bashrc
3.クロール先を決める
クロール先URLリストを作成する。
今回は2サイトをクロールする予定。
# cd ${NUTCH_HOME}
# mkdir crawl_urls
# vi crawl_urls/corporate_sites
http://www.datasection.co.jp/
# vi crawl_urls/blogs
http://blog.mikuriya.biz/
要は作成したディレクトリcrawl_urls以下に1行1URLで
クロールしたいサイトの開始位置をどんどん記述するってことみたい。
4.クロールのフィルタ設定
今回のクロール対象は2サイトなので、それ以外はクロールしたくない。
以下のファイルに正規表現でフィルタリングを行なう。(正規表現はJava仕様)
# cd ${NUTCH_HOME}
# vi conf/crawl-urlfilter.txt
(修正前)
+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
(修正後)
+^http://www\.datasection\.co\.jp/
+^http://blog\.mikuriya\.biz/
※よく見ると先頭に「+」とか「-」が入ってる。
クロールしたいURLパターンは「+」、クロールしたくないURLパターンは「-」を
このファイルに追加していくようだ。
5.クロール設定
クロール用の設定ファイルは初期段階では何も書かれていないので、
nutch-default.xmlをそのままコピーしてくる。
# cat conf/nutch-default.xml > nutch-site.xml
nutch-site.xmlの「http.agent.name」は必須っぽい。適当な名前をつけて。
私の場合は、クロールしたデータを「/usr/local/nutch/crawl_data」に
格納したいので以下を編集した。
# vi conf/nutch-site.xml
<property>
<name>searcher.dir</name>
<value>/usr/local/nutch/crawl_data</value> ← ここを編集した
<description>
...
</description>
</property>
nutch-site.xmlには、propertyのdescription属性に
設定の説明が書いてあるので、各自適当に読んで設定してもらいたい。
6.クロール開始
# /usr/local/nutch/bin/nutch crawl /usr/local/nutch/crawl_urls -dir /usr/local/nutch/crawl_data -depth 3 -topN 50 &
※なおcrawl_dataは勝手に作成されるので、いちいち作らなくてよい。
■WEBアプリケーション
Tomcatからクロールしたデータを検索表示することができるので、その設定を行なう。
${NUTCH_HOME}/nutch-0.9.warがその実体。
# cd ${NUTCH_HOME}
# mkdir nutch_web
# cp nutch-0.9.war nutch_web/
# cd nutch_web
# unzip nutch-0.9.war
解凍したアプリケーションの設定ファイルには、何も書かれていないので
クロール用で使用した設定ファイルを上書きしてやる。
# cp conf/nutch-site.xml nutch_web/WEB-INF/classes/nutch-site.xml
Tomcatで見れるようにシンボリックリンクを貼る。
# cd /usr/local/tomcat/webapps # ln -s /usr/local/nutch/nutch_web nutch
Tomcat起動
# /usr/local/tomcat/bin/startup.sh
■検索結果のウェブ画面

形態素解析器Senの導入(日本語対応)、Hadoopによる分散(複数のサーバで運用)、
その他パフォーマンスなどは、もったいないから教えない。
■参考URL:
http://dev.team-lab.com/index.php?itemid=120
http://kazuhiro.ty.land.to/blog/2007/01/nutch.html
HypertableとHadoopを合体させたくてここまできた。
やっと合体が成功したように見えるので作業報告する。
今回、HypertableとHadoopをインストールしていることが前提で書く。
インストール環境はこんな感じ。
Hypertableインストールディレクトリ:/home/hadoop/hypertable
Hadoopインストールディレクトリ:/home/hadoop/hadoop/hadoop-0.15.3
Master : 192.168.0.5
Slave : 192.168.0.8
192.168.0.10
作業は全て192.168.0.5(Master)で行なう
さて、「UpAndRunningWithHadoop」を見つつ解説していく。
■Hadoopを起動
一番最初から行なうので、まずnamenodeをリセットする。
# ./bin/hadoop namenode -format 08/02/20 22:09:12 INFO dfs.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = 192.168.0.5/127.0.0.1 STARTUP_MSG: args = [-format] ************************************************************/ 08/02/20 22:09:12 INFO dfs.Storage: Storage directory /home/hadoop/hadoop/files... 08/02/20 22:09:12 INFO dfs.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at 192.168.0.5/127.0.0.1 ************************************************************/
Hadoopを起動する。たぶんstart-all.shじゃなくてもいいんだが、
もう失敗したくないので。
# ./bin/start-all.sh starting namenode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoo... 192.168.0.10: starting datanode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin... localhost: starting datanode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/..... 192.168.0.8: starting datanode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/... localhost: starting secondarynamenode, logging to /home/hadoop/hadoop/hadoop-0.15... starting jobtracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/had... 192.168.0.10: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/... localhost: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin... 192.168.0.8: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/b...
■ディスクをマウント
「UpAndRunningWithHadoop」には「Step 2」でmountを行なえと書いてあるが、
Hypertableのインストール時にすでに行なったのでやらない。
■Hypertableの設定
Hadoopのマスターとつなげるための設定を行なう。
# cd /home/hadoop/hypertable # vi ./conf/hypertable.cfg
私の場合は、HadoopのマスターとHypertableが同じサーバ上に存在するので、
以下のように設定する。
HdfsBroker.fs.default.name=hdfs://localhost:9000
Hyperspace.Master.Host=localhost
Hypertable.Master.Host=localhost
※ポート番号の9000は、{HADOOP_HOME}/conf/hadoop-site.xmlのfs.default.nameと同じにするっぽい
■Hypertableの起動
あとは起動するだけ・・・と思っていたが、またもやエラー発生。
# cd /home/hadoop/hypertable
# ./bin/start-master.sh hadoop
DfsBroker (hadoop) hasn't come up yet, trying again in 5 seconds ...
Num CPUs=2
HdfsBroker.Port=38030
HdfsBroker.Reactors=2
HdfsBroker.Workers=20
HdfsBroker.Server.fs.default.name=hdfs://localhost:9000
org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.dfs.ClientProtocol
version mismatch. (client = 14, server = 20)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:253)
at org.apache.hadoop.dfs.DFSClient.createNamenode(DFSClient.java:141)
at org.apache.hadoop.dfs.DFSClient.<init>(DFSClient.java:153)
at org.apache.hadoop.dfs.DistributedFileSystem.initialize(DistributedFileSystem.java:66)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:159)
at org.apache.hadoop.fs.FileSystem.getNamed(FileSystem.java:118)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:90)
at org.hypertable.DfsBroker.hadoop.HdfsBroker.<init>(HdfsBroker.java:71)
at org.hypertable.DfsBroker.hadoop.main.main(main.java:136)
バージョンが違うって。調べてみた。
# ls -al /home/hadoop/hypertable/java/lib/ -rw-r--r-- 1 hadoop hadoop 38015 2月 14 22:33 commons-logging-1.0.4.jar -rw-rw-r-- 1 hadoop hadoop 1449150 2月 20 22:53 hadoop-0.14.4-core.jar -rw-r--r-- 1 hadoop hadoop 99995 2月 14 22:33 hypertable-0.9.0.jar -rw-r--r-- 1 hadoop hadoop 106547 2月 14 22:33 junit-4.3.1.jar -rw-r--r-- 1 hadoop hadoop 358180 2月 14 22:33 log4j-1.2.13.jar
HypertableはHadoopを呼び出す際に上記の「hadoop-0.14.4-core.jar」を使用して
Hadoopと連携するようだ。
そんで私がインストールしたHadoopのバージョンを調べてみた。
# ls -al /home/hadoop/hadoop/hadoop-0.15.3/ -rw-rw-r-- 1 hadoop hadoop 1449150 1月 16 08:53 hadoop-0.15.3-core.jar -rw-rw-r-- 1 hadoop hadoop 79006 1月 16 07:58 hadoop-0.15.3-examples.jar -rw-rw-r-- 1 hadoop hadoop 495029 1月 16 08:53 hadoop-0.15.3-test.jar
HypertableはHadoop0.14.4を呼び出そうとしているが、
私がインストールしたHadoopは0.15.3だったためにこのエラーが発生したようだ。
というわけで、Hypertableに存在する「hadoop-0.14.4-core.jar」を
「hadoop-0.15.3-core.jar」に入れ替える必要がある。
# rm /home/hadoop/hypertable/java/lib/hadoop-0.14.4-core.jar # cp /home/hadoop/hadoop/hadoop-0.15.3/hadoop-0.15.3-core.jar /home/hadoop/hypertable/java/lib/
それでは再度Hypertableを起動。
# cd /home/hadoop/hypertable/ # ./bin/start-master.sh hadoop Successfully started DFSBroker (hadoop) Successfully started Hyperspace Successfully started Hypertable.Master
やっと成功した。プロセスはこんな感じ。
# ps -aux hadoop 22543 0.0 1.5 1253228 32060 pts/2 Sl 22:09 0:04 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l... hadoop 22644 0.0 1.4 1246144 29580 ? Sl 22:09 0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l... hadoop 22755 0.0 1.4 1245048 29624 ? Sl 22:09 0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l... hadoop 22825 0.0 1.4 1253656 30232 pts/2 Sl 22:09 0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l... hadoop 22937 0.0 1.4 1247140 28972 ? Sl 22:09 0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.l... hadoop 27310 0.0 1.0 252580 21512 pts/2 Sl 22:53 0:00 java -Xdebug -classpath /home/hadoop/hypertab... hadoop 27358 0.0 0.1 239916 2308 pts/2 Sl 22:54 0:00 /home/hadoop/hypertable/bin/Hyperspace.Master... hadoop 27393 0.0 0.1 253764 3064 pts/2 Sl 22:54 0:00 /home/hadoop/hypertable/bin/Hypertable.Master...
成功したから良かったし、Javaやってるから良かったけど、
こんなもん互換性とっとけよ。わかんねぇよ。
■スレーブ(slave)を起動
必須項目ではないのかと思っていたら、これも必須の設定項目。
マニュアルでは「# cat conf/slaves」と書かれているが、
Hypertableにはそんなファイルが無い。だから作成する。
# cd /home/hadoop/hypertable/conf # vi slaves
Hypertableの本体は、今回1台のみなので「localhost」と入力する。
localhost
複数のサーバにHypertableのパッケージを置いて、SELECTなどを分散させる場合は
その他サーバIPを入力する。(1行1IPで記述)
ではスレーブを起動する。
# cd /home/hadoop/hypertable # ./bin/slaves.sh /home/hadoop/hypertable/bin/start-range-server.sh hadoop localhost: Successfully started Hypertable.RangeServer
■Hypertableに接続、そして触る
「HQLTutorial」に書いてあるSQLを
試してみたら、ちゃんと動いた。
# ./bin/hypertable Welcome to the HQL command interpreter. Type 'help;' or '\h' for help. Type '\c' to clear the buffer. hypertable> create table Pages ( date, "refer-url", "http-code"); hypertable> show create table Pages; CREATE TABLE Pages ( 'refer-url', 'http-code', date, ACCESS GROUP default ( 'refer-url', 'http-code', date ) )
ちなみに前項のSlave設定を行なわないと以下のエラーが発生するので、
スレーブは絶対に設定すること!これ重要。
hypertable> create table Pages ( date, "refer-url", "http-code"); 1203526316 INFO hypertable : (/home/hadoop/src/hypertable/src/cc/AsyncComm/ConnectionManager.cc:257) Event: type=DISCONNECT from=127.0.0.1:38050; Problem connecting to Master, will retry in 15 seconds... 1203526331 INFO hypertable : (/home/hadoop/src/hypertable/src/cc/AsyncComm/ConnectionManager.cc:257) Event: type=DISCONNECT "COMM connect error" from=127.0.0.1:38050; Problem connecting to Master, will retry in 15 seconds...
■最後に
HypertableとHadoopを合体させたくここまできた。
そして合体できたっぽい。
残っているタスクをあげると、「確認」と「検証」だ。
成功しているっぽいけど、本当にHypertableとHadoopは合体しているのか?
Hadoopによってデータが分散されているのか?
INSERT,SELECT,UPDATEなどSQL速度は?何とどう比較する?
サーバ3台程度であったら検証にならない?
・・・面倒くせぇ。
GigazineでHypertableの記事があったので、
本家のサイトを見ていると「Up and Running with Hadoop」という文字が!
気になるのでHypertableをインストールしてみた。
一応、HowToInstallを見ればインストールできるのだが、
やはり英語なので日本語で解説する。
■環境
インストール先:/home/hadoop/hypertable
■Hypertableをインストールする前に
あらかじめ以下の6つのソフトウェアをインストールする必要がある。
6つのインストール作業は全てrootユーザーで行なう。
1.cmake-2.4.8.tar.gz(http://www.cmake.org/)
2.boost_1_34_1.tar.gz(http://www.boost.org/)
3.log4cpp-1.0.tar.gz(http://log4cpp.sourceforge.net/)
4.expat-2.0.1.tar.gz(http://sourceforge.net/projects/expat)
5.google-perftools-0.94.1.tar.gz(http://code.google.com/p/google-perftools/)
6.git-1.5.4.tar.gz(http://git.or.cz/)
$ wget パッケージ $ tar -xvzf パッケージ.tar.gz $ cd パッケージ/ $ ./configure $ make $ make install
■Hypertableのインストール
これからインストールを行なう。
私の場合はhadoopというユーザーで処理を行なう。
$ su - hadoop $ mkdir ~/src $ cd ~/src $ git clone git://scm.hypertable.org/pub/repos/hypertable.git $ mkdir ~/hypertable $ mkdir -p ~/build/hypertable $ cd ~/build/hypertable $ cmake -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE="Debug" ~/src/hypertable
さて、ここまでで正常に動いている人は、その後勝手にしてもらってよい。
私の場合、cmakeの時点でエラーが発生し、インストールできない事態になった。
結論からいうと、「gccのバージョンが3.4だったから」っぽい。
詳細は次項で。
■cmake時にエラー発生
前項で行なったcmake時に以下のようなエラーが発生した。
Boost thread library was not found
cmakeは指定したディレクトリ以下のソースをコンパイルする的な話らしいが、
それがうまくいかなかった。
エラーの通り「Boost thread」が無いとのこと。
どの辺でエラーがでているのか確認する。
vi /home/hadoop/src/hypertable/cmake/FindBoost.cmake
先ほどのエラー文「Boost thread library…」を検索する。
するとIF文が14通りくらい存在し、どうにかしてlibboost_threadを
探そうとしているようだ。
ちなみに「${Boost_LIBRARY_DIR}」を出力してみたが「/usr/local/lib」となっていた。
で、viは閉じてlibboost_threadがどこに存在するかを確認する。
$ locate libboost_thread /usr/local/lib/libboost_thread-gcc34-mt-1_34_1.a /usr/local/lib/libboost_thread-gcc34-mt.a /usr/local/lib/libboost_thread-gcc34-mt-1_34_1.so /usr/local/lib/libboost_thread-gcc34-mt-d-1_34_1.so.1.34.1 /usr/local/lib/libboost_thread-gcc34-mt-d.so /usr/local/lib/libboost_thread-gcc34-mt-d-1_34_1.a /usr/local/lib/libboost_thread-gcc34-mt-1_34_1.so.1.34.1 /usr/local/lib/libboost_thread-gcc34-mt-d-1_34_1.so /usr/local/lib/libboost_thread-gcc34-mt.so /usr/local/lib/libboost_thread-gcc34-mt-d.a /usr/lib/libboost_thread.so.1 /usr/lib/libboost_thread.a /usr/lib/libboost_thread.so.1.32.0
14通りほどのIF文の先頭が一応「libboost_thread-mt.a」だったので、
それを優先して読み込ませるようにしたい。
だが「libboost_thread-mt.a」が存在しない。
多分「libboost_thread-gcc34-mt.a」が「libboost_thread-mt.a」に相当するものっぽいので、
シンボリックリンクでごまかす。
$ su - $ ln -s /usr/local/lib/libboost_thread-gcc34-mt.a /usr/local/lib/libboost_thread-mt.a $ ln -s /usr/local/lib/libboost_thread-gcc34-mt.so /usr/local/lib/libboost_thread-mt.so ※2つシンボリックリンクをつける必要はないのだが、失敗したくないので。
再度、cmakeを行なう・・・うまくいった。
では、次の段階makeを行なう。
$ make
違うエラーが発生した。エラーを見ると以下が駄目っぽい。
-Wno-variadic-macros
それならオプション部分を除去しちゃう。
$ vi /home/hadoop/src/hypertable/CMakeLists.txt
この中から以下の部分を探す。(29行目あたり)
修正前:add_definitions(-Wall -pedantic -Wno-long-long -Wno-variadic-macros) 修正後:add_definitions(-Wall -pedantic -Wno-long-long)
これで再度cmakeから実行。
$ cd ~/build/hypertable $ rm ./* ←※前回cmakeを行なった時のファイルが残っているので消去する $ cmake -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE="Debug" ~/src/hypertable
はい、成功。
$ make $ make install DESTDIR=/home/hadoop/hypertable
はい、成功。
■よくわかんねぇけどマウント設定
Hypertableのインストールがやっと終わったのに、
なんだかmountを行なわなくてはいけない?
これを行なうことでどうなるかは知ったことではないが、ここまできたら行くところまで行く。
インストールしたディレクトリのmountを行なう。
私の場合は/home/hadoop/hypertableにインストールしたので、
「/」以下がmount対象となるのかな?
$ vi /etc/fstab
該当するパスにuser_xattrを追加する。
修正前:LABEL=/ / ext3 defaults 1 1 修正後:LABEL=/ / ext3 defaults,user_xattr 1 1
マウント実行。
$ mount -o remount /
何も出力されないからうまくいったっぽい。
■最後にHypertable起動
やっとここまできた。
Hypertableを起動しちゃう。
$ su - hadoop $ cd ~/hypertable $ bin/kill-servers.sh $ bin/start-all-servers.sh local
というわけで結果的にgccのバージョン4以降にアップグレードした方がいいかも。
以上、疲れた。
「Hadoop 0.15.0」や「Hbase/10Minutes」を見てなんだか簡易データベースが
使用できるそうなのでやってみた。
■今回の環境
サーバ環境は以下のような感じ。
SERVERS(計3台) :
MASTER : 192.168.0.5
SLAVE1 : 192.168.0.8
SLAVE2 : 192.168.0.10
HADOOP_HOME(全サーバ共通) : /home/hadoop/hadoop/hadoop-0.15.3/
DATA_DIR(全サーバ共通) : /home/hadoop/hadoop/filesystem/
JAVA_HOME(全サーバ共通) : /usr/java/j2sdk/
■パッケージの解凍と設置(マスターで作業)
$ tar -xvzf hadoop-0.15.3.tar.gz $ mv hadoop-0.15.3 /home/hadoop/hadoop/
■全般設定1(マスターで作業)
いつものように設定を行なう。hadoop-env.shを開いてJAVA_HOMEを設定。
$ cd /home/hadoop/hadoop/ vi conf/hadoop-env.sh
export JAVA_HOME=/usr/java/j2sdk
■全般設定2(マスターで作業)
これもいつものように設定を行なう。
今回はデータベースだけを使うので、mapredは設定しない。
$ vi conf/hadoop-site.xml <configuration> <property> <name>fs.default.name</name> <value>localhost:9000</value> </property> <property> <name>dfs.name.dir</name> <value>/home/hadoop/hadoop/filesystem/dfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/home/hadoop/hadoop/filesystem/dfs/data</value> </property> </configuration>
■全般設定3(マスターで作業)
スレーブサーバは2台存在するので、そのIPを入力する。
$ conf/slaves 192.168.0.8 192.168.0.10
■パッケージのコピー
それぞれのスレーブサーバにパッケージをまるごとコピー
$ cd /home/hadoop/hadoop/ $ tar -cvzf hadoop-0.15.3.tar.gz hadoop-0.15.3 $ scp hadoop-0.15.3.tar.gz hadoop@192.168.0.8:/home/hadoop/hadoop/ $ scp hadoop-0.15.3.tar.gz hadoop@192.168.0.10:/home/hadoop/hadoop/ $ ssh hadoop@192.168.0.8 $ cd /home/hadoop/hadoop $ tar -xvzf hadoop-0.15.3.tar.gz $ exit $ ssh hadoop@192.168.0.10 $ cd /home/hadoop/hadoop $ tar -xvzf hadoop-0.15.3.tar.gz $ exit
■初期化(マスターで作業)
ハードディスクをフォーマットするかのように初期化。
$ cd /home/hadoop/hadoop/hadoop-0.15.3 $ ./bin/hadoop namenode -format 08/02/08 01:09:59 INFO dfs.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = localhost/127.0.0.1 STARTUP_MSG: args = [-format] ************************************************************/ 08/02/08 01:09:59 INFO dfs.Storage: Storage directory /home/ha... 08/02/08 01:09:59 INFO dfs.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1 ************************************************************/
■Distributed File System(DFS)の起動(マスターで作業)
$ ./bin/start-dfs.sh starting namenode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bi... 192.168.0.8: starting datanode, logging to /home/hadoop/hadoop/had... 192.168.0.10: starting datanode, logging to /home/hadoop/hadoop/ha... localhost: starting secondarynamenode, logging to /home/hadoop/had...
■データベースの設定(マスターで作業)
データベースは、マニアックな場所に存在する。
この下には「eclipse-plugin」とか「ec2」とかあるので、他にもソフトがあるみたい。
Amazon EC2でMapReduceとかいう訳のわからんサイトがいろいろあったのはこれか?
$ cd /home/hadoop/hadoop/hadoop-0.15.3/src/contrib/hbase/ $ vi conf/hbase-site.xml
<configuration> <property> <name>hbase.master</name> <value>localhost:60000</value> <description>The host and port that the HBase master runs at</description> </property> <property> <name>hbase.rootdir</name> <value>/hbase</value> <description>location of HBase instance in dfs</description> </property> </configuration>
■権限変更・データベース起動(マスターで作業)
HBASEの実行ファイルに権限がないので実行権限を与える。
$ chmod 755 ./bin/*
そんでデータベース起動。
$ ./bin/start-hbase.sh Safe mode is OFF starting master, logging to /home/hadoop/hadoop/hadoop-0.15.3/src/co... localhost: starting regionserver, logging to /home/hadoop/hadoop/had...
■データベースへつなげて完了(マスターで作業)
データベースに接続してみた。
PostgreSQLやMySQLのように普通にクエリを打てるっぽい。
$ ./bin/hbase shell Hbase Shell, 0.0.2 version. Copyright (c) 2007 by udanax, licensed to Apache Software Foundation. Type 'help;' for usage. Hbase>
「help;」を打てば多少説明がでる。
やっとHadoopを触ってる感じになってきてる?
ちなみにSQLについては、Hbase/HbaseShell – Hadoop Wikiを参考に。
Hadoop Clusterについて試してみた。
■今回の環境
・JAVA_HOME=/usr/java/j2sdk
・Java version 1.5.0_10
・HADOOP_HOME=/home/hadoop/hadoop-0.15.3
・hadoop起動で出力されるファイルたちの保存ディレクトリ
/home/hadoop/filesystem
・マスターサーバ1台、スレーブサーバ1台で
masterが192.168.0.5
slaveが192.168.0.8
■必須項目
Java 1.5がインストールされているか確認する。
sshがインストールされてて、sshdが動いているか確認する。
■インストール
http://lucene.apache.org/hadoop/releases.htmlからパッケージをダウンロード。
対象とするマシン全てに設置する。
この時、設置するディレクトリは全て同じにすべし。
今回の場合は、HADOOP_HOME=/home/hadoop/hadoop-0.15.3とする。
■conf/hadoop-env.sh
JAVA_HOMEを編集する。マスター側だけ?
export JAVA_HOME=/usr/java/j2sdk
■conf/hadoop-site.xml
編集が必須の設定ファイル。マスター側だけ?
<configuration> <property> <name>fs.default.name</name> <value>localhost:9000</value> </property> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> <property> <name>dfs.name.dir</name> <value>/home/hadoop/filesystem/dfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/home/hadoop/filesystem/dfs/data</value> </property> <property> <name>mapred.system.dir</name> <value>/home/hadoop/filesystem/mapred/system</value> </property> <property> <name>mapred.local.dir</name> <value>/home/hadoop/filesystem/mapred/local</value> </property> </configuration>
Hadoop Cluster Setupには上記以外のパラメータも存在しているが、
設定しなくてもよいみたいなので無視。
■conf/slaves
スレーブとなるマシンのIPを入力する。マスター側だけ?
なお1行1IPで記述する。
192.168.0.8
■Hadoopの起動
ひとまず初期化。多分これは一度のみしか行なってはいけないっぽい。マスター側だけ?
$ ./bin/hadoop namenode -format
マスターにしか存在してはいけない「NameNode」と
マスターにしか存在してはいけない「JobTracker」を起動する。
秘密鍵を作成していないので、パスワードを入力することになる。
$ ./bin/start-dfs.sh starting namenode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-namenode-hoge.out hadoop@192.168.0.8's password: 192.168.0.8: starting datanode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-datanode-hoge.out hadoop@localhost's password: localhost: starting secondarynamenode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-secondarynamenode-hoge.out $ ./bin/start-mapred.sh starting jobtracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-jobtracker-hoge.out hadoop@192.168.0.8's password: 192.168.0.8: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-tasktracker-hoge.out
これでスレーブ(slave)側にもプロセスが立ち上がっているかチェックしてみる。
(スレーブ側) $ ps -ux hadoop 29702 0.1 1.4 1324880 45176 ? Sl 01:29 0:00 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.log.dir=/home hadoop 30199 0.3 1.6 1329036 50108 ? Sl 01:31 0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.log.dir=/home
これで一通りの「Hadoop Cluster Setup」が完了したっぽい。
で?どうするか。
以前から興味があったので、Hadoopを触ってみた。
Hadoopとは、要はGoogle File System (GFS)をパクッたようなもん。
もしこれでパフォーマンスが向上するならば、今後使用するかも。
■Hadoop Quickstart
http://hadoop.apache.org/core/docs/current/quickstart.html
1.環境変数にJAVA_HOMEを設定する。
2.http://hadoop.apache.org/core/releases.htmlからhadoop-0.15.3.tar.gzをダウンロード
3.${HADOOP_HOME}/conf/hadoop-env.shを開き、JAVA_HOMEを設定
export JAVA_HOME=/usr/java/j2sdk
4.新しく作成したinputディレクトリに
設定ファイル(hadoop-default.xml,hadoop-site.xml)をコピーする。
$ mkdir input $ cp conf/*.xml input
5.よく分かんないけど、コマンド打ってみる。
$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+' $ cat output/*
6.${HADOOP_HOME}/conf/hadoop-site.xmlを開く。
configurationの中身が書いていないので、ひとまずマニュアル通り埋めてみる。
<configuration>
<property>
<name>fs.default.name</name>
<value>localhost:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
7.sshのpassphraseを設定する。
マニュアルをそのまま実行する。
$ ssh localhost ssh_exchange_identification: Connection closed by remote host
こんなエラーが出たので/etc/hosts.allowに127.0.0.1を追加して接続許可。
8.よくわからんけど、マニュアルにしたがってコマンド実行。
$ bin/hadoop namenode -format $ bin/start-all.sh starting namenode, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-namenode-hoge.out hoge@localhost's password:XXXXXXXXXXXXXX localhost: starting datanode, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-datanode-hoge.out hoge@localhost's password:XXXXXXXXXXXXXX localhost: starting secondarynamenode, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-secondarynamenode-hoge.out starting jobtracker, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-jobtracker-hoge.out hoge@localhost's password:XXXXXXXXXXXXXX localhost: starting tasktracker, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-tasktracker-hoge.out
無事起動したようだ。psコマンドでプロセスを見るとなんか動いてる。
hoge 4546 0.4 1.5 1253468 31960 pts/1 Sl 01:08 0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home... hoge 4654 0.3 1.3 1245276 28476 ? Sl 01:08 0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home... hoge 4754 0.4 1.4 1244016 29280 ? Sl 01:08 0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home... hoge 4815 0.4 1.4 1252616 30092 pts/1 Sl 01:08 0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home... hoge 4933 0.4 1.4 1247276 29020 ? Sl 01:08 0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home...
9.ブラウザで起動状況を確認できるようだ。

「Hadoop Quickstart」を行ってみたが、これで何ができるかはまだ不明。
どうするか。