首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水槽- TwitterSource语言过滤器

水槽- TwitterSource语言过滤器
EN

Stack Overflow用户
提问于 2015-01-12 12:11:07
回答 2查看 1K关注 0票数 1

在下面的情况下,我想请你帮忙。

我目前正在使用Cloudera CDH 5.1.2,我试图使用Flume收集Twitter数据,如下所示(Cloudera):

  • http://blog.cloudera.com/blog/2012/10/analyzing-twitter-data-with-hadoop-part-2-gathering-data-with-flume/
  • Github.com/cloudera/cdh-twitter-示例

在更新了pom.xml中的版本之后,我下载了这个源代码,并重新构建了这个水槽源:

代码语言:javascript
复制
<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中更新了它:

代码语言:javascript
复制
<!-- 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流包含了语言方法:

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

我做错了什么?

提前谢谢你,

彼得

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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显然不存在。

所以我刚刚从包裹目录中删除了那些罐子,现在它运行良好。

票数 1
EN

Stack Overflow用户

发布于 2015-01-12 15:02:51

我和cdh3试过这个,它对我很好。我注意到的一件事是,系统时间应该设置为当前时间。在您的例子中,我认为它是在Language类中寻找FilterQuery方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27901714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档