GFS(Google File System)とMapReduceのオープンソース版であるHadoopを試してみました。
物理サーバーは手元にないので、ローカルのVMwareにCentOS5.2を3つ(master×1/slave×2)を立てて行いました。
参考にしたのは以下のサイト。
物理サーバーは手元にないので、ローカルのVMwareにCentOS5.2を3つ(master×1/slave×2)を立てて行いました。
参考にしたのは以下のサイト。
構成
- hadoop000 : 192.168.0.192 - NameNode/JobTracker
- hadoop001 : 192.168.0.193 - DataNode/TaskTracker
- hadoop002 : 192.168.0.194 - DataNode/TaskTracker
設定
- conf/hadoop-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/${user.name}/hadoop/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop000:54310</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hadoop000:54311</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration> - conf/masters
hadoop000
- conf/slaves
hadoop001
hadoop002
実行
(初回のみ)$ bin/hadoop namenode -format
Hadoop起動
$ bin/start-all.sh
Hadoop停止
$ bin/stop-all.sh
Hadoopが起動中は、NameNode/JobTrackerの状態をWebブラウザで見ることができます。
- NameNode - http://hadoop000:50070/
- JobTracker - http://hadoop000:50030/
サンプル実行
$ bin/hadoop jar hadoop-0.18.0-examples.jar randomtextwriter \
-Dtest.randomtextwrite.maps_per_host=5 \
-Dtest.randomtextwrite.bytes_per_map=268435456 \
outputs
Running 10 maps.
Job started: Tue Sep 09 03:17:39 JST 2008
08/09/09 03:17:41 INFO mapred.JobClient: Running job: job_200809090316_0001
08/09/09 03:17:42 INFO mapred.JobClient: map 0% reduce 0%
08/09/09 03:21:42 INFO mapred.JobClient: map 10% reduce 0%
08/09/09 03:22:24 INFO mapred.JobClient: map 40% reduce 0%
08/09/09 03:22:47 INFO mapred.JobClient: map 60% reduce 0%
08/09/09 03:22:54 INFO mapred.JobClient: map 70% reduce 0%
08/09/09 03:23:00 INFO mapred.JobClient: map 80% reduce 0%
08/09/09 03:23:22 INFO mapred.JobClient: Job complete: job_200809090316_0001
08/09/09 03:23:22 INFO mapred.JobClient: Counters: 7
08/09/09 03:23:22 INFO mapred.JobClient: File Systems
08/09/09 03:23:22 INFO mapred.JobClient: HDFS bytes written=2755602362
08/09/09 03:23:22 INFO mapred.JobClient: Job Counters
08/09/09 03:23:22 INFO mapred.JobClient: Launched map tasks=13
08/09/09 03:23:22 INFO mapred.JobClient: org.apache.hadoop.examples.RandomTextWriter$Counters
08/09/09 03:23:22 INFO mapred.JobClient: BYTES_WRITTEN=2684358849
08/09/09 03:23:22 INFO mapred.JobClient: RECORDS_WRITTEN=4097295
08/09/09 03:23:22 INFO mapred.JobClient: Map-Reduce Framework
08/09/09 03:23:22 INFO mapred.JobClient: Map input records=10
08/09/09 03:23:22 INFO mapred.JobClient: Map input bytes=0
08/09/09 03:23:22 INFO mapred.JobClient: Map output records=4097295
Job ended: Tue Sep 09 03:23:22 JST 2008
The job took 343 seconds.
注意
- FW
master/slavesは、hadoop-site.xmlのfs.default.name/mapred.job.trackerで設定したmaster側のポートを使って通信をするのでこの2つのポートはslavesから見れるようにしておかなければならない。 - リッスンするアドレス
2つのデーモンがリッスンするアドレスは、hadoop-site.xmlのfs.default.name/mapred.job.trackerで設定したホスト名から引けるIP上でしかリッスンしないのでhostsファイル/DNSの設定に注意。 - exampleをいくつか試したが、slavesにmasterノードを含めてしまうと重い処理を走らせたときに返事をしてくれなくなりジョブの停止もままならない状態になったのでmasterは独立させておいたほうが良いみたい。
さて、Hadoopに何してもらおうか。