# Hadoop 3.3.6 完全分布式集群部署知识库

Hadoop 3.3.6 完全分布式集群部署知识库

适用环境:Rocky Linux 9.5 / 三节点 / 2C·2G 虚拟机 / VMware VMnet2 host-only

部署日期:2026-10-10 | 部署方式:从干净快照克隆 + 脚本化部署(非手抄教材)


1. 集群规划

主机名 IP 角色 进程
hadoop1 10.10.10.93 Master NameNode、SecondaryNameNode、ResourceManager、JobHistoryServer
hadoop2 10.10.10.94 Slave DataNode、NodeManager
hadoop3 10.10.10.95 Slave DataNode、NodeManager
  • 网段:VMware VMnet2 (host-only 10.10.10.0/24,网关 .1)。该网段无外网。
  • 规格:每台 2 vCPU / 2048 MB / 20GB 磁盘(vmxnet3 网卡 → guest 内为 ens160)。
  • 副本数:dfs.replication = 2(坏一台不丢数据)。

2. 软件与版本

组件 版本 备注
OS Rocky Linux 9.5(Blue Onyx) 内核 5.14.0-503.14.1.el9_5
JDK java-1.8.0-openjdk + -devel 1.8.0.432.b06-3.el9 devel 包才有 jps;从本地 DVD ISO 离线安装
Hadoop 3.3.6 宿主下载后扇出(节点无外网)
运行用户 hduser(组 hadoop,uid/gid 1001) 禁止 root 跑 Hadoop
虚拟机 VMware Workstation 17.x(vmxnet3 / 独立 UUID+MAC) 3D 加速已关(mks.enable3d=FALSE)

4. 交付物清单

类别 文件 说明
脚本 scripts/node-base-init.sh 节点基础环境(hostname/IP/hosts/停服务/JDK/用户),幂等
脚本 scripts/hadoop-setup.sh 解压 + 写 4 个 XML + 分发从节点,幂等
脚本 scripts/hadoop-cluster.sh format/start/stop/restart/status/report/wordcount
工具 tools/hctl.py 宿主 → 三节点 SSH 控制(exec/put/get/discover)
工具 tools/hadoop-dashboard.py 验收台(静态 HTML / --serve 实时版 / 关键状态日志)
工具 tools/lab-start.py 一键启停入口(开机/--stop/--autostart/--status)
工具 D:\hadoop 实验\tools\vm-detach.ps1 脱离进程树开机(本机必需,见 §7 坑 3)
验收 Hadoop验收台.html · logs/验收关键状态.log 静态快照 + 关键状态日志(只此一份,覆盖式)

5. 从零部署(四步)

5.1 建虚拟机(从干净快照克隆)

bash 复制代码
# ① 模板盘链:基础盘 = 干净快照;-000001/-000002 = 后续增量
#    D:\rokey9.3\Rocky Linux 64 位.vmdk        <- 独立根盘(parentCID=ffffffff) = "ok" 快照
#    D:\rokey9.3\Rocky Linux 64 位-000002.vmdk <- 当前态 = iRedMail("mail"),不要用
# ② 合并成独立盘(13s/盘,约 5.8GB)
"vmware-vdiskmanager.exe" -r "D:\rokey9.3\Rocky Linux 64 位.vmdk" -t 0 "D:\hadoop 实验\hadoop1\hadoop1.vmdk"
# ③ 每台 .vmx 必改:displayName / nvme0:0.fileName / uuid.bios+location / MAC(static)
#    / ethernet0.connectionType=custom + vnet=VMnet2 / mks.enable3d=FALSE / bios.bootOrder=hdd

开机命令(★ 本机必须走计划任务,不能直接 vmrun start):

