kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

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 を除けば、基本的に疑似分散とやっていることは同じ感じで、特に問題なく動作させることができた。