創聖合体「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台程度であったら検証にならない?



・・・面倒くせぇ。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">

Comments links could be nofollow free.