1

我正在做一些实验来感受水槽。下面是我的配置文件。

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 文件的每一行,它正在 HDFS /tflume 目录中创建新文件。为什么这样 ?

我期待将水槽附加到我现有的文件中,同时,通过查看日志,写入 hdfs 的数据也花费了太长时间。

感谢您提前回复。

4

1 回答 1

2

这是使用 HDFS 作为接收器时臭名昭著的“许多小型 HDFS 文件”问题。

通过确保至少在 flume.conf 中为 HDFS 接收器设置了属性 rollSize、rollCount、rollInterval 和 idleTimeout,这个问题很容易解决。如果你不设置它们,Flume 默认为非常低的值。大多数情况下,rollSize 的默认值(仅 1024 kb !!)将规定在 1 个 HDFS 文件中仅记录 3 到 4 条日志记录。可以通过将默认值设置为 0 来方便地覆盖默认值,但是如果您忘记了这一点,默认值将导致一些古怪的行为。

#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
于 2015-01-14T09:16:50.333 回答