将flume管道创建的文件大小增加到hadoop中

wr98u20j  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(331)

我有一个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

我省略了私人领域。这是将tweets下载到apachehadoop中。然而,在创建另一个tweet文件之前,每个tweet文件的大小只有30-60 kb。我怎样才能创建更大的文件,这样我就不会有太多的小文本文件,而是只有几个大文件(比如说,每个文件中有10000条tweet)?
我以为10000个就行了,但似乎不行。

r8uurelv

r8uurelv1#

在您的答案中,当您将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

batchsize只是您希望从通道中获得多少吞吐量,并不表示文件最终会有多大。

fquxozlt

fquxozlt2#

我通过将rollcount更改为0,transactioncapactity更改为1000(使其小于容量)并将batchsize保留为10000来解决这个问题。我认为这是一个好办法,因为现在它正在向每个文件写入大量数据(准确地说是64mb)。

相关问题