Docker 部署分布式 Hadoop(超详细实战版)

Docker 部署分布式 Hadoop(超详细实战版)

  • 适合人群:大数据初学者、运维工程师、想在本地快速搭建 Hadoop 集群的同学
  • 技术环境:CentOS 7 + Docker + Hadoop 2.7.2
  • 架构模式:1 Master + 2 Slave 分布式集群

一:背景

在传统方式下部署 Hadoop:

  • 需要准备多台虚拟机

  • 手动配置网络、主机名、SSH 免密

  • 重复安装 JDK、Hadoop

  • 环境不可复用

而使用 Docker 的优势:

✅ 环境隔离

✅ 一台机器模拟多节点

✅ 可快速销毁重建

✅ 镜像可复用

✅ 非常适合学习与实验

在真实生产中,例如在基于 Apache Hadoop 的数据平台环境中,也常结合容器化与编排技术使用。


二:部署

1)创建基础镜像

  1. 查看系统版本

    bash 复制代码
    [root@hadoop108 ~]# uname -r
    3.10.0-862.el7.x86_64
  2. 安装 Docker

    bash 复制代码
    [root@hadoop108 ~]# yum install -y docker
  3. 启动 Docker

    bash 复制代码
    [root@hadoop108 ~]# systemctl start docker
  4. 设置 Docker 开机自启

    bash 复制代码
    [root@hadoop108 ~]# systemctl enable docker
  5. 查看 Docker 状态

    bash 复制代码
    [root@hadoop108 ~]# systemctl status docker
  6. 配置 Docker 镜像加速器

    bash 复制代码
    [root@hadoop108 ~]# vim /etc/docker/daemon.json
    复制代码
    {
      "registry-mirrors": ["https://3iy7bctt.mirror.aliyuncs.com"]
    }
    bash 复制代码
    [root@hadoop108 ~]# systemctl daemon-reload
    [root@hadoop108 ~]# systemctl restart docker
    [root@hadoop108 ~]# docker info
  7. 搜索并拉取 CentOS 镜像

    bash 复制代码
    [root@hadoop108 ~]# docker search centos
    [root@hadoop108 ~]# docker pull centos:7
  8. 查看镜像列表

    bash 复制代码
    [root@hadoop108 ~]# docker images
  9. 运行 CentOS 容器(带特权模式,用于启动 systemd 服务)

    bash 复制代码
    [root@hadoop108 ~]# docker run --privileged=true --name centos7 -h hadoop -itd centos:7 /usr/sbin/init
  10. 查看运行中的容器

    bash 复制代码
    [root@hadoop108 ~]# docker ps
  11. 进入容器

    bash 复制代码
    [root@hadoop108 ~]# docker exec -it centos7 /bin/bash
  12. 在容器内安装必要工具

    bash 复制代码
    [root@hadoop ~]# yum install -y vim net-tools openssh-server openssh-clients rsync
  13. 配置 SSH 服务并启动

    bash 复制代码
    [root@hadoop ~]# vim /etc/ssh/sshd_config
    Port 22
    PermitRootLogin yes
    bash 复制代码
    [root@hadoop ~]# systemctl start sshd.service
    [root@hadoop ~]# systemctl enable sshd.service
    [root@hadoop ~]# systemctl status sshd.service
  14. 创建软件目录

    bash 复制代码
    [root@hadoop ~]# mkdir -p /opt/module /opt/software
  15. 退出容器并提交为新的镜像

    bash 复制代码
    [root@hadoop ~]# exit
    [root@hadoop108 ~]# docker commit 容器ID centos:hadoop
    [root@hadoop108 ~]# docker images

