Docker 部署分布式 Hadoop(超详细实战版)
- 适合人群:大数据初学者、运维工程师、想在本地快速搭建 Hadoop 集群的同学
- 技术环境:CentOS 7 + Docker + Hadoop 2.7.2
- 架构模式:1 Master + 2 Slave 分布式集群
一:背景
在传统方式下部署 Hadoop:
-
需要准备多台虚拟机
-
手动配置网络、主机名、SSH 免密
-
重复安装 JDK、Hadoop
-
环境不可复用
而使用 Docker 的优势:
✅ 环境隔离
✅ 一台机器模拟多节点
✅ 可快速销毁重建
✅ 镜像可复用
✅ 非常适合学习与实验
在真实生产中,例如在基于 Apache Hadoop 的数据平台环境中,也常结合容器化与编排技术使用。
二:部署
1)创建基础镜像
-
查看系统版本
bash[root@hadoop108 ~]# uname -r 3.10.0-862.el7.x86_64 -
安装 Docker
bash[root@hadoop108 ~]# yum install -y docker -
启动 Docker
bash[root@hadoop108 ~]# systemctl start docker -
设置 Docker 开机自启
bash[root@hadoop108 ~]# systemctl enable docker -
查看 Docker 状态
bash[root@hadoop108 ~]# systemctl status docker -
配置 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 -
搜索并拉取 CentOS 镜像
bash[root@hadoop108 ~]# docker search centos [root@hadoop108 ~]# docker pull centos:7 -
查看镜像列表
bash[root@hadoop108 ~]# docker images -
运行 CentOS 容器(带特权模式,用于启动 systemd 服务)
bash[root@hadoop108 ~]# docker run --privileged=true --name centos7 -h hadoop -itd centos:7 /usr/sbin/init -
查看运行中的容器
bash[root@hadoop108 ~]# docker ps -
进入容器
bash[root@hadoop108 ~]# docker exec -it centos7 /bin/bash -
在容器内安装必要工具
bash[root@hadoop ~]# yum install -y vim net-tools openssh-server openssh-clients rsync -
配置 SSH 服务并启动
bash[root@hadoop ~]# vim /etc/ssh/sshd_config Port 22 PermitRootLogin yesbash[root@hadoop ~]# systemctl start sshd.service [root@hadoop ~]# systemctl enable sshd.service [root@hadoop ~]# systemctl status sshd.service -
创建软件目录
bash[root@hadoop ~]# mkdir -p /opt/module /opt/software -
退出容器并提交为新的镜像
bash[root@hadoop ~]# exit [root@hadoop108 ~]# docker commit 容器ID centos:hadoop [root@hadoop108 ~]# docker images
2)创建 Hadoop
-
基于新镜像启动 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 -
进入容器配置 hosts 文件(在每个容器中执行)
bash[root@master ~]# vim /etc/hosts 172.17.0.3 master 172.17.0.4 slave01 172.17.0.5 slave02 -
设置 root 密码
bash[root@master ~]# passwd root [root@slave01 ~]# passwd root [root@slave02 ~]# passwd root -
配置 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 -
从宿主机拷贝 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 -
安装 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/binbash[root@master ~]# source /etc/profile [root@master ~]# java -version -
安装 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/sbinbash[root@master ~]# source /etc/profile [root@master ~]# hadoop version -
配置 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.shexport 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.shexport 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.xmlbash[root@master hadoop]# mv mapred-site.xml.template mapred-site.xml<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> -
配置
mapred-env.shexport JAVA_HOME=/opt/module/jdk1.8.0_144
-
-
分发配置文件到 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/ -
在 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/sbinbash[root@slave01 ~]# source /etc/profile
3)启动 Hadoop
-
格式化 HDFS 并启动 Hadoop
-
在 master 节点执行:
bash[root@master ~]# hdfs namenode -format [root@master ~]# start-dfs.sh -
在 slave01 节点执行:
bash[root@slave01 ~]# start-yarn.sh
-
-
浏览器访问
- HDFS:
http://宿主机IP:50070 - YARN:
http://宿主机IP:8088
- HDFS:
4)保存镜像
-
停止 Hadoop 集群
bash[root@slave01 ~]# stop-yarn.sh [root@master ~]# stop-dfs.sh -
将容器提交为镜像
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 模拟分布式环境
用容器复刻真实大数据架构
对于正在做大数据方向学习或毕业设计的同学,这种方式可以极大降低实验成本。