由于jar冲突,无法运行flume

z9smfwbn  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(572)

我已经手动安装了flume和hadoop(我是说,不是cdh),我正在尝试运行cloudera的twitter示例。
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 分配给类路径 flume-sources-1.0-SNAPSHOT.jar 它包含twitter源的定义。结果输出为:

(...) [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)

冲突源于 FilterQuery 类,该类在flume lib的其他位置定义,并且不包含 setIncludeEntities 方法。对我来说,包含这个类的文件是 twitter4j-stream-3.0.3.jar 我不能像这里建议的那样从类路径中排除这个文件。

drnojrws

drnojrws1#

您需要从git:httpshttp://github.com/cloudera/cdh-twitter-example
安装maven,然后下载cdh-twitter示例的存储库。
解压缩,然后在内部执行(如上所述):
$cdFlume源
$mvn套餐
$cd。。
这个问题发生在twitter4j版本从2.2.6升级到3.x时,他们删除了方法setincludeentities,jar不是最新的。
ps:不要下载预建版本,它仍然是旧的。

zphenhs4

zphenhs42#

只需重命名所有twitter4j stream*jar文件并重新运行flume。它会很有魅力的。)

jhkqcmku

jhkqcmku3#

我也遇到了同样的问题,最后我按照以下步骤解决了:
首先,我重命名了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.)

看完这一页(https://twittercommunity.com/t/twitter-streaming-api-not-working-with-twitter4j-and-apache-flume/66612/11)最后我解决了下载twitter4j的新版本(在页面中有一个链接)。可能不是最好的解决办法,但对我来说很有效。

xyhw6mcr

xyhw6mcr4#

我相信这次经历对你来说是相当令人沮丧的,对我来说是肯定的。主要问题是,flume-sources-1.0-snapshot.jar和twitter4j-stream-3.0.3.jar文件都包含相同的filterquery.class。这就是在日志文件中生成冲突消息的原因。
我不是java或者大数据Maven,但是我可以给你一个解决这个问题的替代方案。从这里下载twitter4j-stream-2.6.6.jar或更低版本,并替换twitter4j-stream-3.0.3.jar。所有的3.x.x都使用这个类。更换后,一切正常。但是在下载了大量tweet之后,你可能会得到一些堆错误。请谷歌解决方案,因为它是解决了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。这些文件中与版本相关的任何不匹配也会产生问题。

jfewjypa

jfewjypa5#

正如文章中所建议的,有问题的文件也可以是search-contrib-1.0.0-jar-with-dependencies.jar。

相关问题