将Flume管道创建的文件大小增加到Hadoop中

时间:2013-08-05 01:57:31

标签: hadoop twitter4j flume

我有一个Flume的配置文件,如下所示:

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

TwitterAgent.sources.Twitter.type = 
TwitterAgent.sources.Twitter.channels = MemChannel

TwitterAgent.sources.Twitter.consumerKey = 
TwitterAgent.sources.Twitter.consumerSecret = 
TwitterAgent.sources.Twitter.accessToken = 
TwitterAgent.sources.Twitter.accessTokenSecret =  

TwitterAgent.sources.Twitter.keywords = 

TwitterAgent.sinks.HDFS.channel = MemChannel
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path =
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.batchSize = 10000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000

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

我省略了私人字段。这是将推文下载到Apache Hadoop中。但是,在创建另一个推文文件之前,每个推文文件只能达到大约30 - 60 Kb的文件。我怎样才能创建更大的文件,所以我最终得不到大量的小文本文件,而只是只有几个大文件(比方说,每个文件中有10000条推文)?

我认为10000的rollCount会这样做,但似乎没有。

2 个答案:

答案 0 :(得分:3)

我通过将rollCount更改为0,将transactionCapactity更改为1000(以使其小于容量)并将batchSize保留为10000来解决此问题。我认为这样做很有效,因为现在它正在写大量的每个文件(准确地说是64MB)。

答案 1 :(得分:0)

在你的回答中,当你设置rollCount = 0时,flume将以30秒的间隔滚动文件,基于隐式默认值。也许这就是你获得大尺寸的原因。

hdfs.rollInterval   30  <-- default
hdfs.rollSize   0   
hdfs.rollCount  0   
hdfs.batchSize  10000

但是如果你真的想要控制文件大小,只需将rollSize设置为某个值并将其他滚动值设置为0.即

hdfs.rollInterval   0
hdfs.rollSize   some_number_of_bytes    
hdfs.rollCount  0   
hdfs.batchSize  10000

hdfs.batchSize是您要从频道中提取的吞吐量,并不表示文件最终会有多大。