水槽 - TwitterSource语言过滤器(Flume - TwitterSource lan

2019-10-21 14:36发布

我想问一下你的帮助,在下面的情况。

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

  • 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();
...
如果(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):

无法启动EventDrivenSourceRunner:{来源:com.cloudera.flume.source.TwitterSource {名称:推特,状态:IDLE}} - 异常如下。 java.lang.NoSuchMethodError:twitter4j.FilterQuery.language([Ljava /郎/字符串;)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.run(ScheduledThreadPoolExecutor.java:293)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145 )在java.util.concurrent.ThreadPoolExecutor中$ Worker.run(ThreadPoolExecutor.java:615)在java.lang.Thread.run(Thread.java:745)

我查了一下,这个版本twitter4j流的包含语言的方法:

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

我究竟做错了什么?

提前致谢,

彼得

Answer 1:

最后,我设法解决这个问题。 因此,这里是面临着同样的问题的解决方案,没有人在那里。

首先(在原来的职位上面的情况)我把我生成的罐子/var/lib/flume-ng/plugins.d/twitter-streaming/lib/ ,并将其设置在Cloudera的经理配置到使用此位置。

在这种情况下,CM这个目录放置在和(后包裹目录)在浇道文件类路径的。 因此,在类路径中的目录顺序是这样的:

  • /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在包裹目录,水槽试图用这个来代替3.0.6,并在该版本FilterQuery.language显然没有按” Ť存在。

所以我只是删除从包裹目录的罐子,现在工作得很好。



Answer 2:

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



文章来源: Flume - TwitterSource language filter