人気ブログランキングへ

2013年01月03日

完全分散モードの Hadoop 導入手順 (CDH3)

Cloudera's Distrubution for Hadoop (CDH) を利用して、完全分散モードの Hadoop を導入したメモ。
今回は以下の構成とした。
マスターノード (CentOS 5.7)
ホスト名: master
Hadoop の NameNode/JobTracker
スレーブノード (Fedora 14)
ホスト名: slave
Hadoop の DataNode/TaskTracker
SecondaryNameNode は無し。
また、NameNode と JobTracker は分けたほうがよいようだが、今回はとりあえずこれで。
【参考】
  • http://codezine.jp/article/detail/2485
  • http://oss.nttdata.co.jp/hadoop/cdh.html
  • https://ccp.cloudera.com/display/FREE4DOC
  • http://wiki.apache.org/hadoop/
インストール前に、「Supported Operating Systems for CDH3」で CDH3 がサポートする OS かどうか確認しておく。
バージョンにも気をつける必要がある。
衣か、Hadoop のインストールまでは、マスターノード、スレーブノードほぼ共通。

1. Java Development Kit インストール

Java Development Kit (1.6 以上) をインストールする。
今回は、OpenJDK をインストールした。
【RedHat系】
# yum install java-1.6.0-openjdk java-1.6.0-openjdk-devel
【Debian系】
# apt-get install openjdk-6-jdk

2. CDH3 インストール

CDH3 を「CDH3 Installation」の手順に従ってインストールする。
【RedHat系】
# yum --nogpgcheck install http://archive.cloudera.com/redhat/cdh/cdh3-repository-1.0-1.noarch.rpm
# rpm --import http://archive.cloudera.com/redhat/cdh/RPM-GPG-KEY-cloudera
マスターノードの場合:
[root@master]# yum install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-namenode hadoop-0.20-jobtracker

スレーブノードの場合:
[root@slave]# yum install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-datanode hadoop-0.20-tasktracker

【Debian系】
# wget http://archive.cloudera.com/one-click-install/squeeze/cdh3-repository_1.0_all.deb
# dpkg -i cdh3-repository_1.0_all.deb
# apt-get update

マスターノードの場合:
[root@master]# apt-get install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-namenode hadoop-0.20-jobtracker

スレーブノードの場合:
[root@master]# apt-get install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-datanode hadoop-0.20-tasktracker

3. SSH 設定

マスターノードとスレードノードとは SSH でやり取りするので、パスワード無しで SSH ログインできるようにしておく (秘密鍵をパスワード無しにするか、ssh-agent などを使う)。
hdfs アカウントのホームディレクトリは /usr/lib/hadoop-0.20 に設定されているので、/usr/lib/hadoop-0.20 の下に .ssh ディレクトリを作成し、そこに鍵ペアを作る。
# mkdir /usr/lib/hadoop-0.20/.ssh
# chmod 02775 /usr/lib/hadoop-0.20/.ssh
# chgrp hadoop /usr/lib/hadoop-0.20/.ssh
# ssh-keygen -t rsa -N "" -f /usr/lib/hadoop-0.20/.ssh/id_rsa
# chmod 0660 /usr/lib/hadoop-0.20/.ssh/id_rsa
# chmod 0664 /usr/lib/hadoop-0.20/.ssh/id_rsa.pub
# touch /usr/lib/hadoop-0.20/.ssh/known_hosts
# chmod 0664 /usr/lib/hadoop-0.20/.ssh/known_hosts
# chmod 0755 /usr/lib/hadoop-0.20/.ssh
公開鍵を互いの /usr/lib/hadoop-0.20/.ssh 内に authorized_keys ファイルを作成して書き込み、互いに hdfs アカウントでパスワード無しにログインできることを確認する。
[root@master]# su - hdfs
[hdfs@master]$ ssh slave
[hdfs@slave]$ ssh master
[hdfs@master]$ exit
[hdfs@slave]$ exit
[hdfs@master]$ exit

4. Hadoop 設定

インストールした時点では empy の設定ファイルが設定されているので、これを別のディレクトリ (ここでは conf.cluster とした) にコピーして設定していく。

設定ディレクトリは、alternatives コマンドを使って切り替える。
【RedHat系】
# cp -dpR /etc/hadoop/conf.empty /etc/hadoop/conf.cluster
# alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf \
/etc/hadoop-0.20/conf.cluster 50

