Flume Twitter Stream在HDFS中滚动小文件

时间:2014-09-09 13:21:16

标签: hadoop hdfs twitter4j flume

我想我已经尝试过改变配置文件的每一个组合。我也看到某处可能是因为我的复制因子为3所以我把它改为1.我在AWS上使用cloudera manager。以下是我的配置文件,任何想法?

在HDFS中,文件大小都在20kb以下,试图获得至少40-50mb。有趣的是,相同的配置文件正在我练习的虚拟机上编写~60mb文件(预安装的hadoop +工具)。请参阅下面的配置文件,任何想法?

# The configuration file needs to define the sources, 
# the channels and the sinks.
# Sources, channels and sinks are defined per agent, 
# in this case called 'TwitterAgent'

TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS

TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sources.Twitter.consumerKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.consumerSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.accessToken = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
TwitterAgent.sources.Twitter.accessTokenSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.keywords = apple, grapes, fruits, strawberry, mango, pear
TwitterAgent.sinks.HDFS.channel = MemChannel
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://123.456.789.us-west-2.compute.amazonaws.com:8020/user/flume/tweets
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 0
TwitterAgent.sinks.HDFS.hdfs.batchSize = 100000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 0

TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 1000

3 个答案:

答案 0 :(得分:0)

如果rollIntervalbatchSizerollSize& rollCount不起作用,看起来仍然是hdfs.callTimeout

因为有人说减少复制因素可能是解决方案。

减少复制因子意味着减少hdfs操作时间,根据用户guideline,默认值callTimeout为10000毫秒。

其他线索

答案 1 :(得分:0)

所以我终于弄明白了这个问题。 (注意我正在运行单节点测试集群)。 stackoverflow中的一个解决方案是将dfs.replication因子设置为1,但我没有解决问题。

由于某些原因,发生的事情是我的水槽剂,配置不匹配。 HDFS接收器有一个名为minBlockReplicas的参数,它通知它需要多少块副本,如果没有指定,它会从默认的HDFS配置文件(我认为我设置为1)中提取该paramaneter )。它似乎为dfs.replicationdfs.namennode.replication.min获得了不同的值。

我通过使用

直接修改了我的水槽文件
TwitterAgent.sinks.HDFS.hdfs.minBlockReplicas = 1

希望这会有所帮助。

答案 2 :(得分:-1)

是的,通过添加此行,它解决了我在使用flume时在HDFS上创建的小型多个文件

a1.sinks.HDFS.hdfs.minBlockReplicas = 1