CDH5を使用した擬似分散モードでのHadoopクラスタ構築方法です。ローカルマシンでメモリが少ないと複数のVMを立ち上げて完全分散モードで構築するのは難しいですが、擬似分散モードならVMも一つで済み、少ないメモリで構築することが可能です。
仮想マシン(VM)の用意
VirtualBoxやVagrantを使用してCentOS6をインストールした仮想マシンを用意します。
MacでVirtualBoxにCentOS7をインストールしてSSH接続をするまでの方法 - TASK NOTES
MacでVagrantを使用してVirtualBoxに仮想マシンを作成する - TASK NOTES
JDKのインストール
OracleのJDKをインストールします。 Java Development Kit Installation によるとJDK1.8も対象です。JDKのインストールについての詳細は CentOSにJava(JDK)をRPMでインストール を参照。
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm" -O jdk-8u45-linux-x64.rpm # yum -y localinstall jdk-8u45-linux-x64.rpm # java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) # echo "export JAVA_HOME=/usr/java/default" > /etc/profile.d/jdk.sh # source /etc/profile.d/jdk.sh
CDH 5 Requirements and Supported Versions
CDH5のインストール
CDH5 の RPM をダウンロードしてインストールします。
# wget http://archive.cloudera.com/cdh5/one-click-install/redhat/6/x86_64/cloudera-cdh-5-0.x86_64.rpm # yum -y --nogpgcheck localinstall cloudera-cdh-5-0.x86_64.rpm # yum clean all
CDH5 は直接リポジトリを追加してもいいです。
# wget http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/cloudera-cdh5.repo -P /etc/yum.repos.d/
パッケージの公開鍵を先にインポートしておく場合は実行してください。
# rpm --import http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
擬似分散環境の設定
擬似分散環境用の設定ファイルhadoop-conf-pseudo
をインストールします。依存関係のあるモジュールも自動でインストールされるため、HDFSやYARNも含まれています。
# yum -y install hadoop-conf-pseudo
今回はローカルの仮想マシンで構築しているのでファイアーウォールを無効化しておきます。これでローカルマシンからアクセスできるようになります。
# service iptables stop # chkconfig iptables off
Hadoopはホスト名を参照するので次のように設定しておきます。
# vi /etc/hosts 127.0.0.1 localhost 192.168.33.100 vm-cluster
localhostをホスト名に変更します。
# vi /etc/hadoop/conf/core-site.xml <property> <name>fs.defaultFS</name> <value>hdfs://vm-cluster:8020</value> </property>
こちらも同じくlocalhostをホスト名に変更して下さい。これでWeb管理画面にアクセスできるようになります。
# vi /etc/hadoop/conf/mapred-site.xml <property> <name>mapred.job.tracker</name> <value>vm-cluster:8021</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>vm-cluster:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>vm-cluster:19888</value> </property>
HDFSの起動
Namenodeのフォーマットをします。JDKをインストールしてJAVA_HOMEをセットしていない、またはホスト名を書いてないとエラーになります。
# sudo -u hdfs hdfs namenode -format
HDFS(Namenode / Secondarynamenode / Datanode)を起動します。擬似分散環境の場合、ひとつのサーバーで構築するので Secondarynamenode は必要ありませんが起動しても特に問題ありません。
# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done starting datanode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-datanode-vm-cluster.out Started Hadoop datanode (hadoop-hdfs-datanode): [ OK ] starting namenode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-namenode-vm-cluster.out Started Hadoop namenode: [ OK ] starting secondarynamenode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-secondarynamenode-vm-cluster.out Started Hadoop secondarynamenode: [ OK ]
起動できたらブラウザでhttp://192.168.33.10:50070/
にアクセスしてみましょう。HDFSのWeb管理画面が表示されれば成功です。
YARNの起動
HDFS上に各種ディレクトリを作成します。スクリプトが用意されてるので実行しましょう。これをしてないと YARN の起動で失敗します。
# sudo /usr/lib/hadoop/libexec/init-hdfs.sh
終わったら次のコマンドでHDFS上のディレクトリを確認してください。
# sudo -u hdfs hadoop fs -ls -R /
YARNを起動します。
# sudo service hadoop-yarn-resourcemanager start starting resourcemanager, logging to /var/log/hadoop-yarn/yarn-yarn-resourcemanager-vm-cluster.out Started Hadoop resourcemanager: [ OK ] # sudo service hadoop-yarn-nodemanager start starting nodemanager, logging to /var/log/hadoop-yarn/yarn-yarn-nodemanager-vm-cluster.out Started Hadoop nodemanager: [ OK ] # sudo service hadoop-mapreduce-historyserver start starting historyserver, logging to /var/log/hadoop-mapreduce/mapred-mapred-historyserver-vm-cluster.out ... Started Hadoop historyserver: [ OK ]
起動できたら以下のWeb管理画面にアクセスしてみます。
- ResourceManager - http://192.168.33.100:8088/
- NodeManager - http://192.168.33.100:8042/
- JobHistory - http://192.168.33.100:19888/
WordCountの実行
HDFSとYARNのインストールが終わったので、MapReduceのサンプルプログラムを実行します。
ディレクトリを作成してテストデータを用意してください。
# sudo su - hdfs # echo "hoge fuga bar foo hoge fuga" > wordcount.txt # hadoop fs -mkdir -p /user/hdfs/input # hadoop fs -put wordcount.txt /user/hdfs/input # hadoop fs -cat /user/hdfs/input/wordcount.txt hoge fuga bar foo hoge fuga
WordCoundのサンプルプログラムは既に用意されてるので次のコマンドで実行します。
# hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /user/hdfs/input/wordcount.txt /user/hdfs/output
以下のようにログが流れたら成功です。
15/06/04 01:38:25 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 15/06/04 01:38:27 INFO input.FileInputFormat: Total input paths to process : 1 15/06/04 01:38:27 INFO mapreduce.JobSubmitter: number of splits:1 15/06/04 01:38:27 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1433381720702_0001 15/06/04 01:38:28 INFO impl.YarnClientImpl: Submitted application application_1433381720702_0001 15/06/04 01:38:28 INFO mapreduce.Job: The url to track the job: http://vm-cluster:8088/proxy/application_1433381720702_0001/ 15/06/04 01:38:28 INFO mapreduce.Job: Running job: job_1433381720702_0001 15/06/04 01:38:38 INFO mapreduce.Job: Job job_1433381720702_0001 running in uber mode : false 15/06/04 01:38:38 INFO mapreduce.Job: map 0% reduce 0% 15/06/04 01:38:45 INFO mapreduce.Job: map 100% reduce 0% 15/06/04 01:38:59 INFO mapreduce.Job: map 100% reduce 100% 15/06/04 01:39:00 INFO mapreduce.Job: Job job_1433381720702_0001 completed successfully ...
出力されたファイルを確認してみましょう。単語毎にカウントされました。
$ hadoop fs -ls -R /user/hdfs/output -rw-r--r-- 1 hdfs supergroup 0 2015-06-04 01:38 /user/hdfs/output/_SUCCESS -rw-r--r-- 1 hdfs supergroup 26 2015-06-04 01:38 /user/hdfs/output/part-r-00000 $ hadoop fs -cat /user/hdfs/output/part-r-00000 bar 1 foo 1 fuga 2 hoge 2
Vagrantで自動構築
以上の内容でVagrantのスクリプトを書きました。VagrantとVirtualBoxがすでにインストールされてるなら次のコマンドだけで擬似分散モードの仮想マシンが作成できます。詳細は README を参考にしてみて下さい。 tasukujp/hadoop-pseudo-distributed · GitHub
$ git clone git@github.com:tasukujp/hadoop-pseudo-distributed.git $ cd hadoop-pseudo-distributed $ vagrant up
参考リンク
Installing CDH 5 with YARN on a Single Linux Node in Pseudo-distributed mode