在以下情况下,我想请求您的帮助。
我目前正在使用 Cloudera CDH 5.1.2,并尝试使用 Flume 收集 Twitter 数据,如下面的 porsts (Cloudera) 中所述:
- http://blog.cloudera.com/blog/2012/10/analyzing-twitter-data-with-hadoop-part-2-gathering-data-with-flume/
- github.com/cloudera/cdh-twitter-example
在更新 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 查询 = 新的 FilterQuery();
...
if (languages.length != 0) {
query.language(languages);
}
我正在尝试使用 twitter4j-stream 版本 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):
无法启动 EventDrivenSourceRunner:{ source:com.cloudera.flume.source.TwitterSource{name:Twitter,state:IDLE} } - 出现异常。java.lang.NoSuchMethodError: twitter4j.FilterQuery.language([Ljava/lang/String;)Ltwitter4j/FilterQuery; 在 com.cloudera.flume.source.TwitterSource.start(TwitterSource.java:165) 在 org.apache.flume.source.EventDrivenSourceRunner.start(EventDrivenSourceRunner.java:44) 在 org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable .run(LifecycleSupervisor.java:251) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) 在 java.util。 concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask。
我查了一下,这个版本的 twitter4j-stream 包含语言方法:
- github.com/yusuke/twitter4j/blob/3.0.6/twitter4j-stream/src/main/java/twitter4j/FilterQuery.java
我究竟做错了什么?
提前致谢,
彼得