news 2026/6/25 14:12:26

Hadoop 序列化与 HDFS 连接:从入门到踩坑全记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hadoop 序列化与 HDFS 连接:从入门到踩坑全记录

一、依赖缺失与类路径错误

1. NoClassDefFoundError: com/ctc/wstx/io/InputBootstrapper

现象

Exception in thread "main" java.lang.NoClassDefFoundError: com/ctc/wstx/io/InputBootstrapper Caused by: java.lang.ClassNotFoundException: com.ctc.wstx.io.InputBootstrapper

原因
Hadoop 客户端解析 XML 配置文件需要 Woodstox 库,但项目未引入该依赖。

解决
Maven 项目在pom.xml中添加:

<dependency> <groupId>com.fasterxml.woodstox</groupId> <artifactId>woodstox-core</artifactId> <version>5.4.0</version> </dependency>

更省心的方式是直接引入完整客户端:

<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>你的Hadoop版本</version> </dependency>

若使用 Gradle 或手动管理 jar,记得把hadoop-clientwoodstox-core放入 classpath。


2. UnsupportedFileSystemException: No FileSystem for scheme "hdfs"

现象

org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "hdfs"

原因
虽然添加了hadoop-common,但缺少 HDFS 客户端的具体实现(hadoop-hdfs-client),无法识别hdfs://协议。

解决
确认项目中已包含:

<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs-client</artifactId> <version>3.3.6</version> </dependency>

如果 Maven 仓库网络不佳,可直接下载对应 jar 并添加到 Module 的依赖中。


二、文件路径与配置文件错误

3. FileNotFoundException: 本地文件路径解析错误

现象

java.io.FileNotFoundException: File E:Hadoop/testupload.txt

代码里明明写的是d:/testupload.txt,却变成了带冒号的错误路径。

原因
Hadoop 的Path在 Windows 下若不加协议前缀,可能被当成相对路径或解析错误。

解决
使用标准 URI 格式:new Path("file:///D:/testupload.txt")
或者用 Java 的File生成 URI:

new Path(new File("D:/testupload.txt").toURI().toString());

4. 启动时报“JAVA_HOME is not set”

现象
执行start-dfs.sh时,从节点上出现Error: JAVA_HOME is not set and could not be found.

原因
Hadoop 脚本通过 SSH 远程执行命令,不会加载.bashrc/etc/profile中的环境变量。

解决
在所有节点的$HADOOP_HOME/etc/hadoop/hadoop-env.sh中硬编码 Java 路径:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-2.el7_9.x86_64

可以用readlink -f $(which java)找到完整 JDK 路径,取上两级目录作为JAVA_HOME(确保该目录下有bin/java)。


5. “bin/java is not executable”

现象

bin/java: No such file or directory

或提示bin/java不可执行。

原因
JAVA_HOME错误地指向了 JRE 目录(没有bin/java),或路径本身不存在。

解决

  • 安装完整 JDK:yum install java-1.8.0-openjdk-devel

  • 使用readlink -f $(which java)找到真实路径,例如/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-2.el7_9.x86_64/jre/bin/java,则JAVA_HOME应设为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-2.el7_9.x86_64(即去掉/jre/bin/java)。


6. Hadoop 3.x 使用 slaves 文件导致从节点无法启动

现象
从节点没有 DataNode 进程,NameNode 日志提示找不到 slave。

原因
Hadoop 3.x 已经用workers文件替代了slaves

解决
删除或备份旧的slaves,在$HADOOP_HOME/etc/hadoop/下创建workers,每行写一个从节点主机名:

echo -e "slave1\nslave2" > workers

7. 数据目录不存在,DataNode 启动失败

现象
DataNode 日志提示Directory /usr/local/hadoop-3.3.6/data/datanode does not exist

原因
hdfs-site.xml中配置的数据目录未预先创建,Hadoop 不会自动创建多级目录。

解决
在所有节点手动创建:

mkdir -p /usr/local/hadoop-3.3.6/data/{namenode,datanode,tmp}

三、NameNode 安全模式与 DataNode 运行问题

