Docker 部署分布式 Hadoop的超详细实战指南

 更新时间:2026年02月26日 10:21:21   作者:礼拜天没时间  
这篇文章给大家介绍Docker部署分布式Hadoop的超详细实战指南,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
  • 适合人群:大数据初学者、运维工程师、想在本地快速搭建 Hadoop 集群的同学
  • 技术环境:CentOS 7 + Docker + Hadoop 2.7.2
  • 架构模式:1 Master + 2 Slave 分布式集群

一:背景

在传统方式下部署 Hadoop:

  • 需要准备多台虚拟机
  • 手动配置网络、主机名、SSH 免密
  • 重复安装 JDK、Hadoop
  • 环境不可复用

而使用 Docker 的优势:

✅ 环境隔离
✅ 一台机器模拟多节点
✅ 可快速销毁重建
✅ 镜像可复用
✅ 非常适合学习与实验

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

二:部署

1)创建基础镜像

查看系统版本

[root@hadoop108 ~]# uname -r
3.10.0-862.el7.x86_64

安装 Docker

[root@hadoop108 ~]# yum install -y docker

启动 Docker

[root@hadoop108 ~]# systemctl start docker

设置 Docker 开机自启

[root@hadoop108 ~]# systemctl enable docker

查看 Docker 状态

[root@hadoop108 ~]# systemctl status docker

配置 Docker 镜像加速器

[root@hadoop108 ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://3iy7bctt.mirror.aliyuncs.com"]
}
[root@hadoop108 ~]# systemctl daemon-reload
[root@hadoop108 ~]# systemctl restart docker
[root@hadoop108 ~]# docker info

搜索并拉取 CentOS 镜像

[root@hadoop108 ~]# docker search centos
[root@hadoop108 ~]# docker pull centos:7

查看镜像列表

[root@hadoop108 ~]# docker images

运行 CentOS 容器(带特权模式,用于启动 systemd 服务)

[root@hadoop108 ~]# docker run --privileged=true --name centos7 -h hadoop -itd centos:7 /usr/sbin/init

查看运行中的容器

[root@hadoop108 ~]# docker ps

进入容器

[root@hadoop108 ~]# docker exec -it centos7 /bin/bash

在容器内安装必要工具

[root@hadoop ~]# yum install -y vim net-tools openssh-server openssh-clients rsync

配置 SSH 服务并启动

[root@hadoop ~]# vim /etc/ssh/sshd_config
Port 22
PermitRootLogin yes
[root@hadoop ~]# systemctl start sshd.service
[root@hadoop ~]# systemctl enable sshd.service
[root@hadoop ~]# systemctl status sshd.service

创建软件目录

[root@hadoop ~]# mkdir -p /opt/module /opt/software

退出容器并提交为新的镜像

[root@hadoop ~]# exit
[root@hadoop108 ~]# docker commit 容器ID centos:hadoop
[root@hadoop108 ~]# docker images

2)创建 Hadoop

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

[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

进入容器配置 hosts 文件(在每个容器中执行)

[root@master ~]# vim /etc/hosts
172.17.0.3 master
172.17.0.4 slave01
172.17.0.5 slave02

设置 root 密码

[root@master ~]# passwd root
[root@slave01 ~]# passwd root
[root@slave02 ~]# passwd root

配置 SSH 免密登录

[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id slave01
[root@master ~]# ssh-copy-id slavse02

从宿主机拷贝 Hadoop 和 JDK 安装包到容器

[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

安装 JDK

[root@master ~]# tar -xzvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /opt/module/
[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
[root@master ~]# source /etc/profile
[root@master ~]# java -version

安装 Hadoop

[root@master ~]# tar -xzvf /opt/software/hadoop-2.7.2.tar.gz -C /opt/module/
[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
[root@master ~]# source /etc/profile
[root@master ~]# hadoop version

配置 Hadoop 配置文件

[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

[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

分发配置文件到 slave 节点

[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/

在 slave 节点配置环境变量(在 slave01 和 slave02 中执行)

[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
[root@slave01 ~]# source /etc/profile

3)启动 Hadoop

  • 格式化 HDFS 并启动 Hadoop
  • 在 master 节点执行:
[root@master ~]# hdfs namenode -format
[root@master ~]# start-dfs.sh
  • 在 slave01 节点执行:
[root@slave01 ~]# start-yarn.sh

浏览器访问

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

4)保存镜像

停止 Hadoop 集群

[root@slave01 ~]# stop-yarn.sh
[root@master ~]# stop-dfs.sh

将容器提交为镜像

[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 模拟分布式环境
用容器复刻真实大数据架构

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

到此这篇关于Docker 部署分布式 Hadoop(超详细实战版)的文章就介绍到这了,更多相关Docker 部署分布式 Hadoop内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用 docker-compose 运行 MySQL的方法

    使用 docker-compose 运行 MySQL的方法

    这篇文章主要介绍了使用 docker-compose 运行 MySQL的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Docker构建pinpoint部署的方法

    Docker构建pinpoint部署的方法

    这篇文章主要介绍了Docker构建pinpoint部署的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 解决Docker安装错误failure:repodata/repomd.xml from docker-ce-stable

    解决Docker安装错误failure:repodata/repomd.xml from docke

    在使用yum命令安装docker或其他工具时可能会遇到failure_repodata_repomd.xmlfromdocker-ce-stable_[Errno256]Nomoremirrorstotry的错误,原因可能是yum源配置问题,解决方法包括重置yum源,删除多余的repo文件
    2024-11-11
  • Docker容器中的Postgresql备份脚本异常解决

    Docker容器中的Postgresql备份脚本异常解决

    本文基于K8S中Docker容器对postgres数据库进行备份的操作,但是提示报错,报错信息为kubectl command not found,本文就来介绍一下报错信息的分析及其解决办法,感兴趣的可以了解一下
    2023-08-08
  • 从拉取到迁移详解Docker镜像管理的完全指南

    从拉取到迁移详解Docker镜像管理的完全指南

    Docker 镜像是容器化技术的核心组成部分,高效地管理镜像是每个开发者和运维人员的必备技能,本文将深入探讨 Docker 镜像的全生命周期管理以及解决常见拉取问题的实用技巧
    2025-09-09
  • 如何修改docker的port端口映射

    如何修改docker的port端口映射

    通过docker ps -a查看容器ID,停止容器后,编辑/var/lib/docker/containers目录下对应的json文件以修改端口映射,重启docker服务后启动容器
    2024-11-11
  • docker search mysql报错问题分析及解决

    docker search mysql报错问题分析及解决

    Docker是现在非常流行的一种容器化技术,能够方便开发者将应用程序打包进入容器,做到跨平台的部署,这篇文章主要介绍了docker search mysql报错问题分析及解决的相关资料,需要的朋友可以参考下
    2025-11-11
  • Docker命令行与守护进程的交互方法

    Docker命令行与守护进程的交互方法

    这篇文章主要介绍了Docker命令行与守护进程的交互方法的相关资料,需要的朋友可以参考下
    2017-06-06
  • Docker+keepalived+nginx实现主从热备的方法示例

    Docker+keepalived+nginx实现主从热备的方法示例

    这篇文章主要介绍了Docker+keepalived+nginx实现主从热备的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Docker数据卷持久化存储的实现

    Docker数据卷持久化存储的实现

    Docker的数据卷机制通过抽象的存储层设计,完美解决了容器生命周期与数据生命周期解耦的问题,下面就来介绍一下Docker数据卷持久化存储的实现,感兴趣的可以了解一下
    2025-09-09

最新评论