首页 文章

Apache Flume为每行写入创建新文件

提问于
浏览
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的数据也会花费很长时间 .

感谢提前回复 .

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
    

相关问题