我手动安装了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从类路径中排除该文件。
答案 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)
我遇到了同样的问题,最后我按照以下步骤解决了问题:
这解决了错误,但是当它试图建立连接时,我得到错误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.)