powershell 复制代码
# tools/vm-detach.ps1:注册无触发器计划任务 → 启动 → 注销
powershell -NoProfile -ExecutionPolicy Bypass -File "D:\hadoop 实验\tools\vm-detach.ps1" `
  -Vmx "D:\hadoop 实验\hadoop1\hadoop1.vmx" -Op start

5.2 基础环境(三台,root)

bash 复制代码
bash node-base-init.sh hadoop1 10.10.10.93   # 另两台同理,ID 换成 hadoop2/.94、hadoop3/.95

脚本做 9 件事:主机名 → /etc/hosts → 关 firewalld/禁 SELinux → 停无关服务 → 去 crashkernel

→ 建 hduser(abc123)+sudo → JDK 校验/离线装 devel → 静态 IP → 完成标记。

5.3 安装与配置(hadoop1)

bash 复制代码
bash hadoop-setup.sh /root/hadoop-3.3.6.tar.gz

解压到 /home/hduser/hadoop → 建 tmp/dfs{name,data} → 写 hadoop-env.sh+4 个 XML+workers

→ 写 /etc/profile.d/hadoop.sh → scp 整个 hadoop 目录到 hadoop2/3 并改属主

→ 三台 md5 一致性核对。

5.4 启动与验收(hadoop1,hduser)

bash 复制代码
su - hduser
bash /home/hduser/hadoop-cluster.sh format    # 幂等:已格式化则跳过
bash /home/hduser/hadoop-cluster.sh start     # start-dfs.sh + start-yarn.sh + historyserver
bash /home/hduser/hadoop-cluster.sh status    # jps 三台
bash /home/hduser/hadoop-cluster.sh wordcount # 端到端

6. 核心配置文件($HADOOP_HOME/etc/hadoop/)

6.1 hadoop-env.sh / yarn-env.sh

bash 复制代码
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.432.b06-3.el9.x86_64

★ 是 JDK 根 ,不是 /jre(写 /jre 则 jps 不可用)。

6.2 workers(3.x 取代 2.x 的 slaves)

复制代码
hadoop2
hadoop3

6.3 core-site.xml

xml 复制代码
<property><name>fs.defaultFS</name><value>hdfs://hadoop1:9000</value></property>
<property><name>hadoop.tmp.dir</name><value>/home/hduser/hadoop/tmp</value></property>
<property><name>hadoop.http.staticuser.user</name><value>hduser</value></property>
<property><name>io.file.buffer.size</name><value>131072</value></property>

6.4 hdfs-site.xml

xml 复制代码
<property><name>dfs.namenode.name.dir</name><value>/home/hduser/hadoop/dfs/name</value></property>
<property><name>dfs.datanode.data.dir</name><value>/home/hduser/hadoop/dfs/data</value></property>
<property><name>dfs.replication</name><value>2</value></property>
<property><name>dfs.namenode.secondary.http-address</name><value>hadoop1:9868</value></property>
<property><name>dfs.webhdfs.enabled</name><value>true</value></property>
<property><name>dfs.datanode.max.transfer.threads</name><value>4096</value></property>

6.5 mapred-site.xml(★ 2GB 小机器必配 512MB,否则 AM 默认 1536MB 超 YARN 上限被拒)

xml 复制代码
<property><name>mapreduce.framework.name</name><value>yarn</value></property>
<property><name>mapreduce.jobhistory.address</name><value>hadoop1:10020</value></property>
<property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop1:19888</value></property>
<property><name>yarn.app.mapreduce.am.resource.mb</name><value>512</value></property>
<property><name>mapreduce.map.memory.mb</name><value>512</value></property>
<property><name>mapreduce.reduce.memory.mb</name><value>512</value></property>
<property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=/home/hduser/hadoop</value></property>
<property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=/home/hduser/hadoop</value></property>
<property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=/home/hduser/hadoop</value></property>

6.6 yarn-site.xml

xml 复制代码
<property><name>yarn.resourcemanager.hostname</name><value>hadoop1</value></property>
<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
<property><name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property>
<property><name>yarn.resourcemanager.webapp.address</name><value>hadoop1:8088</value></property>
<property><name>yarn.nodemanager.resource.memory-mb</name><value>1024</value></property>
<property><name>yarn.nodemanager.resource.cpu-vcores</name><value>1</value></property>
<property><name>yarn.scheduler.minimum-allocation-mb</name><value>256</value></property>
<property><name>yarn.scheduler.maximum-allocation-mb</name><value>1024</value></property>
<property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value></property>
<property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property>
<property><name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value></property>

6.7 版本差异速记(教材 2.x → 实际 3.3.6)

项目 Hadoop 2.x(教材) Hadoop 3.3.6
从节点列表 slaves workers
NameNode Web UI :50070 :9870
SecondaryNameNode :50090 :9868
DataNode IPC :50010 :9866
删除目录 hdfs dfs -rmr hdfs dfs -rm -r

7. 踩坑记录(本次实测,全部有据)

# 现象 根因 解决
1 🔴 克隆出的机器整整一套 iRedMail(postfix/dovecot/nginx/mariadb/clamd 全在,内存被吃掉 1.6GB) 模板 D:\rokey9.3 有两个快照 :ok(uid1, 基础盘) 与 mail(uid4, 增量盘),snapshot.current=4 ⇒ 当前态就是装了邮件的状态。只看目录名看不出 改从基础盘 Rocky Linux 64 位.vmdk(独立根盘)克隆 → 干净基线内存仅 467MB
2 vmrun 启动的 VM 2 秒后掉电 ,vmware.log 无任何报错 GUI 虽在运行,但 vmrun 起的 vmware-vmx.exe 仍挂在 agent 进程树下;工具调用一结束,整棵树被回收 用无触发器计划任务 拉起(Register-ScheduledTask + Start-ScheduledTask,-RunLevel Limited,无需管理员)→ 实测存活
3 PowerShell 工具跑 .ps1 直接失败、无回显 本机 ExecutionPolicy=Restricted;且工具 stdout 不回显 ① 用 -ExecutionPolicy Bypass -File ;② 结果落盘再回读
4 scp/hctl put 远端路径变成 D:/.../root/xxx MSYS 把参数与 heredoc 里的 \ / 互转 所有调用加 MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL="*"
5 jps 找不到,但 java 在 JAVA_HOME 指到了 .../jre,jps 只在 JDK 根 的 bin/ 动态推导后再剥掉尾部 /jre ;缺 jps 就装 -devel
6 节点 yum install 装不了 JDK VMnet2 host-only 无外网 挂载随 VM 一起挂上的 Rocky-9.5-x86_64-dvd.iso(/dev/sr0),建 file:///mnt/dvd/{BaseOS,AppStream} 本地仓库,--disablerepo='*' --enablerepo='dvd-*' 离线装
7 root 执行 hdfs dfsadmin -report 看不到 Live datanodes 段(只有 20 行) NN 是 hduser 起的,HDFS 超级用户 = hduser,root 不是 ⇒ 报文里 DN 明细被隐藏 采集时加 HADOOP_USER_NAME=hduser 前缀(或 su - hduser -c)
8 采集分节被「吞掉」:###DN 的值为 ###DEAD "空节 + 正则 lookahead"把下一节标记吃进内容 解析改按 ^###NAME$ 切分 (re.split),不依赖 lookahead
9 USTC 下载 696MB 中途掉到 ~0.1MB/s 镜像带宽波动(实测 5 个镜像都只有 0.36--0.5 MB/s) 耐心等;别并发重试多镜像 (只会互相挤)。关键动作是「宿主只下一份,再扇出」把 WAN 流量压到 1 份

8. 日常运维速查

bash 复制代码
su - hduser
bash /home/hduser/hadoop-cluster.sh start|stop|restart|status|report|wordcount

hdfs dfsadmin -report                 # 节点容量/存活(root 执行需 HADOOP_USER_NAME=hduser)
hdfs dfs -ls /                        # 列 HDFS 根
hdfs dfs -put <本地> <HDFS路径>        # 上传
hdfs dfs -get <HDFS路径> <本地>        # 下载
hdfs dfs -cat <HDFS文件>               # 查看
hdfs dfs -rm -r <HDFS路径>             # 删除(3.x 用 -rm -r)
hdfs fsck / -files -blocks            # 块分布

Web UI(宿主机浏览器直接开)

界面 地址
HDFS NameNode http://10.10.10.93:9870
YARN ResourceManager http://10.10.10.93:8088
MapReduce JobHistory http://10.10.10.93:19888

宿主侧一键入口

bash 复制代码
PY="C:/Users/盟友/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
"$PY" tools/lab-start.py                    # 开机启用(开 VM → 等 SSH → 起集群 → 出验收台 + 日志)
"$PY" tools/lab-start.py --serve            # 同上并常驻实时验收台 http://127.0.0.1:8788
"$PY" tools/lab-start.py --status           # 只看状态
"$PY" tools/lab-start.py --stop             # 收摊(停集群 + 关 VM)
"$PY" tools/lab-start.py --autostart on     # 开机自启(在 hadoop1 写 systemd 单元)

9. 验收结果(16/16 全部通过)

编号 检查项 实测
V1 三台虚拟机已开机 hadoop1, hadoop2, hadoop3
V2 三台 SSH 可达 3/3
V3 静态 IP 正确 .93 / .94 / .95
V4 主机名正确 hadoop1/2/3
V5 JDK(jps) 就绪 1.8.0.432.b06-3.el9 ×3
V6 防火墙关 / SELinux 非 enforcing inactive ×3 / Permissive
V7--V9 hadoop1 四进程 NameNode / SecondaryNameNode / ResourceManager / JobHistoryServer
V10--V11 hadoop2/3 DataNode + NodeManager ×2
V12 HDFS Live DataNode 2(dead=0)
V13 副本数 2
V14 WordCount 结果正确 CHINA=1 HADOOP=1 Hello=2 World=1 hadoop=1 hi=2
V15 三节点内存余量 hadoop1 424MB / hadoop2 927MB / hadoop3 878MB(可用)
X1 额外 未改动既有实验机 本次仅运行 hadoop 三台

WordCount 原始输出

复制代码
CHINA   1
HADOOP  1
Hello   2
World   1
hadoop  1
hi      2

作业计数器:Map input records=2、Reduce output records=6、Job ... completed successfully。

相关推荐
此时不提桶,更待何时1 小时前
06-24-B-RabbitMQ面试与生产事故实战
分布式·面试·rabbitmq
泡干脆面就番茄1 小时前
Hive入门:架构解析与安装部署实录
大数据·数据仓库·hive·hadoop·架构
yyk333241 小时前
Hive架构
hive·hadoop·架构
来福猿2 小时前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式
计算机编程指导师2 小时前
计算机毕设选题:基于Spark+Django的水质多指标关联分析与可视化系统源码 毕业设计 选题推荐 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·水质
计算机编程指导师2 小时前
【大数据毕设】Hadoop+Spark台北市住宅价格数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·住宅价格
计算机编程指导师13 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
计算机编程指导师16 小时前
【计算机毕设选题推荐】基于Hadoop的宫颈癌变进程光谱数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·宫颈癌变
Pniubi16 小时前
分布式锁分类讲解
分布式