R&Dトレンドレポート

第8回 Hadoopの環境を作ってみよう!

この記事を読むのに必要な時間:およそ 4 分

hadoopの設定

さてここからがhadoopの設定になります。

以下の作業はh@hadoop1で行います。基本的に設定ファイルは$HADOOP_HOME/confに集約されています。

Javaへのパスの設定

$HADOOOP_HOME/conf/hadoop-env.shがありますので,エディタで開き,export JAVA_HOME=/xx の行をコメントを外し,Javaディレクトリへのパスを設定します。私の環境では,/usr/lib/jvm/jreとなりました。

master, slaveの設定

master(HDFSでのNameNode,MapReduceでのJobTracker)が誰かを設定します。$HADOOP_HOME/conf/masterを編集し,以下を記述します。

hadoop1

slave(HDFSでのDataNode,MapReduceでのTaskTracker)が誰かを設定します。$HADOOP_HOME/conf/slavesを編集し,以下を記述します。

hadoop2
hadoop3

データディレクトリ,PIDファイルの設定

HDFSでのデータ保存用ディレクトリを設定します。デフォルトでは/tmpになっているため,しばらく動作させているとデータが欠落していく可能性があります(linuxでは定期的に/tmp, /var/tmpをきれいにしてくれる(tmpwatch)⁠⁠。

事前作業で作成したディレクトリを設定します。$HADOOP_HOME/conf/core-site.xmlを以下のように編集します。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/usr/local/hdfs/${user.name}</value>
        </property>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://hadoop1:9000</value>
        </property>
</configuration>

また,$HADOOP_HOME/conf/hadoop-env.shに以下を追記します。

export HADOOP_PID_DIR=/usr/local/hdfs/pids

レプリケーションの設定

HDFSで管理されるデータのレプリケーション数を定義します。設定ファイルは$HADOOP_HOME/conf/hdfs-site.xmlになります。以下のように編集します。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
</configuration>

JobTrackerの設定

MapReduceでのタスク管理サーバの情報を記述します。設定ファイルは$HADOOP_HOME/conf/mapred-site.xmlです。以下のように編集します。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
    <name>mapred.job.tracker</name>
    <value>hadoop1:9001</value>
  </property>
</configuration>

以上で,hadoopの基本的な設定は完了です。

次に,これらの設定ファイルを共有するために,NFSの設定を行います。

NFSの設定

ここでは各種設定ファイルの内容を記述しておきます。

hadoop2, 3で以下のディレクトリを作成します。

# mkdir /usr/local/apache_proj

hadoop1の/etc/exportファイルに下記を追加。

/usr/local/apache_proj  192.168.0.0/255.255.0.0(rw,no_root_squash)

hadoop2, hadoop3の/etc/fstabに下記を追加。

hadoop1:/usr/local/apache_proj	/usr/local/apache_proj		nfs	defaults 	0 0

hadoop1を起動後,hadoop2,3を起動するようにしてください。

hadoopの起動

それではいよいよhadoopの起動ですが,まずはHDFSの初期化を行います。

$ hadoop namenode -format

画面上にメッセージが流れますが,以下のメッセージが最後に確認できれば問題ないでしょう。

10/10/04 08:49:51 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop1/192.168.47.101
************************************************************/

次にhadoopの起動です。hadoop1でhユーザになって以下のコマンドを実行します。

$ start-all.sh

こちらも画面上にメッセージが流れますが,途中で以下のようなメッセージが出て止まる可能性があります。これはsshで最初に接続した際に表示されるダイアログです。yesと答えましょう。

RSA key fingerprint is 30:85:64:a1:37:d6:43:25:4c:2e:b4:82:cb:f7:04:76.
Are you sure you want to continue connecting (yes/no)?

《中略》

hadoop2: starting tasktracker, logging to /usr/local/apache_proj/hadoop/bin/../logs/hadoop-h-tasktracker-hadoop2.out
hadoop3: starting tasktracker, logging to /usr/local/apache_proj/hadoop/bin/../logs/hadoop-h-tasktracker-hadoop3.out

起動の確認

hadoopには管理用のWebページが用意されており,サーバのステータスやログを確認することができます。

図2 HDFSの管理ページ(http://hadoop1:50070/)

図2 HDFSの管理ページ(http://hadoop1:50070/)

画面上ではわかりにくいかもしれませんが,Live Nodes: 2となっており,hadoop2, hadoop3が正常に起動していることがわかります。

図3 MapReduceの管理ページ(http://hadoop1:50030/)

図3 MapReduceの管理ページ(http://hadoop1:50030/)

こちらもNodesが2となっており,正常に動作していると思われます。

次回はMapReduceを実際に動作させてみましょう。

著者プロフィール

脇本武士(わきもとたけし)

都内中小IT企業(メイサンソフト(株))に所属。某大手自動車会社でのシステム開発,運用を経て,現在は研究開発部署に席をお借りしています。DB周りの保守サポート,ウェブ技術開発を主に手がけてきました。現在は大規模計算フレームワークの活用とKVSに注目しています。普段はOS Xを使用していますが一番よく使うアプリはTerminalです(笑)。

R&Dトレンドレポート(てくらぼ)