Fork me on GitHub

Hadoop Ipアドレスを使ったクラスタの構成

  • Mar 23, 2010

categoryプラグインは存在しません。

概要

HadoopはFQDNを指定しないとうまくクラスタを構成できないのは割とよく知られていますが、IPアドレスのみで設定したい場合の方法のメモ。

環境

手順

/etc/hostsの変更

まず、Hadoopのnamenodeおよびjobtrackerが、正しくホスト名を取得できるように、/etc/hostsを直します。と言っても、デフォルトの状態からいじっていなければそれで問題ありません。

もし、namenodeやjobtrackerのIPアドレスが

192.168.0.2 hoge

などというように/etc/hosts内に記述してある場合は、Ubuntuの標準の設定にしたがって、

127.0.1.1 hoge

というように修正してください。

この設定がうまく機能しているかどうかの確認は、Groovyなどを使って、

groovy -e "print InetAddress.getByName('192.168.0.2').getHostName()"

などとして、FQDNまたはIPアドレスが表示されれば問題ありません。

datanode, tasktrackerの設定

slave側、特にtasktrackerはslave同士が直接通信する必要があるので、互いに接続可能な名前またはIPアドレスを使う必要があります。しかしデフォルトではローカルのホスト名を使って互いに通信しようとするので、IPアドレス指定ではMapReduceのReduceステージでエラーになってしまいます。

具体的には、

groovy -e "print InetAddress.getLocalHost().getHostName()"

で得られるホスト名になります。

このためhdfs-site.xmlおよびmapred-site.xml内に、

 <property>
   <name>slave.host.name</name>
   <value>192.168.0.3</value>
 </property>

などという設定を追加してやります。ここで指定するIPは、tasktracker毎に違うそれぞれのサーバのIPになります。このプロパティはドキュメントには記載されていませんが、JIRAやソース内を見ると使い方がわかります。

この設定でHadoopを起動して、jobtrackerの管理画面からそれぞれのtasktrackerがIPアドレス表示されていればうまく起動できています。

commentプラグインは存在しません。