完全分散モードでHadoopインストール
疑似分散モードでインストールができたら,次は完全分散モードです.
インストール方法をさらっと書いていますが,ここはかなりハマりました.
下記の2つのノードで構築することとします.
- Master node (1台のみ必要)
- namenode
- jobtracker
- Worker node (何台でも増やせます)
- datanode
- tasktracker
事前準備 (Master/Worker共通)
NTPによる時刻合わせとJDKインストールを行っておきます.
やり方は前エントリに書いてありますので,ここでは割愛.
Hadoopインストール (Master)
必要なパッケージのみインストール.
yum install hadoop-0.20 yum install hadoop-0.20-namenode yum install hadoop-0.20-jobtracker
コンフィグ作成 (Master)
# ひな形をコピー cp -r /etc/hadoop-0.20/conf.empty /etc/hadoop-0.20/conf.my_cluster # コンフィグの優先度をmy_cluster優先に変更 update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.my_cluster 50 update-alternatives --display hadoop-0.20-conf # 優先度が↓のように確認できる hadoop-0.20-conf - status is auto. link currently points to /etc/hadoop-0.20/conf.my_cluster /etc/hadoop-0.20/conf.empty - priority 10 /etc/hadoop-0.20/conf.my_cluster - priority 50 Current `best' version is /etc/hadoop-0.20/conf.my_cluster.
ここからは延々と編集作業.
master
vi /etc/hadoop-0.20/conf.my_cluster/master
# Master nodeのホスト名を記述
hadoop0
slaves
vi /etc/hadoop-0.20/conf.my_cluster/slaves
# Worker nodeのホスト名を記述
hadoop1
hadoop2
hadoop3
hadoop4
...
core-site.xml
vi /etc/hadoop-0.20/conf.my_cluster/core-site.xml <configuration> <property> <!-- Master nodeのホスト名を記述 --> <name>fs.default.name</name> <value>hdfs://hadoop0:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/var/lib/hadoop-0.20/cache/${user.name}</value> </property> </configuration>
vi /etc/hadoop-0.20/conf.my_cluster/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <!-- こうしとかないと普通のユーザがHDFSにアクセスできない --> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
mapred-site.xml
vi /etc/hadoop-0.20/conf.my_cluster/mapred-site.xml <configuration> <property> <!-- Master nodeのホスト名を記述 --> <name>mapred.job.tracker</name> <value>hadoop0:8021</value> </property> <property> <name>mapred.jobtracker.plugins</name> <value>org.apache.hadoop.thriftfs.ThriftJobTrackerPlugin</value> </property> <property> <name>jobtracker.thrift.address</name> <value>0.0.0.0:9290</value> </property> </configuration>
Worker nodeでも全く同じファイルをつかうので,ここでコンフィグを固めておきます.
rsyncとかで同期させる場合は必要ありません.
tar zcvfp my_cluster.tar.gz /etc/hadoop-0.20/conf.my_cluster
ディレクトリ作成・初期フォーマットとデーモン起動 (Master)
ここまでできたら,あとは細々とした作業を残すのみ.
キャッシュ用ディレクトリ作成.ちなみにhadoop.tmp.dirを指定しない場合には/tmpが使われるようです.
mkdir -p /var/lib/hadoop-0.20/cache # パーミッションも付けておきましょう chmod 1777 /var/lib/hadoop-0.20/cache
初期フォーマット.
su -s /bin/bash - hdfs -c 'hadoop namenode -format'
デーモン起動.
service hadoop-0.20-namenode start service hadoop-0.20-jobtracker start
Hadoopインストール (Worker)
Worker側も必要なパッケージをインストール.
yum install hadoop-0.20 yum install hadoop-0.20-datanode yum install hadoop-0.20-tasktracker
コンフィグ反映 (Worker)
Masterで作った設定ファイルをそのままコピー.優先度もMasterと同様に反映します.
cd / tar zxvfp path/to/my_cluster.tar.gz update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.my_cluster 50 update-alternatives --display hadoop-0.20-conf
ディレクトリ作成とデーモン起動 (Worker)
この辺りもMasterの時とほぼ同じ.Workerでは初期フォーマットは必要ありません.
mkdir -p /var/lib/hadoop-0.20/cache chmod 1777 /var/lib/hadoop-0.20/cache service hadoop-0.20-datanode start service hadoop-0.20-tasktracker start
動作確認
疑似分散モードの時と同じようにPiを求めてみる.Map数を10にしてみた.
hadoop jar /usr/lib/hadoop/hadoop-0.20.2+737-examples.jar pi 10 100000 Number of Maps = 10 Samples per Map = 100000 Wrote input for Map #0 Wrote input for Map #1 Wrote input for Map #2 Wrote input for Map #3 Wrote input for Map #4 Wrote input for Map #5 Wrote input for Map #6 Wrote input for Map #7 Wrote input for Map #8 Wrote input for Map #9 Starting Job ... Job Finished in 91.075 seconds Estimated value of Pi is 3.14155200000000000000