使用Flink处理Twitter数据时的依赖性问题

时间:2017-10-03 11:37:33

标签: maven twitter apache-flink

我正在尝试使用官方文档here使用Apache-Flink流连接到Twitter。

虽然我能够使用api成功解析示例TwitterExampleData,但是当我尝试使用相同的方法连接实际数据时,我得到了ClassNotFoundException。

java.lang.NoClassDefFoundError: org/apache/flink/twitter/shaded/com/google/common/base/Preconditions
at com.twitter.hbc.core.endpoint.BaseEndpoint.<init>(BaseEndpoint.java:37)
at com.twitter.hbc.core.endpoint.DefaultStreamingEndpoint.<init>(DefaultStreamingEndpoint.java:35)
at com.twitter.hbc.core.endpoint.StatusesSampleEndpoint.<init>(StatusesSampleEndpoint.java:24)
at org.apache.flink.streaming.connectors.twitter.TwitterSource$SampleStatusesEndpoint.createEndpoint(TwitterSource.java:208)
at org.apache.flink.streaming.connectors.twitter.TwitterSource.run(TwitterSource.java:124)
at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:87)
at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:55)

根据我的理解,这在编译时可用,在运行时丢失,如何在运行时提供此功能。

以下是我正在使用的命令:

./flink run /path/to/jar/target/Twitter.jar --output file:///tmp/b.out --twitter-source.consumerKey  <my-consumer-key> --twitter-source.consumerSecret <My consumer secret> --twitter-source.tokenSecret <my token secret> --twitter-source.token <my source token>

注意:

  1. 我正在使用使用mvn clean package
  2. 创建的Fat jar
  3. 我的访问令牌有效,我也验证了相同

1 个答案:

答案 0 :(得分:2)

你偶然发现了twitter示例的构建过程中的一个错误,导致源的依赖性被排除在外。我提交了JIRA。在此期间,要运行该示例,您必须手动构建twitter源(在flink / flink-connectors / flink-connectors-twitter下)并将生成的jar复制到/ lib文件夹中。

在修复程序到达之前,在flink-examples-streaming的maven-shaded-plugin配置中添加以下行。

<include>org/apache/flink/twitter/shaded/com/google/common/**</include>