2015-01-12 25 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方法。