这是一篇记录在 WSL 环境下搭建 Spark 调试环境时遇到的问题及其解决方法的博客,方便日后排雷复用。

Bug 1:用户权限问题

启动 Hadoop 时出现错误:

ERROR: namenode can only be executed by root.

排查后发现,start-dfs.sh 脚本中对执行用户有限制(如下图),当前用户非 root 时会报错:

alt text

解决方法:

  • 使用 root 用户执行启动脚本,或
  • 修改 start-dfs.sh 中的用户校验(仅建议在开发环境使用)

Bug 2:SSH 无密码登录失败

报错信息:

localhost: zhj20@localhost: Permission denied (publickey,password)

说明 SSH 无密码登录未配置,Hadoop 启动过程中的内部通信失败。

解决步骤:

  1. 生成 SSH 密钥(若无)

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    
  2. 配置公钥认证

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
  3. 验证是否能免密登录

    ssh localhost
    

成功后应自动登录,无需输入密码,exit 退出即可。


Bug 3:YARN 节点列表为空

执行 yarn node -list 时无任何节点。

排查方向:

  • 确认 ResourceManager 和 NodeManager 是否都已启动(jps 查看)
  • 检查 yarn-site.xml 配置是否正确
  • 查看日志文件是否有网络连接/端口异常

Bug 4:NameNode 启动失败(EditLog 异常)

There appears to be a gap in the edit log. We expected txid 1, but got txid 113.

原因分析:

  • Hadoop 恢复 fsimage + editlog 时发现 txid 序号不连续,editlog 可能损坏或缺失。

解决方案(无重要数据时):

hdfs namenode -format
./sbin/start-dfs.sh

注意:此操作会清空 HDFS 中的所有数据,仅建议在调试或开发环境中使用!


Bug 5:DataNode 启动失败,无法写入副本

错误信息:

File ... could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running

排查配置:

cat $HADOOP_HOME/etc/hadoop/hdfs-site.xml | grep -A 5 dfs.datanode.data.dir

日志提示:

Incompatible clusterIDs
namenode clusterID = CID-018939f5...
datanode clusterID = CID-659a4b77...

说明 DataNode 保存的 clusterID 与 NameNode 不一致。

解决办法:

# 停止 Hadoop
./sbin/stop-dfs.sh

# 清除 DataNode 数据(不要删 NameNode 数据!)
rm -rf /opt/module/hadoop-3.4.1/hadoop_data/hdfs/datanode/*

# 重启
./sbin/start-dfs.sh

# 查看是否正常启动
jps

参考链接