太多的小文件HDFS Sink Flume

时间:2016-03-05 14:14:38

标签: hadoop hdfs flume

agent.sinks=hpd
agent.sinks.hpd.type=hdfs
agent.sinks.hpd.channel=memoryChannel
agent.sinks.hpd.hdfs.path=hdfs://master:9000/user/hduser/gde
agent.sinks.hpd.hdfs.fileType=DataStream
agent.sinks.hpd.hdfs.writeFormat=Text
agent.sinks.hpd.hdfs.rollSize=0
agent.sinks.hpd.hdfs.batchSize=1000
agent.sinks.hpd.hdfs.fileSuffix=.i  
agent.sinks.hpd.hdfs.rollCount=1000
agent.sinks.hpd.hdfs.rollInterval=0

我正在尝试使用HDFS Sink将事件写入HDFS。并尝试过大小​​,计数和时间基础滚动,但没有一个按预期工作。它在HDFS中生成太多小文件,如:

-rw-r--r--   2 hduser supergroup      11617 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832879.i
-rw-r--r--   2 hduser supergroup       1381 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832880.i
-rw-r--r--   2 hduser supergroup        553 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832881.i
-rw-r--r--   2 hduser supergroup       2212 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832882.i
-rw-r--r--   2 hduser supergroup       1379 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832883.i
-rw-r--r--   2 hduser supergroup       2762 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832884.i.tmp

请协助解决给定问题。我正在使用水槽1.6.0

〜感谢

2 个答案:

答案 0 :(得分:0)

您现在正在为每1000个项目滚动文件。您可以尝试以下两种方法之一。

  1. 尝试将hdfs.rollCount增加到更高的值,此值决定每个已滚动文件中包含的事件数。
  2. 删除hdfs.rollCount并将hdfs.rollInterval设置为您要滚动文件的间隔。假设hdfs.rollInterval = 600每10分钟滚动一次文件。
  3. 有关更多信息,请参阅Flume Documentation

答案 1 :(得分:0)

我提供的配置都是正确的。这种行为背后的原因是HDFS。我有2个数据节点,其中一个节点已关闭。因此,文件未达到最低要求的复制。在Flume日志中,我们也可以看到以下警告信息:

  

“检测到块复制不足。旋转文件。”

要解决此问题,可以选择以下任何解决方案: -

  • 向上数据节点以实现所需的块复制,或
  • 相应地设置属性hdfs.minBlockReplicas

〜谢谢