Hadoop 3.3.6 伪分布式安装配置完整教程(Ubuntu 24.04)
由于网上大多数教程基于 CentOS 7,在 Ubuntu 24.04 上部署时会遇到不少差异(hosts 解析、防火墙、命令等),本文记录完整的实操流程和踩坑解决办法。
一、前置准备
1. 环境说明
| 操作系统 | Ubuntu 24.04.3 LTS |
| JDK | JDK-8u202-linux-x64 |
| Hadoop | hadoop-3.3.6 |
| 虚拟机 | VMware Workstation |
| IP | 192.168.91.10 |
| 主机名 | hadoop-VMware-Virtual-Platform |
| 登录用户 | hadoop(普通用户,非 root) |
2. 关闭防火墙
Ubuntu 默认使用 ufw,不是 CentOS 的 firewalld:
sudo ufw status
sudo ufw disable
3. SSH 免密登录
ssh localhost
cd ~/.ssh
ssh-keygen -t rsa
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
测试:
ssh localhost
# 能直接进入,不需要密码即为成功
exit
二、安装 JDK 8
1. 创建安装目录
sudo mkdir -p /export/server
sudo chown -R hadoop:hadoop /export
💡 Ubuntu 踩坑点 1:普通用户创建 /export 会报“权限不够”,必须用 sudo 创建后再 chown 给 hadoop 用户。
2. 上传并解压 JDK
通过 FinalShell 拖拽上传 jdk-8u202-linux-x64.tar.gz 到 /export/server/:
cd /export/server
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /export/server/
3. 配置软链接
ln -s /export/server/jdk1.8.0_202 /export/server/jdk
4.设置粘贴模式(在 ~/.vimrc 里加一行)
echo "set paste" >> ~/.vimrc
5. 配置环境变量(/etc/profile)
sudo vim /etc/profile
在文件末尾追加:
# ===== Java =====
export JAVA_HOME=/export/server/jdk
export PATH=$JAVA_HOME/bin:$PATH
⚠️ 注意:$JAVA_HOME/bin 一定要放在 $PATH 前面,否则系统自带的 OpenJDK 会优先被使用。
生效并验证:
source /etc/profile
java -version
看到 java version "1.8.0_202" 即成功。
6. 配置 Java 软链接(可选)
sudo rm -f /usr/bin/java
sudo ln -s /export/server/jdk/bin/java /usr/bin/java
三、安装 Hadoop 3.3.6
1. 上传并解压
cd /export/server
tar -zxvf hadoop-3.3.6.tar.gz -C /export/server/
ln -s /export/server/hadoop-3.3.6 /export/server/hadoop
2. 配置环境变量
继续在 /etc/profile 末尾追加:
# ===== Hadoop =====
export HADOOP_HOME=/export/server/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
生效并验证:
source /etc/profile
hadoop version
四、修改 Hadoop 配置文件
进入配置目录:
cd /export/server/hadoop/etc/hadoop
1. hadoop-env.sh
vim hadoop-env.sh
在文件开头加入:
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
# Hadoop 启动用户配置(Ubuntu 下必须加,否则会报 only be executed by root)
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop
💡 Ubuntu 踩坑点 2:Hadoop 3.x 默认要求 root 启动,Ubuntu 下用 hadoop 普通用户启动会报错 namenode can only be executed by root,必须在 hadoop-env.sh 里显式声明用户。
2. core-site.xml
vim core-site.xml
内容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/export/server/hadoop/tmp</value>
</property>
</configuration>
3. hdfs-site.xml
vim hdfs-site.xml
内容:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///export/server/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///export/server/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>0.0.0.0:9868</value>
</property>
<!– 关键:显式绑定 0.0.0.0,避免只监听 127.0.0.1 –>
<property>
<name>dfs.namenode.http-address</name>
<value>0.0.0.0:9870</value>
</property>
</configuration>
💡 Ubuntu 踩坑点 3:Hadoop 默认会把 Web UI 绑到 127.0.0.1:9870,导致 Windows 浏览器访问 http://192.168.91.10:9870 报“拒绝连接”。必须显式写 0.0.0.0:9870。
4. mapred-env.sh
vim mapred-env.sh
文件开头加入:
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
5. mapred-site.xml
⚠️ Hadoop 3.x 配置文件直接叫 mapred-site.xml,不是 CentOS 教程里常见的 mapred-site.xml.template。
vim mapred-site.xml
内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
</configuration>
6. yarn-env.sh
vim yarn-env.sh
文件开头加入:
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
7. yarn-site.xml
Ubuntu 踩坑重点! 这里最容易写错,务必保证 <configuration> 和 </configuration> 都在。
vim yarn-site.xml
内容:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!– 关键:绑定 0.0.0.0,否则 Windows 访问不了 8088 –>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>0.0.0.0:8088</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>0.0.0.0:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>0.0.0.0:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>0.0.0.0:8031</value>
</property>
<property>
<name>yarn.nodemanager.address</name>
<value>0.0.0.0:0</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/export/server/hadoop/tmp/nm-local-dir</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/export/server/hadoop/logs/nm-logs</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/export/server/hadoop/etc/hadoop:/export/server/hadoop/share/hadoop/common/lib/*:/export/server/hadoop/share/hadoop/common/*:/export/server/hadoop/share/hadoop/hdfs:/export/server/hadoop/share/hadoop/hdfs/lib/*:/export/server/hadoop/share/hadoop/hdfs/*:/export/server/hadoop/share/hadoop/mapreduce/*:/export/server/hadoop/share/hadoop/yarn:/export/server/hadoop/share/hadoop/yarn/lib/*:/export/server/hadoop/share/hadoop/yarn/*
</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>
</configuration>
五、修改 /etc/hosts(Ubuntu 关键步骤)
Ubuntu 安装后默认把主机名映射到 127.0.0.1,这会导致 Hadoop 只监听本地回环。必须改成真实 IP:
sudo vim /etc/hosts
改成:
127.0.0.1 localhost
192.168.91.10 hadoop-VMware-Virtual-Platform
💡 Ubuntu 踩坑点 4:CentOS 通常没有这个问题,但 Ubuntu 默认 hosts 是:
127.0.0.1 localhost
127.0.0.1 hadoop-VMware-Virtual-Platform ← 错误写法
一定要拆成两行,且主机名对应真实 IP,否则 Hadoop Web UI 只会绑到 127.0.0.1。
验证:
ping hadoop-VMware-Virtual-Platform -c 2
# 应该 ping 到 192.168.91.10
六、创建必要目录并修正权限
mkdir -p /export/server/hadoop/tmp
mkdir -p /export/server/hadoop/dfs/name
mkdir -p /export/server/hadoop/dfs/data
mkdir -p /export/server/hadoop/logs/hdfs
💡 Ubuntu 踩坑点 5:如果你之前用 sudo hdfs namenode -format(root 身份)格式化过,生成的 dfs/name、logs/hdfs 等目录属主会变成 root。必须一次性改回来:
sudo chown -R hadoop:hadoop /export/server/hadoop
七、格式化 HDFS(仅第一次)
因为格式化需要 root 权限,但要让生成的目录属主是 hadoop,推荐用:
sudo -u hadoop /export/server/hadoop/bin/hdfs namenode -format
看到以下输出即成功:
INFO common.Storage: Storage directory /export/server/hadoop/dfs/name has been successfully formatted.
INFO namenode.NameNode: SHUTDOWN_MSG: Shutting down NameNode at …

⚠️ 重要:格式化只能执行一次!重复格式化会导致 ClusterID 不一致,DataNode 无法启动。
八、启动 HDFS 和 YARN
start-dfs.sh
start-yarn.sh
查看进程:
jps
应该看到 6 个进程:
NameNode
DataNode
SecondaryNameNode
ResourceManager
NodeManager
Jps
如果缺进程,参考下方“常见问题排查”。
九、验证 Web UI
在 Windows 浏览器访问:
| HDFS NameNode | http://192.168.91.10:9870 |
| YARN ResourceManager | http://192.168.91.10:8088 |
验证监听地址:
ss -tlnp | grep -E "9870|8088"
正确结果(前面是 0.0.0.0):
LISTEN 0 128 0.0.0.0:9870 …
LISTEN 0 128 0.0.0.0:8088 …
错误结果(前面是 127.0.0.1,只有虚拟机内部能访问):
LISTEN 0 128 127.0.0.1:9870 …
出现 127.0.0.1 时,请回到第五步检查 /etc/hosts,以及各 *-site.xml 里是否写死了 0.0.0.0。
NameNode Web UI 截图
截图要点:确认页面顶部显示 192.168.91.10:9870,且 Overview 中 NameNode 状态为 Active,Live Nodes 数量为 1。
YARN ResourceManager 截图

截图要点:确认页面顶部显示 192.168.91.10:8088,且 Cluster Metrics 中 Active Nodes 数量为 1,说明 NodeManager 已正常注册。
十、运行官方 WordCount 例子
# 1. 准备输入目录
hdfs dfs -mkdir -p /wordcount/input
hdfs dfs -put -f /etc/profile /wordcount/input/
hdfs dfs -put -f /export/server/hadoop/etc/hadoop/*.xml /wordcount/input/
hdfs dfs -rm -r -f /wordcount/output
# 2. 运行 WordCount
hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \\
wordcount /wordcount/input /wordcount/output
# 3. 查看结果
hdfs dfs -cat /wordcount/output/part-r-00000 | head -20
如果看到单词统计结果,恭喜你,Hadoop 伪分布式集群正式跑通! 🎉
WordCount 运行结果截图

截图要点:确认终端输出中显示单词统计结果(如 the 12、hadoop 8 等),且命令执行成功无报错,说明 MapReduce 作业已完整跑通。
十一、常见问题排查(Ubuntu 特供)
1. 权限不足:mkdir: 无法创建目录 "/export": 权限不够
sudo mkdir -p /export/server
sudo chown -R hadoop:hadoop /export
2. sudo hdfs namenode -format 报 sudo: hdfs: 找不到命令
因为 sudo 默认不继承当前用户 PATH。用完整路径:
sudo /export/server/hadoop/bin/hdfs namenode -format
# 或
sudo -u hadoop /export/server/hadoop/bin/hdfs namenode -format
3. start-dfs.sh 报 namenode can only be executed by root
在 hadoop-env.sh 里加上:
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop
4. ERROR: Unable to write in /export/server/hadoop/logs/hdfs
属主不对,修复:
sudo chown -R hadoop:hadoop /export/server/hadoop
5. ss 查端口显示绑定 127.0.0.1,Windows 访问不了
- 检查 /etc/hosts 是否把主机名指向了真实 IP
- 在 hdfs-site.xml 和 yarn-site.xml 里显式绑定 0.0.0.0
- 重启服务:stop-dfs.sh && start-dfs.sh、stop-yarn.sh && start-yarn.sh
6. xmllint 报 Extra content at the end of the document
XML 缺少 <configuration> 根标签。每个 *-site.xml 必须是这种结构:
<?xml version="1.0"?>
<configuration>
<!– 所有 property 都写在这里 –>
</configuration>
用下面的命令检查所有 XML 格式:
sudo apt install -y libxml2-utils
cd /export/server/hadoop/etc/hadoop
for f in *.xml; do xmllint –noout $f && echo "$f OK" || echo "$f ERROR"; done
7. 重复格式化导致 DataNode 起不来
症状:jps 里只有 NameNode,没有 DataNode。
原因:NameNode 和 DataNode 的 ClusterID 不一致。
解决:清空 DataNode 数据目录,不要再格式化 NameNode:
stop-dfs.sh
rm -rf /export/server/hadoop/dfs/data/*
start-dfs.sh
十二、CentOS vs Ubuntu 关键差异对照表
| 防火墙 | systemctl stop firewalld | sudo ufw disable |
| 默认 Java | 无 | 可能自带 OpenJDK,PATH 里 JAVA_HOME 必须放前面 |
| /etc/hosts | 一般正常 | 默认把主机名映射到 127.0.0.1 |
| Hadoop 启动用户 | root | hadoop 普通用户,需在 hadoop-env.sh 声明 |
| 配置文件命名 | 有些教程是 .template | Hadoop 3.x 直接 mapred-site.xml |
| 启动命令 | start-all.sh | start-dfs.sh + start-yarn.sh 分开执行更稳 |
| sudo 环境变量 | 继承较多 | 严格,sudo hdfs 会找不到命令 |
十三、总结
整个流程的核心思路:
Ubuntu 和 CentOS 的最大差异,就是 hosts 解析 和 启动用户 这两块。把握住这两个点,剩下的流程基本一致。
祝各位顺利搭建自己的第一个 Hadoop 集群!



