apacheflume为每行写入创建新文件

x9ybnkn6  于 2021-06-04  发布在  Flume
关注(0)|答案(1)|浏览(426)

我在做一些实验来摸摸Flume。下面是我的配置文件。

agent.channels.memory-channel.type = memory

agent.sources.tail-source.type = exec
agent.sources.tail-source.command = tail -F /root/test.txt
agent.sources.tail-source.channels = memory-channel

agent.sinks.hdfs-sink.channel = memory-channel
agent.sinks.hdfs-sink.type = hdfs
agent.sinks.hdfs-sink.hdfs.path = hdfs://10.0.7.111/tflume
agent.sinks.hdfs-sink.hdfs.fileType = DataStream

agent.channels = memory-channel
agent.sources = tail-source
agent.sinks = hdfs-sink

对于使用vi命令添加到test.txt文件的每一行,当查看flume日志时,它正在hdfs/tflume目录中创建新文件。为什么会这样?
我希望flume附加到我现有的文件中,同时,通过查看日志,向hdfs写入数据的时间也太长了。
感谢您提前回复。

tct7dpnv

tct7dpnv1#

这是臭名昭著的“许多小hdfs文件”的问题,而使用hdfs作为接收器。
通过确保至少为flume.conf中的hdfs sink设置了rollsize、rollcount、rollinterval和idletimeout属性,可以很容易地解决这个问题。如果不将其设置为非常低的值,Flume默认值。大多数情况下,rollsize的默认值(只有1024KB!!)将指示在1个hdfs文件中只记录3到4个日志记录。通过将其值设置为0,可以方便地覆盖默认值,但是如果您忘记了这一点,则默认值将导致某些eractic行为。


# ALWAYS PROVIDE THESE OVERRIDES OF THE DEFAULTS !!

agent3.sinks.snk1.hdfs.rollSize = 0
agent3.sinks.snk1.hdfs.rollCount = 0
agent3.sinks.snk1.hdfs.rollInterval = 0
agent3.sinks.snk1.hdfs.idleTimeout = 0

# SET TO YOUR NEEDS

# rollCount writes to hdfs every 20 lines

agent3.sinks.snk1.hdfs.rollCount = 20

相关问题