hadoop
docker
Hdfs
boot2docker
YARN
More than 1 year has passed since last update.

課題

手法

前提

対象 バージョン
Apache Hadoop Docker image 2.7.1
環境 バージョン
Boot2docker 1.10.3
Docker Toolbox 1.10.3
VartualBox 5.0
Cygwin 2.4.1
Windows 8.1

内容

1. マスタノード(ResourceManager+NameNode)を構築

  • マスタノード用の Apache Hadoop Docker image を起動する。
$ docker run -itd -p 8088:8088 -p 9000:9000 -p 19888:19888 -p 50070:50070 -h hadoop-00 --name hadoop-00 sequenceiq/hadoop-docker /bin/bash
$ docker exec hadoop-00 service sshd start
  • マスタノードの Hadoop 設定を編集する。
/usr/local/hadoop/etc/hadoop/core-site.xml
--- a/core-site.xml
+++ b/core-site.xml
@@ -1,6 +1,6 @@
   <configuration>
       <property>
           <name>fs.defaultFS</name>
-          <value>hdfs://localhost:9000</value>
+          <value>hdfs://hadoop-00:9000</value>
       </property>
   </configuration>
/usr/local/hadoop/etc/hadoop/yarn-site.xml
--- a/yarn-site.xml
+++ b/yarn-site.xml
@@ -29,4 +29,16 @@
     <value>600</value>
   </property>

+  <property>
+    <name>yarn.resourcemanager.address</name>
+    <value>hadoop-00:8032</value>
+  </property>
+  <property>
+    <name>yarn.resourcemanager.resource-tracker.address</name>
+    <value>hadoop-00:8031</value>
+  </property>
+  <property>
+    <name>yarn.resourcemanager.scheduler.address</name>
+    <value>hadoop-00:8030</value>
+  </property>
 </configuration>
/usr/local/hadoop/etc/hadoop/hdfs-site.xml
--- a/hdfs-site.xml
+++ b/hdfs-site.xml
@@ -3,4 +3,8 @@
         <name>dfs.replication</name>
         <value>1</value>
     </property>
+    <property>
+      <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
+      <value>false</value>
+    </property>
 </configuration>
/usr/local/hadoop/etc/hadoop/mapred-site.xml
--- a/mapred-site.xml
+++ b/mapred-site.xml
@@ -3,4 +3,8 @@
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
     </property>
+    <property>
+        <name>mapreduce.jobhistory.address</name>
+        <value>hadoop-00:10020</value>
+    </property>
 </configuration>
/usr/local/hadoop/etc/hadoop/slaves
--- a/slaves
+++ b/slaves
@@ -1 +0,0 @@
-localhost
  • マスタノードの HDFS データを削除する。
$ docker exec hadoop-00 rm -rf /tmp/hadoop-root/dfs/data/current
  • マスターノードのデーモンを起動する。
$ docker exec hadoop-00 /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager
$ docker exec hadoop-00 /usr/local/hadoop/sbin/hadoop-daemon.sh start namenode
$ docker exec hadoop-00 sh -c "USER=root /usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver"

2. スレーブノード(NodeManager+DataNode)を構築

  • スレーブノード用の Apache Hadoop Docker image を起動する。
$ docker run -itd -p 50010:50010 -h hadoop-01 --name hadoop-01 sequenceiq/hadoop-docker /bin/bash
$ docker exec hadoop-01 service sshd start
  • マスタノードの /etc/hosts にスレーブノードを追加する。
$ docker exec hadoop-00 sh -c "echo $(docker inspect --format {{.NetworkSettings.IPAddress}} hadoop-01) hadoop-01 >> /etc/hosts"
  • マスタノードの /usr/local/hadoop/etc/hadoop/slaves にスレーブノードを追加する。
$ docker exec hadoop-00 sh -c "echo hadoop-01 >> /usr/local/hadoop/etc/hadoop/slaves"
  • スレーブノードの /etc/hosts をマスタノードと同期する。
$ docker exec hadoop-00 scp /etc/hosts hadoop-01:/etc/hosts
  • スレーブノードの Hadoop 設定をマスタノードと同期する。
$ docker exec hadoop-00 rsync -av /usr/local/hadoop/etc/hadoop/ hadoop-01:/usr/local/hadoop/etc/hadoop/
  • スレーブノードのデーモンを起動する。
$ docker exec hadoop-01 /usr/local/hadoop/sbin/yarn-daemon.sh start nodemanager
$ docker exec hadoop-01 /usr/local/hadoop/sbin/hadoop-daemon.sh start datanode

3. クライアントを構築

  • クライアント用の Apache Hadoop Docker image を起動する。
$ docker run -itd -h hadoop-cli --name hadoop-cli sequenceiq/hadoop-docker /bin/bash
  • クライアントの /etc/hosts にマスタノードを追加する。
$ docker exec hadoop-cli sh -c "echo $(docker inspect --format {{.NetworkSettings.IPAddress}} hadoop-00) hadoop-00 >> /etc/hosts"
  • クライアントのHadoopの設定をマスタノードと同期する。
$ docker exec hadoop-cli rsync -av hadoop-00:/usr/local/hadoop/etc/hadoop/ /usr/local/hadoop/etc/hadoop/

4. 動作確認

  • Hadoop のサンプルを実行する。
$ docker exec hadoop-cli /usr/local/hadoop/bin/hdfs dfs -rm -r output
$ docker exec hadoop-cli /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep input output 'dfs[a-z.]+'
  • 実行結果
$ docker exec hadoop-cli /usr/local/hadoop/bin/hdfs dfs -cat output/*
6       dfs.audit.logger
4       dfs.class
3       dfs.server.namenode.
2       dfs.period
2       dfs.audit.log.maxfilesize
2       dfs.audit.log.maxbackupindex
1       dfsmetrics.log
1       dfsadmin
1       dfs.servers
1       dfs.replication
1       dfs.file

A. スレーブノード(NodeManager+DataNode)を追加

  • スレーブノード用の Apache Hadoop Docker image を起動する。
$ docker run -itd -h hadoop-02 --name hadoop-02 sequenceiq/hadoop-docker /bin/bash
$ docker exec hadoop-02 service sshd start
  • マスタノードの /etc/hosts にスレーブノードを追加する。
$ docker exec hadoop-00 sh -c "echo $(docker inspect --format {{.NetworkSettings.IPAddress}} hadoop-02) hadoop-02 >> /etc/hosts"
  • マスタノードの /usr/local/hadoop/etc/hadoop/slaves にスレーブノードを追加する。
$ docker exec hadoop-00 sh -c "echo hadoop-02 >> /usr/local/hadoop/etc/hadoop/slaves"
  • スレーブノードの /etc/hosts をマスタノードと同期する。
$ docker exec hadoop-00 scp /etc/hosts hadoop-01:/etc/hosts
$ docker exec hadoop-00 scp /etc/hosts hadoop-02:/etc/hosts
  • スレーブノードの Hadoop 設定をマスタノードと同期する。
$ docker exec hadoop-00 rsync -av /usr/local/hadoop/etc/hadoop/ hadoop-01:/usr/local/hadoop/etc/hadoop/
$ docker exec hadoop-00 rsync -av /usr/local/hadoop/etc/hadoop/ hadoop-02:/usr/local/hadoop/etc/hadoop/
  • スレーブノードの HDFS データを削除する。
$ docker exec hadoop-02 rm -rf /tmp/hadoop-root/dfs/data/current
  • スレーブノードのデーモンを起動する。
$ docker exec hadoop-02 /usr/local/hadoop/sbin/yarn-daemon.sh start nodemanager
$ docker exec hadoop-02 /usr/local/hadoop/sbin/hadoop-daemon.sh start datanode

参考