hadoop问题集锦
Hadoop 常见问题集锦:原因 + 解决,遇到直接查
大数据组件多、版本杂、配置碎,出问题才是常态。这篇把 Hadoop 生态里几个常见问题记录下来——遇到什么问题、为什么报错、怎么解决。
Flume 写 HDFS 报 NoSuchMethodError
报错信息:
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 说明方法签名不匹配,十有八九是版本冲突。
解决办法:
- 分别找到 Flume 和 Hadoop 的
lib目录里的 Guava JAR:
Flume
ls $FLUME_HOME/lib/ | grep guava
Hadoop
ls $HADOOP_HOME/share/hadoop/common/lib/ | grep guava
- 比较版本,比如 Flume 是
guava-28.0-jre.jar,Hadoop 是guava-11.0.2.jar,把 Hadoop 的低版本删掉,把 Flume 的高版本复制到 Hadoop 的lib目录下。 - 如果两个版本都不高,直接下载一个统一的高版本(比如
guava-30.0-jre.jar),替换两边。 - 重启 Flume Agent 和 Hadoop 相关服务。
这类问题的本质: Flume 和 Hadoop 共用同一套 Guava 库,但不同版本之间方法不兼容。多组件共用一个库的时候,版本必须一致。
HDFS 写文件失败:没有 DataNode 运行
报错信息:
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.