8. SafeModeException: Name node is in safe mode

现象

org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create file /files/info.txt. Name node is in safe mode.

原因
HDFS 启动后会进入一段安全模式,等待 DataNode 上报足够的数据块。此时禁止写入。

解决
在 NameNode 所在节点手动退出:

hdfs dfsadmin -safemode leave

hdfs dfsadmin -safemode get检查,返回Safe mode is OFF即可。


9. 0 datanode(s) running —— 写入时找不到 DataNode

现象

File /files/info.txt could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node(s) are excluded in this operation.

原因
DataNode 进程未启动,或启动后因clusterID 不匹配权限不足网络不通等原因挂掉。

解决

  • 首先检查进程:jps应显示DataNode。若没有,手动启动:

    hdfs --daemon start datanode

    或重启整个 HDFS:

    stop-dfs.sh && start-dfs.sh

    如果 DataNode 反复退出,查看日志($HADOOP_HOME/logs/hadoop-*-datanode-*.log),常见处理:

    • Incompatible clusterIDs:清理 DataNode 数据目录(实验环境):

      rm -rf /tmp/hadoop-*/dfs/data/current hdfs namenode -format start-dfs.sh
    • 权限问题:确保数据目录属主是启动用户,且有读写权限。

    • 主机名解析:确保 DataNode 能 ping 通 NameNode 的主机名。

  • 最后通过hdfs dfsadmin -report确认Live datanodes ≥ 1

重要提示:DataNode 是独立守护进程,不会随 Java 程序启动而自动运行,必须事先在集群节点上启动。


四、主机名解析与集群通信

10. UnknownHostException: master

现象
Windows 上的 Java 程序连接完全分布式集群时:

java.net.UnknownHostException: master

原因
Windows 无法将master解析为 Linux 服务器的 IP。

解决
在 Windows 的C:\Windows\System32\drivers\etc\hosts文件中添加:

192.168.1.100 master

或在代码中直接用 IP:

FileSystem.get(new URI("hdfs://192.168.1.100:9000"), conf, "root");

11. ssh: Could not resolve hostname slave1

现象
启动从节点或 SCP 传输时,提示无法解析slave1

原因
主节点不能解析从节点的主机名。

解决
在所有节点的/etc/hosts中添加完整的集群主机映射:

192.168.1.100 master 192.168.1.101 slave1 192.168.1.102 slave2

并确保已配置 SSH 免密登录(ssh-copy-id)。


12. Slave 节点 jps 只有 Jps,无 DataNode

原因
可能原因:① 使用了废弃的slaves文件;② SSH 免密未配;③ 从节点hadoop-env.sh未设置JAVA_HOME;④ 从节点无法解析 master 主机名。

解决
逐一排查:

  • 改用workers文件

  • 配置 SSH 免密

  • 在所有节点的hadoop-env.sh中强制写入JAVA_HOME

  • 在从节点/etc/hosts中添加 master 映射


五、权限与安全设置

13. root 用户启动被拒:HDFS_NAMENODE_USER not defined

现象

ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

原因
Hadoop 默认不允许 root 直接启动守护进程,需显式声明允许的用户。

解决
hadoop-env.sh末尾添加(仅限实验环境):

export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root

生产环境务必创建普通用户(如hadoop)并赋权。


六、版本与工具适配

14. IDEA 社区版无法安装 Big Data Tools 插件

现象
社区版 IDEA 搜索不到Big Data Tools或提示不支持。

原因
该插件仅限 Ultimate 版。

替代方案

  • 浏览器直接访问http://namenode:9870查看 HDFS

  • IDEA 内嵌终端使用hdfs dfs命令

  • 编写 Java 代码操作 HDFS

  • 使用免费客户端如 HDFS Explorer

15. Windows 与 Linux 集群 Hadoop 版本不一致

现象
Windows 开发环境使用 Hadoop 3.3.6,集群却是 2.10.2,导致 RPC 协议不匹配。

解决
将集群升级到与开发环境一致的 3.3.6 版本(下载安装包,复用配置文件,重新格式化 NameNode)。


