我有一个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个就行了,但似乎不行。
2条答案
按热度按时间r8uurelv1#
在您的答案中,当您将rollcount设置为0时,flume将根据隐式默认值以30秒的间隔滚动文件。也许这就是为什么你要买大号的。
但是如果您真的想控制文件大小,只需将rollsize设置为某个值,并将其他roll值设置为0。即
batchsize只是您希望从通道中获得多少吞吐量,并不表示文件最终会有多大。
fquxozlt2#
我通过将rollcount更改为0,transactioncapactity更改为1000(使其小于容量)并将batchsize保留为10000来解决这个问题。我认为这是一个好办法,因为现在它正在向每个文件写入大量数据(准确地说是64mb)。