跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Docker 部署分布式 Hadoop 实战

使用 Docker 在 CentOS 7 环境下部署分布式 Hadoop 集群的完整流程。涵盖基础镜像制作、JDK 与 Hadoop 安装配置、SSH 免密设置、HDFS 与 YARN 组件配置及集群启动验证。通过容器化技术模拟多节点环境,实现快速搭建与复用,适用于大数据学习与实验场景。

t ag发布于 2026/3/24更新于 2026/9/1095 浏览
Docker 部署分布式 Hadoop 实战

一:背景

在传统方式下部署 Hadoop:

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

而使用 Docker 的优势:

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

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


二:部署

1)创建基础镜像

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

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

创建软件目录

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

配置 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 ~]# yum install -y vim net-tools openssh-server openssh-clients rsync

进入容器

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

查看运行中的容器

[root@hadoop108 ~]# docker ps

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

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

查看镜像列表

[root@hadoop108 ~]# docker images

搜索并拉取 CentOS 镜像

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

配置 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

查看 Docker 状态

[root@hadoop108 ~]# systemctl status docker

设置 Docker 开机自启

[root@hadoop108 ~]# systemctl enable docker

启动 Docker

[root@hadoop108 ~]# systemctl start docker

安装 Docker

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

查看系统版本

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

2)创建 Hadoop

在 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

分发配置文件到 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/module/

配置 mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 mapred-site.xml

<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>

配置 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>

配置 yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 slaves 文件

master slave01 slave02

配置 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>

配置 hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 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 配置文件

[root@master ~]# cd /opt/module/hadoop-2.7.2/etc/hadoop

安装 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

安装 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 和 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

配置 SSH 免密登录

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

设置 root 密码

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

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

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

基于新镜像启动 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

3)启动 Hadoop

  1. 格式化 HDFS 并启动 Hadoop

  2. 浏览器访问

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

在 slave01 节点执行:

[root@slave01 ~]# start-yarn.sh

在 master 节点执行:

[root@master ~]# hdfs namenode -format
[root@master ~]# start-dfs.sh

4)保存镜像

将容器提交为镜像

[root@hadoop108 ~]# docker commit master centos:master
[root@hadoop108 ~]# docker commit slave01 centos:slave01
[root@hadoop108 ~]# docker commit slave02 centos:slave02

停止 Hadoop 集群

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

总结

本文完整演示了:

  • 制作 Hadoop 基础镜像
  • 构建三节点集群
  • 配置 SSH 免密
  • 配置 HDFS + YARN
  • 启动并验证 Web UI
  • 保存为可复用镜像

核心思想:

用 Docker 模拟分布式环境
用容器复刻真实大数据架构

目录

  1. 一:背景
  2. 二:部署
  3. 1)创建基础镜像
  4. 2)创建 Hadoop
  5. JAVA_HOME
  6. HADOOP_HOME
  7. HADOOP_HOME
  8. JAVA_HOME
  9. 3)启动 Hadoop
  10. 4)保存镜像
  11. 总结

更多推荐文章

查看全部
  • 评价得分计算:权重确定方法
  • BloomFilter 原理及 Zset 实现原理
  • Git 本地项目上传至 Gitee 仓库
  • SQL 表查询与更新操作详解
  • OpenClaw 部署全流程:本地安装、云端托管与进阶配置
  • Python 爬虫技术原理与实战应用指南
  • 前缀和算法进阶:中心下标与子数组求和
  • VS Code Copilot 完整使用教程
  • Llama Factory 微调算法深度解析与显存优化
  • 阿里发布全新 AI IDE Qoder:透明化开发与智能代理模式
  • DeepSeek 各版本说明与优缺点分析
  • Playwright 与 MCP AI 实现自动化浏览器操作
  • 使用 Trae 集成 Claude Code 进行 AI 编程开发
  • LeetCode 二叉树经典算法题解汇总
  • Python 调用高德地图 MCP 服务查询天气示例
  • Qt Creator 集成 GitHub Copilot 插件配置指南
  • Claude Code 本地部署与项目实战详解
  • 基于 QNN 框架在 Android 端部署 LLaMA-7B 大模型实战
  • 基于 Flask 和 Python 的智慧养老服务系统设计与实现
  • VSCode 使用 Git 快速提交代码指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online