HDFS 接收器的小文件太多 Flume
Too many small files HDFS Sink 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。并已尝试滚动大小、计数和时基,但 none 正在按预期工作。它在 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
请协助解决给定的问题。我正在使用 flume 1.6.0
~谢谢
您现在正在为每 1000 个项目滚动文件。您可以尝试以下两种方法之一。
- 尝试将
hdfs.rollCount
增加到更高的值,该值决定每个滚动文件中包含的事件数。
- 删除
hdfs.rollCount
并将 hdfs.rollInterval
设置为您要滚动文件的时间间隔。说 hdfs.rollInterval
= 600 每 10 分钟滚动一次文件。
有关详细信息,请参阅 Flume Documentation
我提供的配置都是正确的。这种行为背后的原因是 HDFS。我有 2 个数据节点,其中一个已关闭。因此,文件没有达到最低要求的复制。在 Flume 日志中也可以看到以下警告消息:
"Block Under-replication detected. Rotating file."
要解决此问题,可以选择以下任一解决方案:-
- 向上数据节点实现所需的块复制,或者
- 相应地设置 属性
hdfs.minBlockReplicas
。
~谢谢
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。并已尝试滚动大小、计数和时基,但 none 正在按预期工作。它在 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
请协助解决给定的问题。我正在使用 flume 1.6.0
~谢谢
您现在正在为每 1000 个项目滚动文件。您可以尝试以下两种方法之一。
- 尝试将
hdfs.rollCount
增加到更高的值,该值决定每个滚动文件中包含的事件数。 - 删除
hdfs.rollCount
并将hdfs.rollInterval
设置为您要滚动文件的时间间隔。说hdfs.rollInterval
= 600 每 10 分钟滚动一次文件。
有关详细信息,请参阅 Flume Documentation
我提供的配置都是正确的。这种行为背后的原因是 HDFS。我有 2 个数据节点,其中一个已关闭。因此,文件没有达到最低要求的复制。在 Flume 日志中也可以看到以下警告消息:
"Block Under-replication detected. Rotating file."
要解决此问题,可以选择以下任一解决方案:-
- 向上数据节点实现所需的块复制,或者
- 相应地设置 属性
hdfs.minBlockReplicas
。
~谢谢