2015-01-12 23 views
1

我想问你的帮助在下面的情况。Flume - Twitter源语言筛选器

我目前使用的Cloudera CDH 5.1.2,我试图,因为它是在以下描述porsts收集使用水槽微数据(Cloudera的):

我下载源和在pom.xml中更新版本之后重建水槽来源:

<flume.version>1.5.0-cdh5.1.2</flume.version> 
<hadoop.version>2.3.0-cdh5.1.2</hadoop.version> 

它工作完美。

之后,我想添加一个“语言”过滤器,只捕获特定语言的推文。对于这一点,我修改了TwitterSource.java以某种方式调用FilterQuery.language方法是这样的:

FilterQuery query = new FilterQuery();
...
if (languages.length != 0) {
query.language(languages);
}

我试图使用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 package)。

当我开始我的经纪人,我得到下面的异常(的NoSuchMethodError):

Unable to start EventDrivenSourceRunner: { source:com.cloudera.flume.source.TwitterSource{name:Twitter,state:IDLE} } - Exception follows. java.lang.NoSuchMethodError: twitter4j.FilterQuery.language([Ljava/lang/String;)Ltwitter4j/FilterQuery; at 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流包含的语言方法:

  • github.com /yusuke/twitter4j/blob/3.0.6/twitter4j-stream/src/main/java/twitter4j/FilterQuery.java

我在做什么错?

由于提前,

彼得

回答

1

最后我设法解决了这个问题。所以这里的解决方案面向同样的问题。

首先(在上述情况下,原始帖子中)我将生成的jar放置到/var/lib/flume-ng/plugins.d/twitter-streaming/lib/,并在Cloudera Manager配置中将其设置为使用此位置。

在这种情况下,CM将此目录放置在runner文件中的类路径中(在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,芯 - 3.0.3.jar在parcel目录中,并且flume试图使用它来代替3.0.6,并且在那个版本中显然不存在FilterQuery.language

所以我刚从地块目录中删除了这些罐子,现在它工作正常。

0

我试图与cdh3它工作得很好了我。我注意到的一件事是系统时间应该设置为当前时间。在你的情况下,我认为它正在寻找FilterQuery类中的Language方法。