0

我有一个 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 条推文)?

我认为 rollCount 为 10000 会做到这一点,但似乎没有。

4

2 回答 2

3

我通过将 rollCount 更改为 0,将 transactionCapactity 更改为 1000(以使其小于容量)并将 batchSize 设置为 10000 来解决这个问题。我认为这是在解决这个问题,因为现在它正在向每个文件写入大量数据(准确地说是64MB)。

于 2013-08-13T22:23:29.077 回答
0

在您的回答中,当您设置 rollCount=0 时,flume 将根据隐式默认值以 30 秒的间隔滚动文件。也许这就是为什么你得到一个大尺寸。

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

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

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

hdfs.batchSize 只是您想从通道中提取多少吞吐量,并不表示文件最终会有多大。

于 2015-11-06T03:27:53.080 回答