欢迎光临
我们一直在努力

大数据第一篇:别再照教材装 Hadoop 了!Rocky 9 + Hadoop 3.3.6 三节点完全分布式部署实战(2G 小机亲测跑通 WordCount)

本文在 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

先给一个教材→实机的版本差异速记表,后面配置全靠它对号入座:

项目Hadoop 2.x(教材)Hadoop 3.3.6(本文)
从节点列表文件 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 方案,以及重启后"启动顺序错了就全下线"的坑。敬请关注。

赞(0)
未经允许不得转载:171主机测评 » 大数据第一篇:别再照教材装 Hadoop 了!Rocky 9 + Hadoop 3.3.6 三节点完全分布式部署实战(2G 小机亲测跑通 WordCount)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址