ERROR - org.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:459)
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)
报错如下图
1、Hadoop 3.3 HDFS 分布式集群基础环境
javascript:void(0)
2、Flume 设置了sink.type 为 hdfs
即:
# 配置sink组件
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path =hdfs://master:9820/user/flume/data
agent1.sinks.sink1.hdfs.fileType = DataStream
报错原因
Hadoop 3.3.0 中的 guava 版本和 Flume 1.9.0 中的版本不一致
经查
Hadoop 3.3.0 中 guava-27.0-jre.jar
[root@master ~]# ll /usr/bigdata/hadoop-3.3.0/share/hadoop/common/lib/
-rw-r--r-- 1 yarn yarn 2747878 7月 7 02:47 guava-27.0-jre.jar
Flume 1.9.0 中 guava-11.0.2.jar
[root@master ~]# ll /usr/bigdata/apache-flume-1.9.0-bin/lib/
-rw-r--r-- 1 root root 1648200 9月 13 2018 guava-11.0.2.jar
解决方案
删除低版本的 guava ,把高版本的 guava 复制一份放在低版本处
删除 Flume 中的 guava
[root@master ~]# rm -rf /usr/bigdata/apache-flume-1.9.0-bin/lib/guava-11.0.2.jar
把 Hadoop 中的 guava 复制到 Flume 中
[root@master ~]# cp /usr/bigdata/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar /usr/bigdata/apache-flume-1.9.0-bin/lib/
重新启动 Flume 问题解决!