由于JAR冲突,无法运行Flume

时间:2013-10-04 20:13:42

标签: java hadoop twitter4j flume

我手动安装了Flume和Hadoop(我的意思是,不是CDH),我正试图从Cloudera运行推特example

apache-flume-1.5.0-SNAPSHOT-bin目录中,我使用以下命令启动代理:

bin/flume-ng agent -c conf -f conf/twitter.conf -Dflume.root.logger=DEBUG,console -n TwitterAgent

我的conf/twitter.conf文件使用记录器作为接收器。 conf/flume-env.sh将包含twitter源定义的flume-sources-1.0-SNAPSHOT.jar分配给CLASSPATH。结果输出为:

(...) [ERROR org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:253)] Unable to start EventDrivenSourceRunner: { source:com.cloudera.flume.source.TwitterSource{name:Twitter,state:IDLE} } - Exception follows. java.lang.NoSuchMethodError:
twitter4j.FilterQuery.setIncludeEntities(Z)Ltwitter4j/FilterQuery;
at com.cloudera.flume.source.TwitterSource.start(TwitterSource.java:139)

冲突是由{​​{1}}类产生的,该类在水槽lib中的其他地方定义,并且不包含FilterQuery方法。对我来说,包含此类的文件是setIncludeEntities,我不能按照建议here从类路径中排除该文件。

5 个答案:

答案 0 :(得分:5)

我相信这段经历对你来说非常令人沮丧,对我来说肯定是这样。主要问题是,文件flume-sources-1.0-SNAPSHOT.jar和twitter4j-stream-3.0.3.jar都包含相同的FilterQuery.class。这就是在日志文件中生成冲突消息的原因。

我不是Java或大数据专家,但我可以为您解决此问题。从here下载Twitter4j-stream-2.6.6.jar或更低版本,并替换twitter4j-stream-3.0.3.jar。所有3.X.X都使用此类。更换后,一切都应该正常工作。但是在下载大量推文后你可能会遇到一些堆错误。请谷歌解决方案,因为它已在3.X.X文件中解决。

- 编辑 另外,请不要忘记下载并替换/ usr / lib / flume-ng文件夹中的所有twitter4j文件。即,twitter4j-media-support-2.2.6.jar,twitter4j-stream-2.2.6.jar和twitter4j-core-2.2.6.jar。与这些文件中的版本相关的任何不匹配也会产生问题。

答案 1 :(得分:1)

根据建议in the post,有问题的文件也可以是search-contrib-1.0.0-jar-with-dependencies.jar。

答案 2 :(得分:1)

您需要从git重新编译flume-sources-1.0-SNAPSHOT.jar:https://github.com/cloudera/cdh-twitter-example

安装Maven,然后下载cdh-twitter-example的存储库。

解压缩,然后在内部执行(如提到的那样):

  

$ cd flume-sources

     

$ mvn package

     

$ cd ..

当twitter4j版本从2.2.6更新到3.X时,发生了这个问题,他们删除了方法setIncludeEntities,并且JAR不是最新的。

PS:不要下载预建版本,它仍然是旧版本。

答案 3 :(得分:0)

只需重命名所有twitter4j-stream * jar文件并重新运行您的水槽。它将有魅力。 :)

答案 4 :(得分:0)

我遇到了同样的问题,最后我按照以下步骤解决了问题:

  • 首先我在jarx中重命名了所有jar文件:来自twitter4j-stream-3.0.3.jar - > twitter4j-stream-3.0.3.jarx,...

这解决了错误,但是当它试图建立连接时,我得到错误404:

(Twitter Stream consumer-1[Establishing connection]) 
[INFO - Twitter4j.internal.logging.SLF4JLogger.info(SLF4JLogger.java:83)] 404:
The URI requested is invalid or the resource requested, such as a user, does not exist.)