欢迎光临
我们一直在努力

【Hadoop 3.3.6 伪分布式安装配置完整教程(Ubuntu 24.04 版,踩坑全记录)】

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 关键差异对照表

项目CentOS 7Ubuntu 24.04
防火墙 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 会找不到命令

十三、总结

整个流程的核心思路:

  • 安装 JDK → 配 JAVA_HOME + PATH
  • 安装 Hadoop → 配 HADOOP_HOME + PATH
  • 改 6 个核心配置文件 → hadoop-env.sh / core-site.xml / hdfs-site.xml / mapred-env.sh / mapred-site.xml / yarn-env.sh / yarn-site.xml
  • 修 /etc/hosts → 让主机名指向真实 IP
  • 统一权限 → chown -R hadoop:hadoop /export/server/hadoop
  • 格式化一次 NameNode → sudo -u hadoop hdfs namenode -format
  • 启动 HDFS + YARN → start-dfs.sh && start-yarn.sh
  • 验证 9870/8088 Web UI → 必须 0.0.0.0 监听
  • Ubuntu 和 CentOS 的最大差异,就是 hosts 解析 和 启动用户 这两块。把握住这两个点,剩下的流程基本一致。

    祝各位顺利搭建自己的第一个 Hadoop 集群!


    赞(0)
    未经允许不得转载:171主机测评 » 【Hadoop 3.3.6 伪分布式安装配置完整教程(Ubuntu 24.04 版,踩坑全记录)】
    分享到: 更多 (0)

    评论 抢沙发

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