Hadoopのインストール

Hadoopのインストールに手間取ったので、備忘録。

前提条件

以下の環境で動作させています。

また、Hadoopのマスターノードのホスト名を「hmaster」、スレーブを「hslave1, hslave2, ...」とします。

ゲストOSのインストール(CentOS

KVM上で動作するCentOSのイメージを一つ作成します。各ノードはこのイメージのコピーを使用します。
再起動後の最初の設定では、FirewallSELinuxを無効にしておきます。
その他のCentOSのインストール自体の説明はここでは省略しますので、あしからず。
ログイン後、ホスト側から扱い易いように、コンソールの設定をしておきます。/etc/inittabに、"co:2345:respawn:/sbin/agetty ttyS0 115200 vt100-nav"を追加しておけば良いです。これでホスト側から「virsh console <ホスト名>」でアクセスできます。
また、OSをアップデートしておきましょう。

共通項目のインストール・設定

SunのJavaをインストール

ここからJDK(現在はJDK 6 Update 18)をダウンロードし、インストールします。(インストールの詳細は略)

Hadoopのインストール

yumリポジトリを登録して、「hadoop-0.20」をインストールします。(rootで作業します。)

# cd /etc/yum.repos.d/
# wget http://archive.cloudera.com/redhat/cdh/cloudera-testing.repo
# yum -y install hadoop-0.20

この後、仮想マシンを終了させます。

マスターノードの設定

マスターノード用の仮想マシンの準備

まずホスト上で、作成した仮想マシンイメージをコピーしてマスターノード用の仮想マシンイメージを作成します。次のコマンドを使います。

virt-clone -o 元のゲスト名 -n 新しいゲスト名 -f ディスクイメージ名

例えば、

$ sudo virt-clone -o centos54 -n hmaster -f /var/lib/libvirt/images/hmaster.img

とします。

その後、マスターノードの仮想マシンを起動し、コンソールで接続します。

$ virsh start hmaster
$ sudo virsh console hmaster

一般ユーザでログインした後、suコマンドでrootにスイッチします。

ネットワークの設定

まず、ネットワーク関連を設定します。
仮想マシンをコピーした際に作成される ifcfg-eth0.bak は削除し、ifcfg-eth0 に、ダイナミックDNSにホスト名を登録するための設定をします。

# rm /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# echo 'DHCP_HOSTNAME=hmaster' >> /etc/sysconfig/network-scripts/ifcfg-eth0

また、/etc/sysconfig/network に書かれたホスト名を編集します。

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=hmaster
#

あと、/etc/hosts 内の127.0.0.1は、「localhost.localdomain localhost」だけになるようにします。
(インストール時にホスト名を設定したりすると、ここに追記されたりするので)

ここで一旦ネットワークを再起動しましょう。

# /etc/init.d/network restart
Hadoopの設定

ここでは、/etc/hadoop/conf/ 以下のファイルを編集します。

  • core-site.xml

  
    fs.default.name
    hdfs://hmaster:8020
  


  
    dfs.replication
    3  ← スレーブノードの数(ここでは3つ)
  

  • mapred-site.xml

  
    mapred.job.tracker
    hmaster:8021
  

  • masters
hmaster
  • slaves
hslave1
hslave2
hslave3

次にHDFSのフォーマットを行います。

# sudo -u hadoop hadoop-0.20 namenode -format

最後に、起動時にHadoopのデーモンを開始出来るように設定します。

# chkconfig --add hadoop-0.20-namenode
# chkconfig --add hadoop-0.20-jobtracker
NFSの設定

/etc/hadoop/ 以下をスレーブと共有できるよう、NFSの設定を行います。
まず、/etc/exports を編集します。

/etc/hadoop     hslave*(rw,no_all_squash,sync)

その後、NFSデーモンを起動し、起動時に開始できるようにします。

# /etc/init.d/nfs start
# chkconfig nfs on

ここまで完了したら再起動し、スレーブの設定に進みましょう。

スレーブノードの設定

ここではhslave1のスレーブノードについて説明します。他のhslave2, hslave3は、ホスト名を変更して作業してください。
マスターノードと同様、仮想マシンイメージをコピーします。

$ sudo virt-clone -o centos54 -n hslave1 -f /var/lib/libvirt/images/hslave1.img

その後、スレーブノードの仮想マシンを起動し、コンソールで接続します。

$ virsh start hslave1
$ sudo virsh console hslave1

一般ユーザでログインした後、suコマンドでrootにスイッチし、マスターノードと同じようにネットワーク関連を設定します。

# rm /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# echo 'DHCP_HOSTNAME=hslave1' >> /etc/sysconfig/network-scripts/ifcfg-eth0

/etc/sysconfig/network に書かれたホスト名を修正します。

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=hslave1
#

そして一旦ネットワークを再起動します。

# /etc/init.d/network restart
NFSの設定

起動時にマスターノードの/etc/hadoopをスレーブの/etc/hadoopにマウントするようにします。

# rm -rf /etc/hadoop/*
# echo 'hmaster:/etc/hadoop /etc/hadoop nfs defaults 0 0' >> /etc/fstab
Hadoopのデーモンの設定

起動時にHadoopのデーモンを開始出来るように設定します。

# chkconfig --add hadoop-0.20-datanode
# chkconfig --add hadoop-0.20-tasktracker

そしてリブートし、他のマスターノードについても同じ設定を行います。

確認

Web経由でマスターノードにアクセスし、確認します。

スレーブノードの追加

  1. まず /etc/hadoop/conf/hdfs-site.xml で設定した数を必要な分だけ増やす。
  2. /etc/hadoop/conf/slaves にスレーブノードを追加する。
  3. スレーブノードを上記のとおりに作成し、リブートする。