HadoopのCDH4で完全分散環境構築した

基本的には、Clouderaの
http://www.cloudera.com/content/support/en/documentation/cdh4-documentation/cdh4-documentation-v4-latest.html
ここにある、ドキュメントにそってやっただけ。
意外とすんなりできました。

英語のドキュメントしかねぇから、英語の勉強もかねて
和訳したのをどっかで公開するのもありかと思ったけど
著作権的にアウトだった。。。

閑話休題

HDFSMapReduce、HBaseが動くまでの手順をまとめてみる。
この記事に全部詰め込む予定だから、だいぶ長くなるかも。

マシン構成は、マスタ1台、スレーブ2台。
NameNodeHA試すために、この後、マスタを1台追加する予定だけど
それはまた別のお話。

まずはネットワーク周りの設定。
ホスト名の設定

# hostname master10

/etc/hostsにクラスタを構成するマシンのホスト名とIPを記述

192.168.1.10 master10 master10
192.168.1.11 slave11 slave11
192.168.1.12 slave12 slave12

的な感じ。

# uname -a

コマンドで、設定したホスト名が含まれてたらOK?

ファイヤウォール停止
本当は、ポート番号指定して、許可する設定をするべきなんだろうけど
ひとまずは・・・。

# /etc/init.d/iptables stop

次に、NameNode、DataNode、JobTracker、TaskTrackerとかのインストール。
あぁ、いまさらだけど、OSはCentOS6.4です。

・各ノード共通

# cd /etc/yum.repos.d/
# wget http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/cloudera-cdh4.repo

・NameNodeにて

# yum install hadoop-hdfs-namenode
# yum install hadoop-0.20-mapreduce-jobtracker
# yum install hbase-master
# yum install zookeeper-server

・DataNodeにて

# yum install hadoop-hdfs-datanode
# yum install hadoop-0.20-mapreduce-tasktracker
# yum install hbase-regionserver

次、設定ファイル周り。

# cd /etc/hadoop
# cp -r conf.empty conf.my_cluster
# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
# alternatives --set hadoo-conf /etc/hadoop/conf.my_cluster

# alternatives --display hadoop-conf

で、確認。

で、今コピーして、向き先を設定したmy_clusterの中の
core-site.xmlに、以下の記述を追加

    
        fs.defaultFS
        hdfs://master10:8020/
    
    
        hadoop.tmp.dir
        /tmmp/hadop-${user.name}
    

次、NameNodeのhdfs-site.xmlに以下の記述を追加。

    
        dfs.permissions.superusergroup
        hadoop
    
    
        dfs.name.dir
        /data/1/dfs/nn
    

DataNodeのhdfs-site.xmlには以下の記述を追加。

    
        dfs.permissions.superusergroup
        hadoop
    
    
        dfs.name.dir
        /data/1/dfs/dn,/data/2/dfs/dn,/data/3/dfs/dn
    

hdfs-site.xml中で指定したディレクトリを作成、所有者、パーミッションを修正。
NameNodeにて

# mkdir -p /data/1/dfs/nn
# chown -R hdfs:hdfs /data/1/dfs/nn
# chmod 700 /data/1/dfs/nn

DataNodeにて

# mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn
# chown -R hdfs:hdfs /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn
# chmod 700 /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn

HDFSは、とりあえずこれで、準備が整ったので
NameNodeとDataNodeを起動する。

まずは、NameNodeの初期化

# su - hdfs
$ hadoop namenode -format

NameNode起動

# /etc/init.d/hadoop-hdfs-namenode start

DataNode起動y

# /etc/init.d/hadoo-hdfs-datanode start

/var/log/hadoo-hdfs/配下のログにエラーとか出てなければ

# jps

で、NameNodeとDataNodeがいるはず。
jpsコマンドがない人は
# yum install openjdk-1.7.0-devel(だいたいこんな感じ・・・)
で、インストール。

動作確認は、まず

# su - hdfs
$ hadoop fs -mkdir /test

ディレクトリを作成できるか。
次に、適当なファイルを用意して

$ hadoop fs -put test.txt /test
$ hadoop fs -ls -R /

で、ファイルをHDFSにおけるか確認。おければOK。


次、MapReduce
conf配下にmapreduce-site.xmlを作成して、以下の記述をする。

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" ?>

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>master10:8021</value>
    </property>
    <property>
        <name>mapred.local.dir</name>
        <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value>
    </property>
</configuration>

ただし、mapred.local.dirはDataNodeのmapred-site.xmlにのみ記述。
(NameNodeのmapred-site.xmlはmapred.job.trackerだけ)

DataNodeにて、mapred.local.dirで指定したディレクトリを作成、オーナーを変更。

# mkdir -p /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local
# chown -R mapred:hadoop /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local

HDFS上にtmpディレクトリを作成。

# su - hdfs
$ hadoop fs -mkdir /tmp
$ hadoop fs -chmod -R 1777 /tmp

/varディレクトリ作成

$ hadoop fs -mkdir /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
$ hadoop fs -chmod -R 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
$ hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred

mapred.system.dirディレクトリ作成

$ hadoop fs -mkdir /tmp/mapred/system
$ hadoop fs -chown mapred:hadoop /tmp/mapred/system

これで、MapReduceの準備が整ったので、JobTrackerとTaskTrackerを起動
NameNodeにて

# /etc/init.d/hadoop-0.20-mapreduce-jobtracker start

DataNodeにて

# /etc/init.d/hadoop-0.20-mapreduce-tasktracker start

まずは、/var/log/hadoop-0.20-mapreduce配下のログファイルにエラーが
出てないことを確認。

その後、以下のコマンドで、エラーが出なければOK

# cd /etc/hadoop-0.20-mapreduce
# hadoop jar hadoop-example.jar pi 4 1000


次、zookeeper

設定ファイル、/etc/zookeeper/confo/zoo.cfg
に以下の記述を。

dataDir=/tmp/zookeeper
server.1=master10:2888:3888

dataDirは修正する必要ないかも。初期設定の/var/lib/zookeeperはもうあるよって
怒られたんだけど、後でする、初期化時に、--forceオプションをつければ問題ない?
正直、よくわからない。

以下のコマンドで、初期化と起動

# /etc/init.d/zookeeper-server init --myid=1
# /etc/init.d/zookeeper-server start

最後、HBase
各ノードのhbase-site.xmlに以下の記述を追加。

    
        hbase.cluster.distributed
        true
    
    
        hbase.rootdir
        hdfs://master10:8020/hbase
    
    
        hbase.zookeeper.quorum
        master10
    

hbase-site.xmlで指定したディレクトリをHDFS上に作成

# su - hdfs
$ hadoop fs -mkdir /hbase
$ hadoop fs -chown hbase /hbase

これでHBaseの準備が整ったので起動するだけ。
NameNodeにて

# /etc/init.d/hbase-master start

DataNodeにて

# /etc/init.d/hbase-regionserver start

# hbase shell

で、テーブル作成したりなんなりができればOK


ふぅ・・・長かった。