在下面的情况下,我想请你帮忙。
我目前正在使用Cloudera CDH 5.1.2,我试图使用Flume收集Twitter数据,如下所示(Cloudera):
在更新了pom.xml中的版本之后,我下载了这个源代码,并重新构建了这个水槽源:
<flume.version>1.5.0-cdh5.1.2</flume.version>
<hadoop.version>2.3.0-cdh5.1.2</hadoop.version>效果很好。
在此之后,我想添加一个“语言”过滤器,只捕获特定语言的tweet。为此,我修改了TwitterSource.java以某种方式调用FilterQuery.language方法,如下所示:
FilterQuery查询=新的FilterQuery(); ..。 if (languages.length != 0) { Query.language(语言); }
我正在尝试使用twitter4j流版本3.0.6。我在pom.xml中更新了它:
<!-- For the Twitter API -->
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-stream</artifactId>
<version>3.0.6</version>
</dependency>通过这些设置,我重新构建了jar (mvn包)。
启动代理时,会得到以下异常(NoSuchMethodError):
无法启动source:com.cloudera.flume.source.TwitterSource{name:Twitter,:{EventDrivenSourceRunner状态:空闲}-异常如下。twitter4j.FilterQuery.language([Ljava/lang/String;)Ltwitter4j/FilterQuery;:java.lang.NoSuchMethodError在com.cloudera.flume.source.TwitterSource.start(TwitterSource.java:165) at org.apache.flume.source.EventDrivenSourceRunner.start(EventDrivenSourceRunner.java:44) at org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:251) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) at java.util。concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
我检查了一下,这个版本的twitter4j流包含了语言方法:
我做错了什么?
提前谢谢你,
彼得
发布于 2015-01-27 22:31:04
最后,我设法解决了这个问题。因此,这是解决任何面临同样问题的人的办法。
首先(在上面的情况下,在最初的文章中),我将生成的jar放置到/var/lib/flume-ng/plugins.d/twitter-streaming/lib/中,并将其设置在Cloudera配置中以使用这个位置。
在这种情况下,CM将这个目录放置在运行程序文件中的类路径的和路径中(在parcel目录之后)。因此,类路径中的目录顺序如下所示:
/opt/cloudera/parcels/CDH-5.1.2-1.cdh5.1.2.p0.3/lib/flume-ng/lib/*/var/lib/flume-ng/plugins.d/twitter-streaming/lib/*不幸的是,包裹目录中有一个twitter4j流-3.0.3.jar和twitter4j-core-3.0.3.jar,flume试图使用它而不是3.0.6,而在那个版本中,FilterQuery.language显然不存在。
所以我刚刚从包裹目录中删除了那些罐子,现在它运行良好。
发布于 2015-01-12 15:02:51
我和cdh3试过这个,它对我很好。我注意到的一件事是,系统时间应该设置为当前时间。在您的例子中,我认为它是在Language类中寻找FilterQuery方法。
https://stackoverflow.com/questions/27901714
复制相似问题