今回は、4台のサーバーからなるHadoopクラスタの構築手順を紹介します。10台程度までは、そのまま計算ノードを増やすことができますので、本格活用に向けた実験を始めるのに最適な構成です。

 「Hadoopは安価なコモディティ・サーバーを使用する」と説明されることがありますが、これは、あくまで標準的なx86サーバーを使用するという意味です。大量のデータを高速に処理するには、それなりのスペックが必要で、Hadoopのデフォルト設定では、8コアのCPUと8GBのメモリーを搭載したサーバーが想定されています。

Hadoopの導入手順

 ここでは、図1の4台のサーバーを使用します。ホストネームは、管理ノードがhdpmgmt01、計算ノードがhdpnode01~03です。それぞれ、4コアのCPUと4GBのメモリーを搭載したサーバーとします。異なるスペックのサーバーの場合は、後述の設定パラメータを変更してください。

図1●Hadoopクラスタのサーバー構成
図1●Hadoopクラスタのサーバー構成

 Hadoopの最新バージョンは0.21.0ですが、これは、8月末に公開されたばかりですので、ここでは、1つ前のバージョンである0.20.2を使用します。

●事前準備

 インストールを開始する前に、各種のファイルを配置するディレクトリと各デーモンに割り当てる最大メモリー容量をそれぞれ、表1表2のように決めておきます。

表1●ディレクトリ構成
全ノード共通 hadoopユーザーホーム /home/hadoop
Hadoop導入先 /opt/hadoop-0.20.2
(/home/hadoop/hadoop からのシンボリックリンクを作成)
Hadoopログファイル /home/hadoop/logs
MapReduce作業領域 /disk01/mapred/local
/tmp/hadoop/mapred/system(HDFS内のディレクトリ)
管理ノード HDFSメタデータ /disk01/hdfs/name
/disk01/hdfs/name_secondary
計算ノード HDFSデータ /disk01/hdfs/data

表2●メモリー割り当て
■サーバー デーモン メモリー 設定パラメータ
■管理ノード NameNode 800MB /home/hadoop/conf/hadoop-env.sh
-HADOOP_HEAPSIZE
SecondaryNameNode 800MB
JobTracker 800MB
合計 2400MB
■計算ノード DataNode 800MB
TaskTracker 800MB
Child JVM 200MB
×(3+3)
/home/hadoop/conf/mapred-site.xml
-mapred.child.java.opts
-mapred.tasktracker.map.tasks.maximum
-mapred.tasktracker.reduce.tasks.maximum
合計 2800MB

 表2のパラメータの値は、環境に合わせた調整が必要です。Child JVMのメモリーに着目すると、200MB×(3+3)という計算式があります。2つの「3」は、この計算ノードで、Map処理とReduce処理を、それぞれ同時にいくつ実行するかを表します。1つの処理は1つのCPUコアを使用しますので、それぞれ、「計算ノードのCPUコア数-1」程度の値を指定します。Map処理とReduce処理が並行に実施されると、同時処理数がCPUコア数を超える場合もありますが、経験的にこの程度がよいと言われています。

 次に、各デーモンに割り当てる最大メモリー容量を決めます。NameNode、 SecondaryNameNode、 DataNode、 JobTracker、 TaskTrackerの5つのデーモンは、共通の設定パラメータ(HADOOP_HEAPSIZE)で、同じ値が指定されます。Child JVMにのみ、異なる値が設定できます。サーバーのメモリーは、Hadoopのデーモン以外に、ディスクバッファなどにも使用されますので、デーモンに割り当てる最大メモリーの合計を、物理メモリー一杯に設定するのは避けてください。