我正在使用 flume spooldir 将文件放入HDFS,但我在HDFS中收到了这么多小文件。我想过使用批量大小和滚动间隔,但我不想依赖于大小和间隔。所以我决定一次推送一个文件在flume spooldir中。我怎么能这样做?
答案 0 :(得分:0)
根据https://flume.apache.org/FlumeUserGuide.html#spooling-directory-source,如果设置a1.sources.src-1.fileHeader = true
,则可以在HDFS接收器中指定任何标头(例如文件名标头)(请参阅转义序列说明中的%{host}
在https://flume.apache.org/FlumeUserGuide.html#hdfs-sink。
编辑: 对于示例配置,您可以尝试以下操作:
a1.sources = r1
a1.sources.r1.type = spooldir
a1.sources.r1.channels = c1
a1.sources.r1.spoolDir = /flumespool
a1.sources.r1.basenameHeader = true
a1.channels = c1
a1.channels.c1.type = memory
a1.sinks = k1
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flumeout/%{basename}
a1.sinks.k1.hdfs.fileType = DataStream