使用 Docker 搭建 Hadoop 集群 和 Spark On Yarn

本文僅作搭建介紹,方便本地搭建起來進行測試而用

鏡像選擇

選擇 uhopper 定制的一系列hadoop生態(tài)鏡像來搭建docker集群,這些鏡像具體包括:

使用 docker-compose 構(gòu)建 hadoop 集群

在同一個宿主機上搭建 hadoop 集群,采用 1個 namenode 容器,3個 datanode 容器(分別為 datanode1,datanode2,datanode3),1個 resourceManager容器,1個 nodeManager 容器。spark docker 容器可選,我們可以使用宿主機啟動 spark,并通過 yarn 提交模式提交 spark job。

version: '2'
services:
  namenode:
    image: uhopper/hadoop-namenode:2.8.1
    # 配置好 docker 內(nèi)的假域名
    hostname: namenode
    container_name: namenode
    networks:
      - hadoop
    volumes:
      # 自行修改數(shù)據(jù)卷的映射位置
      - /namenode:/hadoop/dfs/name
    environment:
      - CLUSTER_NAME=datanode1
      - CLUSTER_NAME=datanode2
      - CLUSTER_NAME=datanode3
      # 配置 hdfs 用戶權(quán)限問題,不需要只允許 hadoop 用戶訪問
      - HDFS_CONF_dfs_permissions=false
    ports:
      # 接收Client連接的RPC端口,用于獲取文件系統(tǒng)metadata信息
      - 8020:8020
      # nameNode http服務(wù)的端口
      - 50070:50070
      # nameNode https 服務(wù)的端口
      - 50470:50470

  datanode1:
    image: uhopper/hadoop-datanode:2.8.1
    hostname: datanode1
    container_name: datanode1
    networks:
      - hadoop
    volumes:
      - /datanode1:/hadoop/dfs/data
    environment:
      # 等價于在 core-site.xml 中配置 fs.defaultFS
      - CORE_CONF_fs_defaultFS=hdfs://namenode:8020
      # 等價于在 hdfs-site.xml 中配置 dfs.datanode.address
      - HDFS_CONF_dfs_datanode_address=0.0.0.0:50010
      # dfs.datanode.ipc.address 不使用默認端口的意義是在同一機器起多個 datanode,暴露端口需要不同
      - HDFS_CONF_dfs_datanode_ipc_address=0.0.0.0:50020
      # dfs.datanode.http.address
      - HDFS_CONF_dfs_datanode_http_address=0.0.0.0:50075
    ports:
      - 50010:50010
      - 50020:50020
      - 50075:50075

  datanode2:
    image: uhopper/hadoop-datanode:2.8.1
    hostname: datanode2
    container_name: datanode2
    networks:
      - hadoop
    volumes:
      - /datanode2:/hadoop/dfs/data
    environment:
      - CORE_CONF_fs_defaultFS=hdfs://namenode:8020
      - HDFS_CONF_dfs_datanode_address=0.0.0.0:50012
      - HDFS_CONF_dfs_datanode_ipc_address=0.0.0.0:50022
      - HDFS_CONF_dfs_datanode_http_address=0.0.0.0:50072
    ports:
      - 50012:50012
      - 50022:50022
      - 50072:50072

  datanode3:
    image: uhopper/hadoop-datanode:2.8.1
    hostname: datanode3
    container_name: datanode3
    networks:
      - hadoop
    volumes:
      - /datanode3:/hadoop/dfs/data
    environment:
      - CORE_CONF_fs_defaultFS=hdfs://namenode:8020
      - HDFS_CONF_dfs_datanode_address=0.0.0.0:50013
      - HDFS_CONF_dfs_datanode_ipc_address=0.0.0.0:50023
      - HDFS_CONF_dfs_datanode_http_address=0.0.0.0:50073
    ports:
      - 50013:50013
      - 50023:50023
      - 50073:50073


  resourcemanager:
    image: uhopper/hadoop-resourcemanager:2.8.1
    hostname: resourcemanager
    container_name: resourcemanager
    networks:
      - hadoop
    environment:
      - CORE_CONF_fs_defaultFS=hdfs://namenode:8020
      - YARN_CONF_yarn_log___aggregation___enable=true
    ports:
      - 8030:8030
      - 8031:8031
      - 8032:8032
      - 8033:8033
      - 8088:8088

  nodemanager:
    image: uhopper/hadoop-nodemanager:2.8.1
    hostname: nodemanager
    container_name: nodemanager
    networks:
      - hadoop
    environment:
      - CORE_CONF_fs_defaultFS=hdfs://namenode:8020
      - YARN_CONF_yarn_resourcemanager_hostname=resourcemanager
      - YARN_CONF_yarn_log___aggregation___enable=true
      - YARN_CONF_yarn_nodemanager_remote___app___log___dir=/app-logs
    ports:
      - 8040:8040
      - 8041:8041
      - 8042:8042

  spark:
    image: uhopper/hadoop-spark:2.1.2_2.8.1
    hostname: spark
    container_name: spark
    networks:
      - hadoop
    environment:
      - CORE_CONF_fs_defaultFS=hdfs://namenode:8020
      - YARN_CONF_yarn_resourcemanager_hostname=resourcemanager
    command: tail -f /var/log/dmesg


networks:
  hadoop:

上述關(guān)于端口映射部分,對每個容器端口的說明可 參考

啟動容器

docker-compose up -d

宿主機 spark 連接 docker 中的 hadoop 集群

不管是使用 spark 還是其他服務(wù),只要我們要連接使用 docker 搭建的 hadoop 集群,我們需要配置一些參數(shù)。如果使用 spark,宿主機需要有 spark 和 hadoop 的完整程序包。

1.宿主機配置 docker 假域名

在 /etc/hosts 下配置上述 docker 容器中出現(xiàn)的 hostname,將這些域名都指向本機(宿主機) IP,192.168.1.100 為本機 ip,僅供參考。

192.168.1.100 namenode
192.168.1.100 resourcemanager
192.168.1.100 nodemanager
192.168.1.100 datanode1
192.168.1.100 datanode2
192.168.1.100 datanode3

2.配置 $HADOOP_HOME/etc/hadoop 目錄下 core-site.xml 和 yarn-site.xml

core-site.xml 增加指向 namenode 的配置,其中 hdfs://namenode:8020 指向 docker 容器中的 namenode host,因此這里我們需要在 /etc/hosts 中加入此域名,并配置為宿主機 ip

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://namenode:8020</value>
    </property>
</configuration>

yarn-site.xml

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>resourcemanager</value>
  </property>
</configuration>

3.配置 $SPARK_HOME/conf/spark-env.sh,暴露 hadoop_home 目錄

export HADOOP_CONF_DIR=/home/maple/app/hadoop-2.8.5/etc/hadoop
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容