flume启动报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
一、问题描述
新部署的 flume 在启动时候报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
2020-06-30 11:40:20,359 (SinkRunner-PollingRunner-DefaultSinkProcessor) [ERROR - org.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:459)] process failed
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
at org.apache.hadoop.conf.Configuration.setBoolean(Configuration.java:1679)
at org.apache.flume.sink.hdfs.BucketWriter.open(BucketWriter.java:221)
at org.apache.flume.sink.hdfs.BucketWriter.append(BucketWriter.java:572)
at org.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:412)
at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:67)
at org.apache.flume.SinkRunnerPollingRunner.run(SinkRunner.java:145)atjava.lang.Thread.run(Thread.java:748)Exceptioninthread"SinkRunner−PollingRunner−DefaultSinkProcessor"java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)Vatorg.apache.hadoop.conf.Configuration.set(Configuration.java:1357)atorg.apache.hadoop.conf.Configuration.set(Configuration.java:1338)atorg.apache.hadoop.conf.Configuration.setBoolean(Configuration.java:1679)atorg.apache.flume.sink.hdfs.BucketWriter.open(BucketWriter.java:221)atorg.apache.flume.sink.hdfs.BucketWriter.append(BucketWriter.java:572)atorg.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:412)atorg.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:67)atorg.apache.flume.SinkRunnerPollingRunner.run(SinkRunner.java:145)atjava.lang.Thread.run(Thread.java:748)Exceptioninthread"SinkRunner−PollingRunner−DefaultSinkProcessor"java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)Vatorg.apache.hadoop.conf.Configuration.set(Configuration.java:1357)atorg.apache.hadoop.conf.Configuration.set(Configuration.java:1338)atorg.apache.hadoop.conf.Configuration.setBoolean(Configuration.java:1679)atorg.apache.flume.sink.hdfs.BucketWriter.open(BucketWriter.java:221)atorg.apache.flume.sink.hdfs.BucketWriter.append(BucketWriter.java:572)atorg.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:412)atorg.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:67)atorg.apache.flume.SinkRunnerPollingRunner.run(SinkRunner.java:145)
报错截图:
问题解决:
一般这类问题,classNotFound, 不是少 jar 包,那就是 jar 包冲突,查看 flume 安装目录下 lib 下面查看是有 guava 这个包的:
排除少包 jar 包的问题,那就是 jar 包冲突,在查看,本地环境 hadoop 目录下 lib 中也是有这个 guava 这个包:
显然是二者版本不一致导致的
问题解决:
找到原因之后,那就有解决办法了
将原有的 flume 中的低版本的 guava 包移除,然后拷贝 hadoop/lib 目录下的高版本的 jar 包到 flume/lib 中:
完成上述两步操作之后,然后重新启动 flume,报错消失