Hadoop使用メモ2
前回の段階で、とりあえず1台で動作したので、今度はもう少し実際の利用形態に近づけてみることにする。
ということで、4ノードを用意し以下のような感じでデーモンを動かす構成とした。
ノード名 | 動作デーモン |
---|---|
hadoop0 | NameNode |
hadoop1 | JobTracker, Secondary NameNode |
hadoop2 | DataNode, TaskTracker |
hadoop3 | DataNode, TaskTracker |
準備
基本的に前回のエントリで書いた準備と同じことをすべてのノードで行った。ただし、今回は、hadoop のデータを /home/hadoop/hadoop_tmp というディレクトリに置くことにしたので、あらかじめ各ノードでこのディレクトリを用意しておいた。
ssh の設定
hadoo0 から hadoop1,2,3 へ、hadoop1 から hadoop2,3 へパスワードなしでログインできるようにしておく。
例えば hadoop0 で
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
として生成できた ~/.ssh/id_dsa.pub を各ノードに配布し各ノードで
$ cat id_dsa.pub >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys
としておく。
共通設定
すべてのノードで以下の設定をした。実際は、hadoop0 上で書いて後は scp したのだけど。
$HADOOP_HOME/conf/core-site.xml。/home/hadoop/hadoop_tmp を使うように設定。
hadoop.tmp.dir /home/${user.name}/hadoop_tmp fs.default.name hdfs://hadoop0:9000
$HADOOP_HOME/conf/hdfs-site.xml。DataNode が2つあるので、複製数を2にした。
dfs.replication 2
$HADOOP_HOME/conf/mapred-site.xml。
mapred.job.tracker hadoop1:9001
NameNodeでの設定
NameNode、この場合は hadoop0 上の conf/masters に Secondary NameNode を動かすノードを
hadoop1
というように記述し、conf/slaves に DataNode を動かすノードを
hadoop2 hadoop3
と記述。
JobTrackerでの設定
JobTracker、この場合は hadoop1 上の conf/slaves に TaskTracker を動かすノードを
hadoop2 hadoop3
と記述。
実行
以上で設定は完了なので、まず HDFS をフォーマットした。hadoop0 にて
$ ./bin/hadoop namenode -format
を実行。
その後、まず NameNode, DataNode を起動するために hadoop0 にて
$ ./bin/start-dfs.sh
を実行した。このタイミングで、hadoop1 では Secondary NameNode が起動している。hadoop2,3 では DataNode が起動している。これらは ps コマンドで確認した。また、hadoop_tmp 以下に dfs も作成されていた。
続いて、JobTracker, TaskTracker を起動するために hadoop1 にて
$ ./bin/start-mapred.sh
を実行した。hadoop2,3 では TaskTracker がこれで起動する。
以上で、起動完了で、あとは疑似分散のときの動作確認と同じ要領で確認した。
停止は、hadoop1 で
$ ./bin/stop-mapred.sh
として、hadoop0 で
$ ./bin/stop-dfs.sh
とした。
conf/masters や conf/slaves を除けば、基本的に疑似分散とやっていることは同じ感じで、特に問題なく動作させることができた。