七、实验收尾:需要手动关闭 DataNode 吗?

个人实验环境强烈建议手动关闭。DataNode 等守护进程会持续占用系统资源,直接关机可能导致下次启动时 NameNode 长时间停留在安全模式。执行:

stop-dfs.sh

并用jps确认无残留进程即可。生产环境请勿随意执行,应由管理员操作。


八、总结与避坑指南

  1. 依赖要完整:使用hadoop-client或确保hadoop-commonhadoop-hdfs-clientwoodstox-core均已引入。

  2. 路径要规范:Windows 本地路径使用file:///D:/...格式;配置文件中的目录用正斜杠,目录需预先创建。

  3. 环境变量硬编码:所有节点的hadoop-env.sh必须显式设置JAVA_HOME,这是最常见的启动失败根源。

  4. 主机名互通:所有节点(包括 Windows 客户端)必须能通过主机名互相 ping 通,/etc/hostshosts文件要配置完整。

  5. 配置文件更新:升级 Hadoop 版本后注意废弃项(如slavesworkers)。

  6. 安全模式与 DataNode:第一次启动或异常关机后,记得检查安全模式,确认 DataNode 存活再进行写入操作。

  7. 权限声明:用 root 启动实验集群时,务必在hadoop-env.sh中添加_USER变量。

这些错误单看一条似乎都很“低级”,但连续出现时非常消磨热情。把全部坑踩完并记录下来,下次再遇到就能秒杀了。希望这篇文章能帮你绕过这些暗礁,顺利跑通 Hadoop 序列化实验!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 14:06:42

每日 AI 研究简报 · 2026-06-24

&#xff08;本文借助 AI 大模型及工具辅助整理&#xff09; 一句话总结&#xff1a;今日 AI Agent 与多模态视频生产工具迎来爆发&#xff0c;Anthropic 推出 Claude Tag 深度整合企业协作&#xff0c;开源视频 Agent 框架 OpenMontage 惊艳亮相&#xff0c;AI 正从「对话助手…

作者头像 李华
网站建设 2026/6/25 14:06:30

3分钟快速配置:基于YOLOv5的智能象棋AI辅助系统终极指南

3分钟快速配置&#xff1a;基于YOLOv5的智能象棋AI辅助系统终极指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 你是否还在为手动输入象棋棋局而烦恼&…

作者头像 李华
网站建设 2026/6/25 14:04:51

【软件测试】day02设计测试点

学习目标能对穷举场景设计测试点等价类划分法能对限定边界规则设计测试点边界分析法能对多条件依赖关系进行设计测试点判定表法能对于项目业务进行设计测试点场景法1.等价类划分法见2026.6.24.01 ---7.12.边界值分析法2.1.边界范围节点选取正好等于、刚好大于、刚好小于边界的值…

作者头像 李华
网站建设 2026/6/25 14:02:32

工业级遗传算法实战:排列编码、约束修复与NSGA-II多目标优化

1. 这不是又一篇“遗传算法入门”——它解决的是你写完第一版代码后卡住的真问题“遗传算法入门”这个词&#xff0c;我见过太多次了。去年带三个实习生做智能排班项目&#xff0c;他们全在B站、知乎、CSDN上搜到“遗传算法入门 Part One”&#xff0c;兴致勃勃跑通了那个经典的…

作者头像 李华
网站建设 2026/6/25 14:02:21

3分钟搞定Mac NTFS读写难题:Free-NTFS-for-Mac免费终极解决方案

3分钟搞定Mac NTFS读写难题&#xff1a;Free-NTFS-for-Mac免费终极解决方案 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and mana…

作者头像 李华
网站建设 2026/6/25 13:59:44

cert-manager:Kubernetes 证书管理,自动化到底

文章目录cert-manager&#xff1a;Kubernetes 证书管理&#xff0c;自动化到底它到底做了什么典型用法安装方式值得注意的点社区状态cert-manager&#xff1a;Kubernetes 证书管理&#xff0c;自动化到底 在 Kubernetes 集群里管 TLS 证书&#xff0c;手动操作基本等于定时炸弹…

作者头像 李华