今回は、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のデーモン以外に、ディスクバッファなどにも使用されますので、デーモンに割り当てる最大メモリーの合計を、物理メモリー一杯に設定するのは避けてください。

この先は会員の登録が必要です。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら