使用Docker的Hadoop

问题

Docker 上で Hadoop を構築する。

技巧

SequenceIQ の提供する Apache Hadoop Docker image を活用する。

只需要一個選項:前提。

対象バージョンApache Hadoop Docker image2.7.1
環境バージョンBoot2docker1.10.3Docker Toolbox1.10.3VartualBox5.0Cygwin2.4.1Windows8.1

Content (in Chinese): 内容

1. 建立主节点(资源管理器+名称节点)

    マスタノード用の 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 設定を編集する。
--- 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>
--- 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>
--- 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>
--- 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>
--- 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

构建客户端

    クライアント用の 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

添加从节点(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

请参考

    • Apache Hadoop YARN

 

    • HDFS Architecture

 

    • Hadoop Cluster Setup

 

    • Apache Hadoop 2.7.1 Docker image

 

    Apache Yarn 2.7.1 cluster Docker image
广告
将在 10 秒后关闭
bannerAds