本文在 Rocky Linux 9 上用三台 2C/2G 虚拟机,从零搭建 Hadoop 3.3.6 完全分布式集群,五个真实踩坑全记录:镜像 SSL 拦截、JAVA_HOME 报错、从节点权限不足、作业内存超限、jps 找不到——每一步都给出可直接整段复制的命令与预期结果。
目录
- 一、部署概述与环境规划
- 二、前期准备:三台机器的"出厂设置"
- 三、免密登录:让主节点"无声"指挥从节点
- 四、安装与分发:下载、解压、改属主三步走
- 五、七个配置文件:集群的"大脑设定"
- 六、启动集群与 WordCount 验收
- 七、五个真实踩坑与解决(★精华)
- 八、日常运维速查
- 九、写在最后
一、部署概述与环境规划
很多同学的第一门大数据课用的是 Hadoop 2.6.5 的教材,一上手实机就发现处处对不上:端口变了、配置文件变了、连下载链接都挂了。本文以 Hadoop 3.3.6(2026 年 USTC 镜像仍在维护的稳定版) 为目标版本,在 Rocky Linux 9 上完成三节点完全分布式部署,并用官方 WordCount 例子做全链路验收。
先交代环境信息,各位照着规划自己的机器:
| 部署主机 | hadoop1(10.10.10.93)/ hadoop2(10.10.10.94)/ hadoop3(10.10.10.95) |
| 操作系统 | Rocky Linux 9(每台 2 核 CPU / 2G 内存) |
| JDK | openjdk 1.8.0_504(含 openjdk-devel) |
| Hadoop | 3.3.6(USTC 镜像下载) |
| 运行用户 | hduser(hadoop 组,uid=1001,三台统一) |
| 部署日期 | 2026-10-09(实测验收通过) |
集群角色划分如下,NameNode 和 ResourceManager 都压在 hadoop1 上,两台从节点只跑 DataNode 和 NodeManager:
| hadoop1(Master) | NameNode、SecondaryNameNode、ResourceManager、JobHistoryServer |
| hadoop2(Slave) | DataNode、NodeManager |
| hadoop3(Slave) | DataNode、NodeManager |
部署完成后节点拓扑是这样的:
#mermaid-svg-jQYpjZjAE6zgpnxK{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jQYpjZjAE6zgpnxK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jQYpjZjAE6zgpnxK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jQYpjZjAE6zgpnxK .error-icon{fill:#552222;}#mermaid-svg-jQYpjZjAE6zgpnxK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jQYpjZjAE6zgpnxK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jQYpjZjAE6zgpnxK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jQYpjZjAE6zgpnxK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jQYpjZjAE6zgpnxK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jQYpjZjAE6zgpnxK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jQYpjZjAE6zgpnxK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jQYpjZjAE6zgpnxK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jQYpjZjAE6zgpnxK .marker.cross{stroke:#333333;}#mermaid-svg-jQYpjZjAE6zgpnxK svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jQYpjZjAE6zgpnxK p{margin:0;}#mermaid-svg-jQYpjZjAE6zgpnxK .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-jQYpjZjAE6zgpnxK .cluster-label text{fill:#333;}#mermaid-svg-jQYpjZjAE6zgpnxK .cluster-label span{color:#333;}#mermaid-svg-jQYpjZjAE6zgpnxK .cluster-label span p{background-color:transparent;}#mermaid-svg-jQYpjZjAE6zgpnxK .label text,#mermaid-svg-jQYpjZjAE6zgpnxK span{fill:#333;color:#333;}#mermaid-svg-jQYpjZjAE6zgpnxK .node rect,#mermaid-svg-jQYpjZjAE6zgpnxK .node circle,#mermaid-svg-jQYpjZjAE6zgpnxK .node ellipse,#mermaid-svg-jQYpjZjAE6zgpnxK .node polygon,#mermaid-svg-jQYpjZjAE6zgpnxK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jQYpjZjAE6zgpnxK .rough-node .label text,#mermaid-svg-jQYpjZjAE6zgpnxK .node .label text,#mermaid-svg-jQYpjZjAE6zgpnxK .image-shape .label,#mermaid-svg-jQYpjZjAE6zgpnxK .icon-shape .label{text-anchor:middle;}#mermaid-svg-jQYpjZjAE6zgpnxK .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jQYpjZjAE6zgpnxK .rough-node .label,#mermaid-svg-jQYpjZjAE6zgpnxK .node .label,#mermaid-svg-jQYpjZjAE6zgpnxK .image-shape .label,#mermaid-svg-jQYpjZjAE6zgpnxK .icon-shape .label{text-align:center;}#mermaid-svg-jQYpjZjAE6zgpnxK .node.clickable{cursor:pointer;}#mermaid-svg-jQYpjZjAE6zgpnxK .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jQYpjZjAE6zgpnxK .arrowheadPath{fill:#333333;}#mermaid-svg-jQYpjZjAE6zgpnxK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jQYpjZjAE6zgpnxK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jQYpjZjAE6zgpnxK .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jQYpjZjAE6zgpnxK .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jQYpjZjAE6zgpnxK .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jQYpjZjAE6zgpnxK .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jQYpjZjAE6zgpnxK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jQYpjZjAE6zgpnxK .cluster text{fill:#333;}#mermaid-svg-jQYpjZjAE6zgpnxK .cluster span{color:#333;}#mermaid-svg-jQYpjZjAE6zgpnxK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jQYpjZjAE6zgpnxK .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jQYpjZjAE6zgpnxK rect.text{fill:none;stroke-width:0;}#mermaid-svg-jQYpjZjAE6zgpnxK .icon-shape,#mermaid-svg-jQYpjZjAE6zgpnxK .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jQYpjZjAE6zgpnxK .icon-shape p,#mermaid-svg-jQYpjZjAE6zgpnxK .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jQYpjZjAE6zgpnxK .icon-shape .label rect,#mermaid-svg-jQYpjZjAE6zgpnxK .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jQYpjZjAE6zgpnxK .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jQYpjZjAE6zgpnxK .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jQYpjZjAE6zgpnxK :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
hadoop3 – Slave
hadoop2 – Slave
hadoop1 – Master
NameNode
SecondaryNameNode
ResourceManager
DataNode
NodeManager
DataNode
NodeManager
先给一个教材→实机的版本差异速记表,后面配置全靠它对号入座:
| 从节点列表文件 | slaves | workers |
| NameNode Web UI | 50070 | 9870 |
| SecondaryNameNode | 50090 | 9868 |
| DataNode IPC | 50010 | 9866 |
二、前期准备:三台机器的"出厂设置"
本章目标:固定静态 IP、让三台机器互相认识、关防火墙、建运行用户、装 Java。以下命令除特别说明外,三台机器都以 root 执行。
2.1 固定 IP 和主机名(每台只改两行值)
# hadoop1 上执行(hadoop2/3 把主机名和 IP 换成自己的)
hostnamectl set-hostname hadoop1
nmcli con mod ens160 ipv4.method manual \\
ipv4.addresses 10.10.10.93/24 \\
ipv4.gateway 10.10.10.2 \\
ipv4.dns '10.10.10.2 223.5.5.5'
nmcli con up ens160
预期结果:当前 SSH 会掉线是正常的,用新 IP 重连后执行 ip addr 确认新 IP 已生效。
2.2 让三台机器互相认识(三台相同)
cat >> /etc/hosts <<'EOF'
10.10.10.93 hadoop1
10.10.10.94 hadoop2
10.10.10.95 hadoop3
EOF
预期结果:任意一台执行 ping hadoop3 能通。
2.3 关防火墙、禁 SELinux(三台)
systemctl disable –now firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2.4 创建运行用户 hduser(三台)
groupadd hadoop
useradd -g hadoop hduser
passwd hduser # 密码自设
sed -i '/^root ALL=(ALL) ALL/a hduser ALL=(ALL) NOPASSWD:ALL' /etc/sudoers
预期结果:su – hduser 切换成功。Hadoop 不建议用 root 跑,三台统一用 hduser 是后面所有免密、目录权限的前提。
2.5 安装 Java 8(三台)
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version
预期结果:显示 openjdk version "1.8.0_xxx"。
★ openjdk-devel 一定要装:精简版没有 jps 命令,后面验收查进程全靠它。
三、免密登录:让主节点"无声"指挥从节点
本章目标:主节点启动时会远程指挥从节点干活,每次都输密码启动就会卡死。只在 hadoop1 上做,root 和 hduser 两个用户各配一遍。
3.1 root 用户免密(hadoop1)
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
# 一路回车,然后分发公钥(第一次要输 yes 和对方密码):
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
3.2 hduser 用户免密(hadoop1)
su – hduser
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
exit
预期结果:在 hadoop1 上执行 ssh hadoop2 直接进入、不问密码。
四、安装与分发:下载、解压、改属主三步走
4.1 下载并解压(hadoop1,root)
mkdir -p /opt/pkg
curl -sSL -o /opt/pkg/hadoop-3.3.6.tar.gz \\
https://mirrors.ustc.edu.cn/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar zxf /opt/pkg/hadoop-3.3.6.tar.gz -C /home/hduser/
mv /home/hduser/hadoop-3.3.6 /home/hduser/hadoop
预期结果:下载约 696MB,/home/hduser/hadoop/bin 目录存在。
★ 本网络环境只有中科大(USTC)镜像能下载成功。清华/阿里/华为的 HTTPS 都被网关透明拦截,报 SSL_ERROR_ZERO_RETURN,换镜像即可,不是你机器的问题。
4.2 分发到另外两台(hadoop1,root)
scp -r /home/hduser/hadoop root@hadoop2:/home/hduser/
scp -r /home/hduser/hadoop root@hadoop3:/home/hduser/
4.3 ★ 修正属主(三台都执行,新手最容易漏的一步)
scp 用 root 分发过去,文件属主全是 root,hduser 没有写日志的权限,从节点会直接起不来:
chown -R hduser:hadoop /home/hduser/hadoop
mkdir -p /home/hduser/hadoop/tmp /home/hduser/hadoop/dfs/name /home/hduser/hadoop/dfs/data
chown -R hduser:hadoop /home/hduser/hadoop
预期结果:三台执行 ls -ld /home/hduser/hadoop,属主均为 hduser hadoop。
五、七个配置文件:集群的"大脑设定"
配置文件都在 /home/hduser/hadoop/etc/hadoop/ 下。在 hadoop1 上全部配好后,把 etc 整体 scp 给两台从节点即可,不要逐台手改。
5.1 JAVA_HOME:Rocky 9 的第一个大坑
Rocky 9 的 openjdk 真实路径带完整版本号、还以 /jre 结尾,教材里那种固定路径直接报 does not exist。先反推真实路径:
readlink -f $(which java)
# 输出类似:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.504.b01-1.2.el9_8.x86_64/jre/bin/java
# 取它上面两级目录就是 JAVA_HOME
然后把下面这行追加到 hadoop-env.sh 和 yarn-env.sh(照抄本文路径,别自己手写):
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.504.b01-1.2.el9_8.x86_64/jre' >> /home/hduser/hadoop/etc/hadoop/hadoop-env.sh
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.504.b01-1.2.el9_8.x86_64/jre' >> /home/hduser/hadoop/etc/hadoop/yarn-env.sh
5.2 workers 文件(替代 2.x 的 slaves)
printf 'hadoop2\\nhadoop3\\n' > /home/hduser/hadoop/etc/hadoop/workers
5.3 环境变量(三台,root 和 hduser 都要)
cat >> /etc/profile <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.504.b01-1.2.el9_8.x86_64/jre
export HADOOP_HOME=/home/hduser/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
EOF
cat >> /home/hduser/.bashrc <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.504.b01-1.2.el9_8.x86_64/jre
export HADOOP_HOME=/home/hduser/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
EOF
source /etc/profile
5.4 core-site.xml(hadoop1)
cat > /home/hduser/hadoop/etc/hadoop/core-site.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<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>
</configuration>
EOF
5.5 hdfs-site.xml(hadoop1)
副本数设 2:数据存两份,坏一台从节点不丢数据,适合三节点小集群。
cat > /home/hduser/hadoop/etc/hadoop/hdfs-site.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property><name>dfs.namenode.secondary.http-address</name><value>hadoop1:9868</value></property>
<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.webhdfs.enabled</name><value>true</value></property>
</configuration>
EOF
5.6 mapred-site.xml(hadoop1)★ 2G 小机器的生死线
不配这一节,2G 机器上提交任何 MapReduce 作业都会立刻失败——AM 默认申请 1536MB,超过 YARN 的 1024MB 上限直接被拒(踩坑 4 的根源)。三处内存全部压到 512MB:
cat > /home/hduser/hadoop/etc/hadoop/mapred-site.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<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>
</configuration>
EOF
5.7 yarn-site.xml(hadoop1)
每台从节点只给 YARN 1G 内存、1 个核——机器本身只有 2G,给多了系统自己都活不了:
cat > /home/hduser/hadoop/etc/hadoop/yarn-site.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<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.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.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>
</configuration>
EOF
5.8 配置重新分发(hadoop1)
scp -r /home/hduser/hadoop/etc root@hadoop2:/home/hduser/hadoop/
scp -r /home/hduser/hadoop/etc root@hadoop3:/home/hduser/hadoop/
ssh hadoop2 'chown -R hduser:hadoop /home/hduser/hadoop'
ssh hadoop3 'chown -R hduser:hadoop /home/hduser/hadoop'
chown -R hduser:hadoop /home/hduser/hadoop
六、启动集群与 WordCount 验收
6.1 格式化并启动(hadoop1,hduser 身份)
su – hduser
hdfs namenode -format -force # 只做一次,重复格式化会导致 DataNode 起不来
start-dfs.sh
start-yarn.sh
预期结果:start-dfs.sh 输出里出现 starting namenodes / datanodes / secondarynamenodes,没有 ERROR。
6.2 确认进程
jps
预期结果:hadoop1 看到 NameNode、SecondaryNameNode、ResourceManager;hadoop2/3 看到 DataNode、NodeManager。
hdfs dfsadmin -report
预期结果:显示 Live datanodes (2),总容量约 79GB。
6.3 WordCount 全链路验收
准备两个测试文件并上传 HDFS:
mkdir -p ~/file
echo "Hello World hi HADOOP" > ~/file/file1.txt
echo "Hello hadoop hi CHINA" > ~/file/file2.txt
hdfs dfs -mkdir -p /input2
hdfs dfs -put -f ~/file/file1.txt ~/file/file2.txt /input2/
运行官方示例(约 1~2 分钟):
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \\
wordcount /input2 /output2/wordcount1
查看结果:
hdfs dfs -cat /output2/wordcount1/*
预期输出:
CHINA 1
HADOOP 1
Hello 2
World 1
hadoop 1
hi 2
浏览器打开两个管理页(Windows 上):NameNode:http://10.10.10.93:9870 / YARN:http://10.10.10.93:8088。能看到 2 个 Live Nodes、刚才的作业记录,就说明整条链路(上传 → 分布式计算 → 结果落盘)全部跑通。
七、五个真实踩坑与解决(★精华)
以下全部是本次部署真实遇到并解决的坑,对照报错自查:
| 1 | 下载时 SSL_ERROR_ZERO_RETURN | 网关对清华/阿里/华为 HTTPS 镜像的透明拦截 | 换 USTC 镜像(本文命令已全部用 USTC) |
| 2 | 启动报 JAVA_HOME … does not exist / not executable | Rocky 9 的 Java 路径带长版本号且在 /jre 子目录下 | 用 readlink -f $(which java) 反推,照抄 5.1 的长路径 |
| 3 | 从节点报 mkdir: 无法创建目录 logs: 权限不够 | scp 分发后属主是 root | 三台 chown -R hduser:hadoop /home/hduser/hadoop(★新手最易漏) |
| 4 | WordCount 提交即失败,日志有 InvalidResourceRequestException | AM 默认要 1536MB,超过 YARN 上限 1024MB | 按本文 5.6,把 AM/Map/Reduce 内存都设 512MB |
| 5 | jps 命令不存在 | headless 精简版不含 jps | yum install -y java-1.8.0-openjdk-devel |
其中坑 3 和坑 4 是纯新手环境(小内存虚拟机)特有的,教材上根本不会写——如果你照教材装完起不来,九成是这两个。
八、日常运维速查
# 启停(hadoop1,hduser 身份)
start-all.sh # 全部启动 = start-dfs.sh + start-yarn.sh
stop-all.sh # 全部停止
# 看状态
hdfs dfsadmin -report # HDFS 各节点容量与存活
jps # 各节点进程
hdfs dfs -ls / # 列出 HDFS 根目录
# HDFS 文件操作
hdfs dfs -mkdir -p /目录名
hdfs dfs -put 本地文件 /目标目录/
hdfs dfs -get /HDFS文件 本地目录/
hdfs dfs -cat /文件路径
hdfs dfs -rm -r /目录名 # 危险,想好再敲
# 查看文件块分布
hdfs fsck / -files -blocks
★ 虚拟机快照请逐台串行创建,严禁三台并发打快照。
九、写在最后
这套环境用三台 2C/2G 的小虚拟机就能完整跑通,非常适合当个人实验环境:配置里所有内存参数都是按 2G 机器压过的,照抄即可。验收通过后记得在 9870 页面多看看 Live Nodes 和块分布,对理解 HDFS 的存储模型很有帮助。
下一篇预告:《系列二:HBase 2.5.16 部署——wal.provider 一行配置救活 HMaster》,在这套 Hadoop 集群之上搭 HBase,讲讲 asyncfs 与 Hadoop 3.3.6 的兼容冲突、内置 ZooKeeper 方案,以及重启后"启动顺序错了就全下线"的坑。敬请关注。



