fbpx

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:~$

正しく計算が行われました。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA