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

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

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

  1. TwitterAgent.sources = Twitter
  2. TwitterAgent.channels = MemChannel
  3. TwitterAgent.sinks = HDFS
  4. TwitterAgent.sources.Twitter.type =
  5. TwitterAgent.sources.Twitter.channels = MemChannel
  6. TwitterAgent.sources.Twitter.consumerKey =
  7. TwitterAgent.sources.Twitter.consumerSecret =
  8. TwitterAgent.sources.Twitter.accessToken =
  9. TwitterAgent.sources.Twitter.accessTokenSecret =
  10. TwitterAgent.sources.Twitter.keywords =
  11. TwitterAgent.sinks.HDFS.channel = MemChannel
  12. TwitterAgent.sinks.HDFS.type = hdfs
  13. TwitterAgent.sinks.HDFS.hdfs.path =
  14. TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
  15. TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
  16. TwitterAgent.sinks.HDFS.hdfs.batchSize = 10000
  17. TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
  18. TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000
  19. TwitterAgent.channels.MemChannel.type = memory
  20. TwitterAgent.channels.MemChannel.capacity = 10000
  21. TwitterAgent.channels.MemChannel.transactionCapacity = 10000

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

r8uurelv

r8uurelv1#

在您的答案中,当您将rollcount设置为0时,flume将根据隐式默认值以30秒的间隔滚动文件。也许这就是为什么你要买大号的。

  1. hdfs.rollInterval 30 <-- default
  2. hdfs.rollSize 0
  3. hdfs.rollCount 0
  4. hdfs.batchSize 10000

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

  1. hdfs.rollInterval 0
  2. hdfs.rollSize some_number_of_bytes
  3. hdfs.rollCount 0
  4. hdfs.batchSize 10000

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

fquxozlt

fquxozlt2#

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

相关问题