Hadoopを使ってみよう [4]
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Hadoopクラスタの作成
前回は1台のホストにマスター、スレーブを両方の処理を行わせる疑似クラスタを構築しましたが、今回はマスター1台、スレーブ2台のクラスタを構築します。
本稼動のクラスタにはセカンダリマスター(SecondaryNameNode)が必要となりますが、ここでは割愛します。
雛形イメージの作成
前回使用したHadoop疑似クラスタのイメージを雛形用にコピーします。
まず設定ファイルをコピーし、そちらを使うように設定します。
root@ubuntu:~# cp -a /etc/hadoop-0.20/conf.pseudo /etc/hadoop-0.20/conf.cluster root@ubuntu:~# root@ubuntu:~# update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.cluster 50 update-alternatives: /etc/hadoop-0.20/conf (hadoop-0.20-conf) を提供するために 自 動モード で /etc/hadoop-0.20/conf.cluster を使います。 root@ubuntu:~# root@ubuntu:~# update-alternatives --display hadoop-0.20-conf hadoop-0.20-conf - 自動モード リンクは現在 /etc/hadoop-0.20/conf.cluster を指しています /etc/hadoop-0.20/conf.cluster - 優先度 50 /etc/hadoop-0.20/conf.empty - 優先度 10 /etc/hadoop-0.20/conf.pseudo - 優先度 30 現在の `最適' バージョンは /etc/hadoop-0.20/conf.cluster です。 root@ubuntu:~#
一旦すべてのサービスを停止し、パッケージを削除します。
root@ubuntu:~# /etc/init.d/hadoop-0.20-secondarynamenode stop Stopping Hadoop secondarynamenode daemon: stopping secondarynamenode hadoop-0.20-secondarynamenode. root@ubuntu:~# /etc/init.d/hadoop-0.20-tasktracker stop Stopping Hadoop tasktracker daemon: stopping tasktracker hadoop-0.20-tasktracker. root@ubuntu:~# /etc/init.d/hadoop-0.20-datanode stop Stopping Hadoop datanode daemon: stopping datanode ERROR. Could not stop Hadoop datanode daemon root@ubuntu:~# /etc/init.d/hadoop-0.20-jobtracker stop Stopping Hadoop jobtracker daemon: stopping jobtracker hadoop-0.20-jobtracker. root@ubuntu:~# /etc/init.d/hadoop-0.20-namenode stop Stopping Hadoop namenode daemon: stopping namenode hadoop-0.20-namenode. root@ubuntu:~#
root@ubuntu:~# aptitude purge hadoop-0.20-conf-pseudo hadoop-0.20-datanode hadoop-0.20-jobtrackerhadoop-0.20-namenode hadoop-0.20-secondarynamenode hadoop-0.20-tasktracker : hadoop-0.20-conf-pseudo を削除しています ... hadoop-0.20-conf-pseudo の設定ファイルを削除しています ... dpkg: 警告: hadoop-0.20-conf-pseudo の削除中、ディレクトリ '/etc/hadoop-0.20/conf.pseudo' が空でないため削除できませんでした。 hadoop-0.20-datanode を削除しています ... hadoop-0.20-datanode の設定ファイルを削除しています ... hadoop-0.20-jobtracker を削除しています ... hadoop-0.20-jobtracker の設定ファイルを削除しています ... hadoop-0.20-namenode を削除しています ... hadoop-0.20-namenode の設定ファイルを削除しています ... hadoop-0.20-secondarynamenode を削除しています ... hadoop-0.20-secondarynamenode の設定ファイルを削除しています ... hadoop-0.20-tasktracker を削除しています ... hadoop-0.20-tasktracker の設定ファイルを削除しています ... : root@ubuntu:~#
データを削除しておきます。
root@ubuntu:~# ls -l /var/lib/hadoop-0.20/cache/ 合計 16 drwxr-xr-x 2 cf cf 4096 2012-05-29 22:30 cf drwxr-xr-x 3 root hadoop 4096 2012-05-29 22:05 hadoop drwxr-xr-x 3 hdfs hdfs 4096 2012-05-29 22:27 hdfs drwxr-xr-x 3 mapred mapred 4096 2012-05-29 22:26 mapred root@ubuntu:~# /bin/rm -rf /var/lib/hadoop-0.20/cache/cf /var/lib/hadoop-0.20/cache/hdfs /var/lib/hadoop-0.20/cache/mapred root@ubuntu:~#
NameNodeとJobTrackerがマスターホスト(hm1)を参照するように設定します。
root@ubuntu:~# cp -a /etc/hadoop-0.20/conf.cluster/core-site.xml /etc/hadoop-0.20/conf.cluster/core-site.xml.orig root@ubuntu:~# vi /etc/hadoop-0.20/conf.cluster/core-site.xml root@ubuntu:~# diff -u /etc/hadoop-0.20/conf.cluster/core-site.xml.orig /etc/hadoop-0.20/conf.cluster/core-site.xml --- /etc/hadoop-0.20/conf.cluster/core-site.xml.orig 2012-05-30 10:57:45.080481085 +0900 +++ /etc/hadoop-0.20/conf.cluster/core-site.xml 2012-05-30 10:57:10.300500660 +0900 @@ -4,7 +4,7 @@ <configuration> <property> <name>fs.default.name</name> - <value>hdfs://localhost:8020</value> + <value>hdfs://hm1:8020</value> </property> <property> root@ubuntu:~# root@ubuntu:~# cp -a /etc/hadoop-0.20/conf.cluster/mapred-site.xml /etc/hadoop-0.20/conf.cluster/mapred-site.xml.orig root@ubuntu:~# vi /etc/hadoop-0.20/conf.cluster/mapred-site.xml root@ubuntu:~# diff -u /etc/hadoop-0.20/conf.cluster/mapred-site.xml.orig /etc/hadoop-0.20/conf.cluster/mapred-site.xml --- /etc/hadoop-0.20/conf.cluster/mapred-site.xml.orig 2012-05-08 05:03:10.000000000 +0900 +++ /etc/hadoop-0.20/conf.cluster/mapred-site.xml 2012-05-30 11:03:17.930501511 +0900 @@ -4,7 +4,7 @@ <configuration> <property> <name>mapred.job.tracker</name> - <value>localhost:8021</value> + <value>hm1:8021</value> </property> <!-- Enable Hue plugins --> root@ubuntu:~#
スレーブサーバを2台動かすので、レプリケーション数を2に設定します。
root@ubuntu:~# cp -a /etc/hadoop-0.20/conf.cluster/hdfs-site.xml /etc/hadoop-0.20/conf.cluster/hdfs-site.xml.orig root@ubuntu:~# vi /etc/hadoop-0.20/conf.cluster/hdfs-site.xml root@ubuntu:~# diff -u /etc/hadoop-0.20/conf.cluster/hdfs-site.xml.orig /etc/hadoop-0.20/conf.cluster/hdfs-site.xml --- /etc/hadoop-0.20/conf.cluster/hdfs-site.xml.orig 2012-05-08 05:03:10.000000000 +0900 +++ /etc/hadoop-0.20/conf.cluster/hdfs-site.xml 2012-05-30 11:07:49.000501095 +0900 @@ -4,7 +4,7 @@ <configuration> <property> <name>dfs.replication</name> - <value>1</value> + <value>2</value> </property> <property> <name>dfs.permissions</name> root@ubuntu:~#
これがHadoopクラスタの雛形となります。
マスターホストの作成
Hadoopクラスタの雛形をコピーし、まずマスターホストを作成します。
ここではIPアドレスを192.168.122.211、ホスト名をhm1とします。
改めてNameNodeとJobTrackerをインストールします。
root@hm1:~# aptitude install hadoop-0.20-namenode hadoop-0.20-jobtracker : hadoop-0.20-jobtracker (0.20.2+923.256-1~lucid-cdh3) を設定しています ... update-rc.d: warning: hadoop-0.20-jobtracker start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (3 5) update-rc.d: warning: hadoop-0.20-jobtracker stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 1 2 4 6) hadoop-0.20-namenode (0.20.2+923.256-1~lucid-cdh3) を設定しています ... update-rc.d: warning: hadoop-0.20-namenode start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (3 5) update-rc.d: warning: hadoop-0.20-namenode stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 1 2 4 6) :
NameNodeをフォーマットします。
root@hm1:~# su hdfs -c "hadoop-0.20 namenode -format" 12/05/30 11:30:47 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = hm1/192.168.122.211 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.20.2-cdh3u4 STARTUP_MSG: build = file:///data/1/tmp/nightly_2012-05-07_12-47-23_3/hadoop-0.20-0.20.2+923.256-1~lucid -r 214dd731e3bdb687cb55988d3f47dd9e248c5690; compiled by 'root' on Mon May 7 14:02:35 PDT 2012 ************************************************************/ 12/05/30 11:30:47 INFO util.GSet: VM type = 64-bit 12/05/30 11:30:47 INFO util.GSet: 2% max memory = 19.33375 MB 12/05/30 11:30:47 INFO util.GSet: capacity = 2^21 = 2097152 entries 12/05/30 11:30:47 INFO util.GSet: recommended=2097152, actual=2097152 12/05/30 11:30:47 INFO namenode.FSNamesystem: fsOwner=hdfs (auth:SIMPLE) 12/05/30 11:30:47 INFO namenode.FSNamesystem: supergroup=supergroup 12/05/30 11:30:47 INFO namenode.FSNamesystem: isPermissionEnabled=false 12/05/30 11:30:47 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=1000 12/05/30 11:30:47 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s) 12/05/30 11:30:48 INFO common.Storage: Image file of size 110 saved in 0 seconds. 12/05/30 11:30:48 INFO common.Storage: Storage directory /var/lib/hadoop-0.20/cache/hadoop/dfs/name has been successfully formatted. 12/05/30 11:30:48 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hm1/192.168.122.211 ************************************************************/ root@hm1:~#
NameNodeとJobTrackerを起動します。
root@hm1:~# /etc/init.d/hadoop-0.20-namenode start Starting Hadoop namenode daemon: starting namenode, logging to /usr/lib/hadoop-0.20/logs/hadoop-hadoop-namenode-hm1.out hadoop-0.20-namenode. root@hm1:~# /etc/init.d/hadoop-0.20-jobtracker start Starting Hadoop jobtracker daemon: starting jobtracker, logging to /usr/lib/hadoop-0.20/logs/hadoop-hadoop-jobtracker-hm1.out hadoop-0.20-jobtracker. root@hm1:~#
スレーブホストの作成
Hadoopクラスタの雛形をコピーし、1台目のスレーブホストを作成します。
IPアドレスは192.168.122.221、ホスト名はhs01とします。
DataNodeとTaskTrackerをインストールします。
root@hs01:~# aptitude install hadoop-0.20-datanode hadoop-0.20-tasktracker : hadoop-0.20-datanode (0.20.2+923.256-1~lucid-cdh3) を設定しています ... update-rc.d: warning: hadoop-0.20-datanode start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (3 5) update-rc.d: warning: hadoop-0.20-datanode stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 1 2 4 6) hadoop-0.20-tasktracker (0.20.2+923.256-1~lucid-cdh3) を設定しています ... update-rc.d: warning: hadoop-0.20-tasktracker start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (3 5) update-rc.d: warning: hadoop-0.20-tasktracker stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 1 2 4 6) : root@hs01:~#
1台目のスレーブホストをコピーし、2台目のスレーブホストを作成します。
IPアドレスは192.168.122.222、ホスト名はhs02とします。
両スレーブホストでDataNodeとTaskTrackerを起動します。
これでマスターホスト1台、スレーブホスト2台となりました。
動作確認
マスターホストから円周率計算プログラムを実行します。
cf@hm1:~$ hadoop jar /usr/lib/hadoop-0.20/hadoop-0.20.2-cdh3u4-examples.jar pi 4 2 000 Number of Maps = 4 Samples per Map = 2000 Wrote input for Map #0 Wrote input for Map #1 Wrote input for Map #2 Wrote input for Map #3 Starting Job 12/05/30 11:50:56 INFO mapred.FileInputFormat: Total input paths to process : 4 12/05/30 11:50:57 INFO mapred.JobClient: Running job: job_201205301132_0001 12/05/30 11:50:58 INFO mapred.JobClient: map 0% reduce 0% 12/05/30 11:51:03 INFO mapred.JobClient: map 25% reduce 0% 12/05/30 11:51:04 INFO mapred.JobClient: map 50% reduce 0% 12/05/30 11:51:06 INFO mapred.JobClient: map 100% reduce 0% 12/05/30 11:51:12 INFO mapred.JobClient: map 100% reduce 33% 12/05/30 11:51:13 INFO mapred.JobClient: map 100% reduce 100% 12/05/30 11:51:14 INFO mapred.JobClient: Job complete: job_201205301132_0001 12/05/30 11:51:14 INFO mapred.JobClient: Counters: 28 12/05/30 11:51:14 INFO mapred.JobClient: Job Counters 12/05/30 11:51:14 INFO mapred.JobClient: Launched reduce tasks=1 12/05/30 11:51:14 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=10894 12/05/30 11:51:14 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 12/05/30 11:51:14 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 12/05/30 11:51:14 INFO mapred.JobClient: Rack-local map tasks=2 12/05/30 11:51:14 INFO mapred.JobClient: Launched map tasks=4 12/05/30 11:51:14 INFO mapred.JobClient: Data-local map tasks=2 12/05/30 11:51:14 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=10152 12/05/30 11:51:14 INFO mapred.JobClient: FileSystemCounters 12/05/30 11:51:14 INFO mapred.JobClient: FILE_BYTES_READ=94 12/05/30 11:51:14 INFO mapred.JobClient: HDFS_BYTES_READ=904 12/05/30 11:51:14 INFO mapred.JobClient: FILE_BYTES_WRITTEN=277022 12/05/30 11:51:14 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=215 12/05/30 11:51:14 INFO mapred.JobClient: Map-Reduce Framework 12/05/30 11:51:14 INFO mapred.JobClient: Map input records=4 12/05/30 11:51:14 INFO mapred.JobClient: Reduce shuffle bytes=112 12/05/30 11:51:14 INFO mapred.JobClient: Spilled Records=16 12/05/30 11:51:14 INFO mapred.JobClient: Map output bytes=72 12/05/30 11:51:14 INFO mapred.JobClient: CPU time spent (ms)=1460 12/05/30 11:51:14 INFO mapred.JobClient: Total committed heap usage (bytes)=558579712 12/05/30 11:51:14 INFO mapred.JobClient: Map input bytes=96 12/05/30 11:51:14 INFO mapred.JobClient: Combine input records=0 12/05/30 11:51:14 INFO mapred.JobClient: SPLIT_RAW_BYTES=432 12/05/30 11:51:14 INFO mapred.JobClient: Reduce input records=8 12/05/30 11:51:14 INFO mapred.JobClient: Reduce input groups=2 12/05/30 11:51:14 INFO mapred.JobClient: Combine output records=0 12/05/30 11:51:14 INFO mapred.JobClient: Physical memory (bytes) snapshot=855805952 12/05/30 11:51:14 INFO mapred.JobClient: Reduce output records=0 12/05/30 11:51:14 INFO mapred.JobClient: Virtual memory (bytes) snapshot=2401337344 12/05/30 11:51:14 INFO mapred.JobClient: Map output records=8 Job Finished in 17.927 seconds Estimated value of Pi is 3.14100000000000000000 cf@hm1:~$
正しく計算が行われました。