HadoopのCDH4で完全分散環境構築した
基本的には、Clouderaの
http://www.cloudera.com/content/support/en/documentation/cdh4-documentation/cdh4-documentation-v4-latest.html
ここにある、ドキュメントにそってやっただけ。
意外とすんなりできました。
英語のドキュメントしかねぇから、英語の勉強もかねて
和訳したのをどっかで公開するのもありかと思ったけど
著作権的にアウトだった。。。
HDFS、MapReduce、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の初期化
NameNode起動
DataNode起動y
# /etc/init.d/hadoo-hdfs-datanode start
/var/log/hadoo-hdfs/配下のログにエラーとか出てなければ
# jps
で、NameNodeとDataNodeがいるはず。
jpsコマンドがない人は
# yum install openjdk-1.7.0-devel(だいたいこんな感じ・・・)
で、インストール。
動作確認は、まず
でディレクトリを作成できるか。
次に、適当なファイルを用意して
で、ファイルを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
# 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にて
DataNodeにて
まずは、/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
ふぅ・・・長かった。