0%

hadoop问题集锦

Hadoop 常见问题集锦:原因 + 解决,遇到直接查

大数据组件多、版本杂、配置碎,出问题才是常态。这篇把 Hadoop 生态里几个常见问题记录下来——遇到什么问题、为什么报错、怎么解决

Flume 写 HDFS 报 NoSuchMethodError

报错信息:

1
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

问题定位:

Flume 和 Hadoop 都用到了 Google 的 Guava 库,但版本不一样。checkArgument 这个方法在高版本 Guava 里的签名有变化,Flume 编译时用的是高版本,运行时加载了 Hadoop 的低版本 Guava,方法对不上,就抛 NoSuchMethodError

怎么确认是版本冲突?

看错误栈顶部的类名——com.google.common.base.Preconditions 是 Guava 的核心类,NoSuchMethodError 说明方法签名不匹配,十有八九是版本冲突。

解决办法:

  1. 分别找到 Flume 和 Hadoop 的 lib 目录里的 Guava JAR:
1
2
3
4
5
# Flume
ls $FLUME_HOME/lib/ | grep guava

# Hadoop
ls $HADOOP_HOME/share/hadoop/common/lib/ | grep guava
  1. 比较版本,比如 Flume 是 guava-28.0-jre.jar,Hadoop 是 guava-11.0.2.jar,把 Hadoop 的低版本删掉,把 Flume 的高版本复制到 Hadoop 的 lib 目录下。
  2. 如果两个版本都不高,直接下载一个统一的高版本(比如 guava-30.0-jre.jar),替换两边。
  3. 重启 Flume Agent 和 Hadoop 相关服务。

这类问题的本质: Flume 和 Hadoop 共用同一套 Guava 库,但不同版本之间方法不兼容。多组件共用一个库的时候,版本必须一致。

HDFS 写文件失败:没有 DataNode 运行

报错信息:

1
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.

问题定位:

这条报错直译是”0 个 DataNode 可用,无法满足最小副本数要求”。根本原因是没有 DataNode 进程在运行,或者 DataNode 虽然进程在但没向 NameNode 注册成功。

怎么确认?

1
jps

如果看不到 DataNode 进程,说明节点没起来。如果看到了但还是报错,去 DataNode 的日志里看有没有 Connection refusedBlock report 相关的错误。

1
tail -100 $HADOOP_HOME/logs/hadoop-<user>-datanode-<host>.log

解决办法:

  1. DataNode 进程没起来 → 检查 hdfs-site.xmldfs.datanode.data.dir 配置的目录是否存在、权限对不对(Hadoop 用户要可读写)。
  2. DataNode 进程起来了但注册失败 → 检查 core-site.xml 里的 fs.defaultFS 地址是否正确,NameNode 是否正常启动(jps 看有没有 NameNode 进程)。
  3. 数据目录有残留的 namespaceID 冲突 → 删除 DataNode 数据目录下的 current 文件夹:
1
rm -rf /opt/data/hadoop/hdfs/data/current

然后重新启动 DataNode。注意:这样做会清空该节点上的数据块,NameNode 会从其他副本恢复数据,适用于测试环境或数据有其他副本的生产环境。

修复后重启 DataNode:

1
2
3
4
5
# 单独启动 DataNode
hdfs --daemon start datanode

# 或重启整个 HDFS
stop-dfs.sh && start-dfs.sh

这类问题的本质: HDFS 写入需要至少一个活的 DataNode。DataNode 起不来,根本原因通常集中在三处——目录权限、NameNode 地址不通、数据目录脏了。

欢迎关注我的其它发布渠道