読者です 読者をやめる 読者になる 読者になる

CDH5で擬似分散モードのHadoopクラスタを構築する

Hadoop CDH5
スポンサーリンク

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

 Installing CDH 5

擬似分散環境の設定

擬似分散環境用の設定ファイル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