Fedora17でCDH4をインストールし、擬似分散モードを起動させた際のメモ
Fedora17でCDH4をインストールした。
また擬似分散モードでの起動を確認した。
インストール
JDK6をインストールする
CDH4がOracleのJDK6に依存しているので、
http://www.oracle.com/technetwork/java/javase/downloads/jdk6u37-downloads-1859587.htmlよりインストーラをダウンロードしてインストールする。
$ cd ダウンロード $ chmod +x jdk-6u37-linux-x64-rpm.bin $ sudo ./jdk-6u37-linux-x64-rpm.bin $ sudo alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_37/bin/java 20000
~/.bashrcに以下を追加する
$ export JAVA_HOME=/usr/java/jdk1.6.0_37 $ export PATH=$JAVA_HOME/bin:$PATH
以下で有効にする。
$ source ~/.bashrc
javaのバージョンを確認する。
$ java -version java version "1.6.0_37" Java(TM) SE Runtime Environment (build 1.6.0_37-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01, mixed mode) $javac -version javac 1.6.0_37
CDH4.1.2をインストールする
CDHをyumを使ってインストールする。
CDH用にリポジトリを追加する。
https://ccp.cloudera.com/display/CDH4DOC/CDH4+Installation#CDH4Installation-AddingaYumRepositoryのRedHat/CentOS6 64-bit向けrepoファイルをコピーする。
cloudera-cdh4.repo
[cloudera-cdh4] name=Cloudera's Distribution for Hadoop, Version 4 baseurl=http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/4/ gpgkey = http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera gpgcheck = 1
上記のテキストファイルcloudera-cdh4.repoを/etc/yum.repos.d以下にコピーする。
リポジトリキーを追加する。
$ sudo rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
$ sudo yum clean all $ sudo yum install hadoop
完全分散モード用の設定ファイルをコピーして、オリジナルをいじらないようにしておく。
以下のコマンドを実行すると、完全分散モード用の設定ファイルがconf.myclusterにコピーされ、
/etc/hadoop/confからconf.myclusterのファイルを修正出来るよになる。
$ cd /etc/hadoop $ sudo cp -rf conf.empty conf.mycluster
Hadoopを動かしてみる
スタンドアローンモードで動かす
スタンドアローンモードは特に設定ファイルは不要。
必要なパッケージをインストールして、hadoopのgrepを使ってみる。
$ sudo yum install hadoop-mapreduce hadoop-0.20-mapreduce
作業用ディレクトリ~/hadoop/test0/を作成して、そこに適当なテキストファイルを放り込み、hadoopのgrepを実行する。
$ mkdir -p ~/hadoop/test0/ $ cd ~/hadoop/test0/ $ mkdir input $ cp ~/sample.txt input $ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-*-examples.jar grep ./input/ output 'hoge'
このコマンドを実行すると、outputディレクトリが作成されて、'hoge'の単語数が./output/part-00000に出力される。
擬似分散モードで動かす
擬似分散モード用のパッケージをインストールして、
擬似分散モードでhadoopのgrepを使ってみる。
$ sudo yum install hadoop-conf-pseudo
このコマンドを実行すると、alternativesで/etc/hadoop/confに/etc/hadoop/conf.pseudoがインストールされる。
$ alternatives --display hadoop-conf hadoop-conf -ステータスは自動です。 リンクは現在 /etc/hadoop/conf.mycluster を指しています。 /etc/hadoop/conf.empty - 優先項目 10 /etc/hadoop/conf.mycluster - 優先項目 60 /etc/hadoop/conf.pseudo - 優先項目 30 現在の「最適」バージョンは /etc/hadoop/conf.mycluster です。
設定ファイルを擬似分散モードに切り替える。
$ sudo alternatives --config hadoop-conf 3 プログラムがあり 'hadoop-conf' を提供します。 選択 コマンド ----------------------------------------------- 1 /etc/hadoop/conf.empty *+ 2 /etc/hadoop/conf.mycluster 3 /etc/hadoop/conf.pseudo Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:3
*** HDFSのフォーマットと起動
formatしてRe-format filesystem in Storage Directory?でYを選択するclusterIDが更新される。
$ sudo -u hdfs hdfs namenode -format $ sudo service hadoop-hdfs-namenode start $ sudo service hadoop-hdfs-datanode start $ sudo service hadoop-hdfs-secondarynamenode start
$ sudo -u hdfs hadoop fs -mkdir /tmp $ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp $ sudo -u hdfs hadoop fs -ls / Found 1 items drwxrwxrwt - hdfs supergroup 0 2012-11-30 21:35 /tmp $ sudo -u hdfs hadoop fs -mkdir /var/log/hadoop-yarn $ sudo -u hdfs hadoop fs -chown yarn:mapred /var/log/hadoop-yarn $ sudo -u hdfs hadoop fs -mkdir /tmp/hadoop-yarn/staging $ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp/hadoop-yarn/staging $ sudo -u hdfs hadoop fs -mkdir /tmp/hadoop-yarn/staging/history/done_intermediate $ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp/hadoop-yarn/staging/history/done_intermediate $ sudo -u hdfs hadoop fs -chown -R mapred:mapred /tmp/hadoop-yarn/staging $ sudo -u hdfs hadoop fs -mkdir /user/$USER $ sudo -u hdfs hadoop fs -chown $USER /user/$USER
リソースマネージャの起動をする。
$ sudo service hadoop-yarn-resourcemanager start $ sudo service hadoop-yarn-nodemanager start $ sudo service hadoop-mapreduce-historyserver start
ここまで実行すると、psコマンドで以下のプロセスが立ち上がっている事を確認する事が出来る。
$ ps -ef | grep java hdfs 2113 1 0 18:06 ? 00:00:10 /usr/java/jdk1.6.0_37/bin/java -Dproc_namenode -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-hdfs -Dhadoop.log.file=hadoop-hdfs-namenode-localhost.localdomain.log -Dhadoop.home.dir=/usr/lib/hadoop -Dhadoop.id.str=hdfs -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/usr/lib/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.namenode.NameNode hdfs 2248 1 0 18:07 ? 00:00:09 /usr/java/jdk1.6.0_37/bin/java -Dproc_datanode -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-hdfs -Dhadoop.log.file=hadoop-hdfs-datanode-localhost.localdomain.log -Dhadoop.home.dir=/usr/lib/hadoop -Dhadoop.id.str=hdfs -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/usr/lib/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -server -Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.datanode.DataNode hdfs 2446 1 0 18:09 ? 00:00:05 /usr/java/jdk1.6.0_37/bin/java -Dproc_secondarynamenode -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-hdfs -Dhadoop.log.file=hadoop-hdfs-secondarynamenode-localhost.localdomain.log -Dhadoop.home.dir=/usr/lib/hadoop -Dhadoop.id.str=hdfs -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/usr/lib/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode yarn 2952 1 0 18:12 ? 00:00:10 /usr/java/jdk1.6.0_37/bin/java -Dproc_resourcemanager -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-yarn -Dyarn.log.dir=/var/log/hadoop-yarn -Dhadoop.log.file=yarn-yarn-resourcemanager-localhost.localdomain.log -Dyarn.log.file=yarn-yarn-resourcemanager-localhost.localdomain.log -Dyarn.home.dir=/usr/lib/hadoop-yarn -Dhadoop.home.dir=/usr/lib/hadoop-yarn -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/usr/lib/hadoop/lib/native -classpath /etc/hadoop/conf:/etc/hadoop/conf:/etc/hadoop/conf:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/.//*:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/.//*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/.//*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-yarn/lib/*:/etc/hadoop/conf/rm-config/log4j.properties org.apache.hadoop.yarn.server.resourcemanager.ResourceManager yarn 3224 1 1 18:12 ? 00:00:13 /usr/java/jdk1.6.0_37/bin/java -Dproc_nodemanager -Xmx1000m -server -Dhadoop.log.dir=/var/log/hadoop-yarn -Dyarn.log.dir=/var/log/hadoop-yarn -Dhadoop.log.file=yarn-yarn-nodemanager-localhost.localdomain.log -Dyarn.log.file=yarn-yarn-nodemanager-localhost.localdomain.log -Dyarn.home.dir=/usr/lib/hadoop-yarn -Dhadoop.home.dir=/usr/lib/hadoop-yarn -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/usr/lib/hadoop/lib/native -classpath /etc/hadoop/conf:/etc/hadoop/conf:/etc/hadoop/conf:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/.//*:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/.//*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/.//*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-yarn/lib/*:/etc/hadoop/conf/nm-config/log4j.properties org.apache.hadoop.yarn.server.nodemanager.NodeManager mapred 3558 1 0 18:17 ? 00:00:06 /usr/java/jdk1.6.0_37/bin/java -Dproc_historyserver -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-mapreduce -Dhadoop.log.file=yarn-mapred-historyserver-localhost.localdomain.log -Dhadoop.home.dir=/usr/lib/hadoop -Dhadoop.id.str= -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/usr/lib/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dmapred.jobsummary.logger=INFO,JSA -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer
jpsコマンドを使うと以下のように3つだけ表示される。
$ sudo jps 3558 JobHistoryServer 4867 Jps 2952 ResourceManager 3224 NodeManager
以上で擬似分散モードでのHDFSの起動が完了する。
つまずいた箇所
DataNodeが起動しない
"sudo service hadoop-hdfs-namenode"を実行しても、DataNodeが起動しなかった。
原因は、以下のDataNodeのログの一部からもわかる通り、NameNodeとDataNodeでclusterIDが一致しなかったためだ。
DataNodeの実行ログ/var/log/hadoop-hdfs/hadoop-hdfs-datanode-localhost.localdomain.log の一部抜粋 2012-12-01 17:47:56,233 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool BP-1334899232-127.0.0.1-1354351535263 (storage id DS-776307469-127.0.0.1-50010-1354277718964) service to localhost/127.0.0.1:8020 java.io.IOException: Incompatible clusterIDs in /var/lib/hadoop-hdfs/cache/hdfs/dfs/data: namenode clusterID = CID-51ca4356-b4a2-4646-bea3-9af43adc50a1; datanode clusterID = CID-fa5c4789-7c02-4884-91fd-921d46bbfa7a at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:390) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:190) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:218) at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:849) at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:820) at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:308) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:218) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:661) at java.lang.Thread.run(Thread.java:662)
clusterIDを一致させる正当な手順が見つけられなかったため、今回は以下のファイルのclusterIDを直接エディタで編集して問題を解決した。
以下のファイルの"clusterID="以降をエディタで編集した。 /var/lib/hadoop-hdfs/cache/hdfs/dfs/data/current/VERSION /var/lib/hadoop-hdfs/cache/hdfs/dfs/namesecondary/current/VERSION NameNodeのclusterIDは以下のファイルに記述されている。 /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/VERSION
これらファイルを編集して、擬似分散モードの起動手順を繰り返したところ、全てのサービスが立ち上がり、hadoopのサンプルプログラムが実行出来た。