# alternatives --display hadoop-0.20-conf
【Debian系】
# cp -dpR /etc/hadoop/conf.empty /etc/hadoop/conf.cluster
# update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf \
/etc/hadoop-0.20/conf.cluster 50

# update-alternatives --display hadoop-0.20-conf

マスターノード、スレーブノードの両方の /etc/hadoop/conf.cluster 内の設定ファイルを、たとえば以下のように書き換える:

設定ファイル: core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/tmp</value>
</property>
</configuration>

設定ファイル: hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/var/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/var/hadoop/dfs/data</value>
</property>
</configuration>

設定ファイル: mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:54311</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/var/hadoop/mapred</value>
</property>
</configuration>

設定ファイル: masters
master

設定ファイル: slaves
slave

環境変数設定ファイル: hadoop-env.sh
# 【RedHat系】
export JAVA_HOME=/usr/lib/jvm/java
# 【Debian系】
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

対応するディレクトリを作成する。
# mkdir -p /var/hadoop/tmp \
/var/hadoop/dfs/name \
/var/hadoop/dfs/data \
/var/hadoop/mapred

# chown hdfs:hadoop /var/hadoop/tmp \
/var/hadoop/dfs/name \
/var/hadoop/dfs/data

# chown mapred:hadoop /var/hadoop/mapred
# chmod 0777 /var/hadoop/tmp
# chmod 0700 /var/hadoop/dfs/name
# chmod 0755 /var/hadoop/dfs/data \
/var/hadoop/mapred

5. ポートの開放

Hadoop がデフォルトで使用するポート番号が「Hadoop Default Ports Quick Reference」にあるので、必要に応じてルーターやファイアウォール等の設定を変更する。

6. NameNode / DataNode の起動

マスターノードで、NameNode をフォーマットする。
[root@master]# su - hdfs
[hdfs@master]$ hadoop namenode -format
[hdfs@master]$ exit

ここで以下のようなエラーが出る場合は、環境変数 JAVA_HOME が正しく設定されていない可能性がある:
+======================================================================+
|      Error: JAVA_HOME is not set and Java could not be found         |
+----------------------------------------------------------------------+
| Please download the latest Sun JDK from the Sun Java web site        |
|       > http://java.sun.com/javase/downloads/ <                      |
|                                                                      |
| Hadoop requires Java 1.6 or later.                                   |
| NOTE: This script will find Sun Java whether you install using the   |
|       binary or the RPM based installer.                             |
+======================================================================+

マスターノードの NameNode、スレーブノードの DataNode を起動する。
マスターノード:
[root@master]# service hadoop-0.20-namenode start
スレーブノード:
[root@slave]# service hadoop-0.20-datanode start
NameNode、DataNode が稼働しているかどうかは、ブラウザーで以下の URL にアクセスすることで確認できる。
http://master:50070/
"Live Nodes" の数値が稼働している DataNode の数。

7. JobTracker / TaskTracker の起動

マスターノードの HDFS 上に /mapred/system ディレクトリを作成する。
[root@master]# su - hdfs
[hdfs@master]$ hadoop fs -mkdir /mapred/system
[hdfs@master]$ hadoop fs -chown -R mapred:supergroup /
[hdfs@master]$ hadoop fs -chmod -R 0700 /mapred
[hdfs@master]$ exit
マスターノードの JobTracker、スレーブノードの TaskTracker を起動する。
マスターノード:
[root@master]# service hadoop-0.20-jobtracker start
スレーブノード:
[root@slave]# service hadoop-0.20-tasktracker start
JobTracker、TaskTracker が稼働しているかどうかは、ブラウザーで以下の URL にアクセスすることで確認できる。
http://master:50030/
Cluster Summary の "Nodes" の数値が稼働している TaskTracker の数。

8. サンプルコードの実行

パッケージにはサンプルコードが添えられているので試しに実行してみる。
[root@master]# su - mapred
[mapred@master]$ cd /usr/lib/hadoop
[mapred@master]$ hadoop jar hadoop-examples.jar pi 1 10 【変更履歴】 2013-01-22 記述全体を手直し
タグ:Hadoop CDH
posted by K/I at 01:06 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/293049805
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック