Tag Archives: Hadoop

[お役立ちリンク]Hadoop→HBaseのインストール

先日、HadoopとHBaseをインストールしていた時に
今まで見た中で一番分かりやすい解説ページがあったので紹介する。

■Hadoop/Hbase Clusterの構築
http://lunarium.info/arc/index.php/Hadoop/Hbase_Cluster%E3%81%AE%E6%A7%8B%E7%AF%89

これで簡単に「話題のクラウド化」へ!?

Javaオープンソース「Nutch」はクロール→インデクシング→検索までいける

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と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台程度であったら検証にならない?



・・・面倒くせぇ。

「Hypertable」をインストールしてみた。Hadoopと合体させたい

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以降にアップグレードした方がいいかも。

以上、疲れた。

Apache Hadoopのデータベース「HBase」を設定してみた

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を参考に。

Apache HadoopでClusterをセットアップしてみた。でも・・・

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」が完了したっぽい。

で?どうするか。

Apache Hadoopの「Hadoop Quickstart」をそのまま試してみた。でも・・・

以前から興味があったので、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」を行ってみたが、これで何ができるかはまだ不明。

どうするか。