当前位置: 首页 > 知识库问答 >
问题:

Cloudera 5.4.2:使用Flume和Twitter流媒体时,Avro块大小无效或过大

苏浩瀚
2023-03-14

当我尝试Cloudera 5.4.2时,有一个小问题。基于这篇文章

Apache Flume-获取Twitter数据http://www.tutorialspoint.com/apache_flume/fetching_twitter_data.htm

它尝试使用Flume和twitter流来获取推文,以进行数据分析。所有的事情都很开心,创建Twitter应用程序,在HDFS上创建目录,配置Flume,然后开始获取数据,在Twitter上创建模式。

Twitter流将推文转换为Avro格式,并将Avro事件发送到下行HDFS接收器,当Avro支持的Hive表加载数据时,我收到错误消息说“Avro块大小无效或太大”。

哦,什么是 avro 块和块大小的限制?我可以更改它吗?根据此消息,这意味着什么?是文件的错吗?是某些记录的错吗?如果Twitter的流媒体遇到错误数据,它应该减少核心。如果将推文转换为 Avro 格式很好,那么反过来,应该正确读取 Avro 数据,对吧?

我也尝试avro-tools-1.7.7.jar

java -jar avro-tools-1.7.7.jar tojson FlumeData.1458090051232

{"id":"710300089206611968","user_friends_count":{"int":1527},"user_location":{"string":"1633"},"user_description":{"string":"Steady Building an Empire..... #UGA"},"user_statuses_count":{"int":44471},"user_followers_count":{"int":2170},"user_name":{"string":"Esquire Shakur"},"user_screen_name":{"string":"Esquire_Bowtie"},"created_at":{"string":"2016-03-16T23:01:52Z"},"text":{"string":"RT @ugaunion: .@ugasga is hosting a debate between the three SGA executive tickets. Learn more about their plans to serve you https://t.co/…"},"retweet_count":{"long":0},"retweeted":{"boolean":true},"in_reply_to_user_id":{"long":-1},"source":{"string":"<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>"},"in_reply_to_status_id":{"long":-1},"media_url_https":null,"expanded_url":null}

{"id":"710300089198088196","user_friends_count":{"int":100},"user_location":{"string":"DM開放してます(`・ω・´)"},"user_description":{"string":"Exception in thread "main" org.apache.avro.AvroRuntimeException: java.io.IOException: Block size invalid or too large for this implementation: -40

at org.apache.avro.file.DataFileStream.hasNextBlock(DataFileStream.java:275)

at org.apache.avro.file.DataFileStream.hasNext(DataFileStream.java:197)
at org.apache.avro.tool.DataFileReadTool.run(DataFileReadTool.java:77)
at org.apache.avro.tool.Main.run(Main.java:84)
at org.apache.avro.tool.Main.main(Main.java:73)
Caused by: java.io.IOException: Block size invalid or too large for this implementation: -40
at org.apache.avro.file.DataFileStream.hasNextBlock(DataFileStream.java:266)
... 4 more

同样的问题。我搜索了很多,根本没有答案。

如果你也遇到过这个问题,有人能给我一个解决方案吗?或者如果你完全理解Avro的东西或下面的推特流,有人能帮忙提供线索。

这确实是一个令人不安的问题。想想吧。

共有1个答案

丘普松
2023-03-14

使用Cloudera TwitterSource

否则会遇到这个问题。

无法将twitter avro数据正确加载到配置单元表中

在文章中:这是apache Twitter Source

TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
Twitter 1% Firehose Source
This source is highly experimental. It connects to the 1% sample Twitter Firehose using streaming API and continuously downloads tweets, converts them to Avro format, and sends Avro events to a downstream Flume sink.

但应该是cloudera Twitter来源:

https://blog . cloud era . com/blog/2012/09/analyzing-Twitter-data-with-Hadoop/

http://blog.cloudera.com/blog/2012/10/analyzing-twitter-data-with-hadoop-part-2-gathering-data-with-flume/

http://blog.cloudera.com/blog/2012/11/analyzing-twitter-data-with-hadoop-part-3-querying-semi-structured-data-with-hive/

TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource

而且不只是下载预构建jar,因为我们的Cloud dera版本是5.4.2,否则你会得到这个错误:

由于JAR冲突,无法运行Flume

您应该使用maven来编译它

https://github.com/cloudera/cdh-twitter-example

下载并编译:flume-sources.1.0-SNAPSHOT.jar.这个jar包含Cloudera TwitterSource的实现。

步骤:

wget https://github . com/cloud era/CDH-Twitter-example/archive/master . zip

sudo yum安装apache-maven放入水槽插件目录:

/var/lib/flume-ng/plugins.d/twitter-streaming/lib/flume-sources-1.0-SNAPSHOT.jar 

MVN 封装

注意:百胜更新到最新版本,否则编译(mvn包)会因安全问题而失败。

 类似资料:
  • 我正在使用Flume 1.6.0-cdh5.9.1使用Twitter源流式传输推文。 配置文件如下所示: 对于Cloudera. jar依赖项,我使用Maven使用以下依赖项构建了: 现在,当我运行Flume Agent时,它成功启动,连接到Twitter,但在最后一行(接收状态流)后停止: 在最后一行之后什么都没有发生。它不会终止,不会流式传输任何东西。我看了一下HDFS位置,那里没有创建任何东

  • 目前我正在使用Streaming API(https://stream.twitter.com/1/statuses/filter.json)。 连接成功后,我会将服务器上的所有推文记录到数据库中。只有在运行了几个小时或几天没有问题后,问题才会出现,然后无法检索更多推文。如果我重新启动客户端,处理会恢复正常,一切正常,直到下一次挂起。

  • 我让用户编写AVRO文件,我想使用Flume将所有这些文件移动到使用Flume的HDFS中。因此,我以后可以使用Hive或Pig来查询/分析数据。 在客户端上,我安装了水槽,并有一个SpoolDir源和AVRO接收器,如下所示: 在hadoop集群上,我有一个AVRO源和HDFS接收器: 问题是HDFS上的文件不是有效的AVRO文件!我正在使用色调UI检查文件是否是有效的AVRO文件。如果我将我在

  • 目前我有 如何同时关注一些用户?

  • 我正在尝试运行官方示例,该示例展示了如何使用Apache Flink Streaming与Twitter:https://github.com/apache/flink/tree/master/flink-streaming-examples/src/main/java/org/apache/flink/streaming/examples/twitter 如果我不提供到属性的路径。文件,推特流数

  • 我在Ubuntu 14.04上使用Hadoop-1.2.1 我正在尝试使用Flume-1.6.0将数据从twitter流式传输到HDFS。我已经下载了Flume-sources-1.0-SNAPSHOT。jar并将其包含在flume/lib文件夹中。我已经设置了flume-sources-1.0-SNAPSHOT的路径。jar在conf/FLUME环境中显示为FLUME_CLASSPATH。这是我