2)创建 Hadoop

  1. 基于新镜像启动 Master 和 Slave 容器

    bash 复制代码
    [root@hadoop108 ~]# docker run --privileged=true --name master -h master -p 50070:50070 -itd centos:hadoop /usr/sbin/init
    
    [root@hadoop108 ~]# docker run --privileged=true --name slave01 -h slave01 -p 8088:8088 -itd centos:hadoop /usr/sbin/init
    
    [root@hadoop108 ~]# docker run --privileged=true --name slave02 -h slave02 -itd centos:hadoop /usr/sbin/init
  2. 进入容器配置 hosts 文件(在每个容器中执行)

    bash 复制代码
    [root@master ~]# vim /etc/hosts
    172.17.0.3 master
    172.17.0.4 slave01
    172.17.0.5 slave02
  3. 设置 root 密码

    bash 复制代码
    [root@master ~]# passwd root
    [root@slave01 ~]# passwd root
    [root@slave02 ~]# passwd root
  4. 配置 SSH 免密登录

    bash 复制代码
    [root@master ~]# ssh-keygen -t rsa
    [root@master ~]# ssh-copy-id master
    [root@master ~]# ssh-copy-id slave01
    [root@master ~]# ssh-copy-id slavse02
  5. 从宿主机拷贝 Hadoop 和 JDK 安装包到容器

    bash 复制代码
    [root@hadoop108 ~]# docker cp jdk-8u144-linux-x64.tar.gz master:/opt/software
    
    [root@hadoop108 ~]# docker cp hadoop-2.7.2.tar.gz master:/opt/software
  6. 安装 JDK

    bash 复制代码
    [root@master ~]# tar -xzvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /opt/module/
    bash 复制代码
    [root@master ~]# vim /etc/profile
    # JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    bash 复制代码
    [root@master ~]# source /etc/profile
    [root@master ~]# java -version
  7. 安装 Hadoop

    bash 复制代码
    [root@master ~]# tar -xzvf /opt/software/hadoop-2.7.2.tar.gz -C /opt/module/
    bash 复制代码
    [root@master ~]# vim /etc/profile
    # HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    bash 复制代码
    [root@master ~]# source /etc/profile
    [root@master ~]# hadoop version
  8. 配置 Hadoop 配置文件

    bash 复制代码
    [root@master ~]# cd /opt/module/hadoop-2.7.2/etc/hadoop
    • 配置 core-site.xml

      复制代码
      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://master:9000</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/opt/module/hadoop-2.7.2/data/tmp</value>
        </property>
      </configuration>
    • 配置 hadoop-env.sh

      复制代码
      export JAVA_HOME=/opt/module/jdk1.8.0_144
    • 配置 hdfs-site.xml

      复制代码
      <property>
        <name>dfs.replication</name>
        <value>3</value>
      </property>
      <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave02:50090</value>
      </property>
      <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
      </property>
    • 配置 slaves 文件

      复制代码
      master
      slave01
      slave02
    • 配置 yarn-env.sh

      复制代码
      export JAVA_HOME=/opt/module/jdk1.8.0_144
    • 配置 yarn-site.xml

      复制代码
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>
      <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>slave01</value>
      </property>
    • 配置 mapred-site.xml

      bash 复制代码
      [root@master hadoop]# mv mapred-site.xml.template mapred-site.xml
      复制代码
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
    • 配置 mapred-env.sh

      复制代码
      export JAVA_HOME=/opt/module/jdk1.8.0_144
  9. 分发配置文件到 slave 节点

    bash 复制代码
    [root@master ~]# scp -r /opt/module/jdk1.8.0_144/ root@slave01:/opt/module/
    [root@master ~]# scp -r /opt/module/jdk1.8.0_144/ root@slave02:/opt/module/
    [root@master ~]# scp -r /opt/module/hadoop-2.7.2/ root@slave01:/opt/module/
    [root@master ~]# scp -r /opt/module/hadoop-2.7.2/ root@slave02:/opt/modusle/
  10. 在 slave 节点配置环境变量(在 slave01 和 slave02 中执行)

    bash 复制代码
    [root@slave01 ~]# vim /etc/profile
    # JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    
    # HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    bash 复制代码
    [root@slave01 ~]# source /etc/profile

3)启动 Hadoop

  1. 格式化 HDFS 并启动 Hadoop

    • 在 master 节点执行:

      bash 复制代码
      [root@master ~]# hdfs namenode -format
      [root@master ~]# start-dfs.sh
    • 在 slave01 节点执行:

      bash 复制代码
      [root@slave01 ~]# start-yarn.sh
  2. 浏览器访问

    • HDFS:http://宿主机IP:50070
    • YARN:http://宿主机IP:8088

4)保存镜像

  1. 停止 Hadoop 集群

    bash 复制代码
    [root@slave01 ~]# stop-yarn.sh
    [root@master ~]# stop-dfs.sh
  2. 将容器提交为镜像

    bash 复制代码
    [root@hadoop108 ~]# docker commit master centos:master
    [root@hadoop108 ~]# docker commit slave01 centos:slave01
    [root@hadoop108 ~]# docker commit slave02 centos:slave02

总结

本文完整演示了:

  • 制作 Hadoop 基础镜像

  • 构建三节点集群

  • 配置 SSH 免密

  • 配置 HDFS + YARN

  • 启动并验证 Web UI

  • 保存为可复用镜像

核心思想:

用 Docker 模拟分布式环境

用容器复刻真实大数据架构

对于正在做大数据方向学习或毕业设计的同学,这种方式可以极大降低实验成本。

相关推荐
ACP广源盛1392462567312 分钟前
IX9104 PCIe5.0 交换芯片@ACP#国产高端 AI PC 全搭配方案
大数据·人工智能·分布式·单片机·嵌入式硬件
qetfw12 分钟前
CentOS 7 基础环境配置
linux·运维·centos
天空'之城16 分钟前
Linux 系统编程 21:守护进程与日志系统全解
linux·系统编程·日志系统·守护进程
l1t1 小时前
用split命令恢复被wget -c命令误追加的zip压缩包
linux
有毒的教程2 小时前
Kubernetes进阶实战教程(生产落地完整版)
云原生·容器·kubernetes
辉灰笔记2 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos
鱼听禅3 小时前
Ubuntu学习笔记-安装docker容器
学习·ubuntu·docker
冷咖啡离3 小时前
分布式 Agent 如何把断点恢复、审计策略和执行调度收进同一条链路
分布式
不会C语言的男孩4 小时前
Docker 在嵌入式设备中的常用玩法
运维·docker·容器
ylscode4 小时前
CVE-2026-31694 漏洞深度分析:Linux 内核 FUSE 组件存在本地提权风险,普通用户可直取 root 权限
linux·运维·服务器