今回は、4台のサーバーからなるHadoopクラスタの構築手順を紹介します。10台程度までは、そのまま計算ノードを増やすことができますので、本格活用に向けた実験を始めるのに最適な構成です。
「Hadoopは安価なコモディティ・サーバーを使用する」と説明されることがありますが、これは、あくまで標準的なx86サーバーを使用するという意味です。大量のデータを高速に処理するには、それなりのスペックが必要で、Hadoopのデフォルト設定では、8コアのCPUと8GBのメモリーを搭載したサーバーが想定されています。
Hadoopの導入手順
ここでは、図1の4台のサーバーを使用します。ホストネームは、管理ノードがhdpmgmt01、計算ノードがhdpnode01~03です。それぞれ、4コアのCPUと4GBのメモリーを搭載したサーバーとします。異なるスペックのサーバーの場合は、後述の設定パラメータを変更してください。
Hadoopの最新バージョンは0.21.0ですが、これは、8月末に公開されたばかりですので、ここでは、1つ前のバージョンである0.20.2を使用します。
●事前準備
インストールを開始する前に、各種のファイルを配置するディレクトリと各デーモンに割り当てる最大メモリー容量をそれぞれ、表1、表2のように決めておきます。
全ノード共通 | 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 |
■サーバー | デーモン | メモリー | 設定パラメータ |
---|---|---|---|
■管理ノード | 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のデーモン以外に、ディスクバッファなどにも使用されますので、デーモンに割り当てる最大メモリーの合計を、物理メモリー一杯に設定するのは避けてください。