首页 文章

Flume不写入HDFS,除非被杀死

提问于
浏览
6

我按照link设置了TwitterSource和HDFS接收器 .

用于启动代理的命令:

bin/flume-ng agent -n TwitterAgent -c conf -f conf/flume-conf.properties -Dflume.root.logger=DEBUG,console

我成功地做到了这一点,但现在有一个问题 . 在停止水槽剂之前,输出不会被写入 . 一旦我杀死了我的水槽代理,就会写入HDFS .

我这里有两个问题:

1)如何阻止水槽剂 - 除了做CTRL C之外还有什么办法吗?

2)我可以随时随地将水槽代理写入HDFS,而不必杀死代理 .

注意:在终止进程后,写入的文件的扩展名为.tmp . 这是预期的吗?

EDIT:

TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

2 回答

  • 7

    写了多少数据?我打赌它不写,因为你没有收集足够的东西来触发使用默认配置参数刷新HDFS . 有一个number of ways to configure the HDFS sink,以便以可预测的方式刷新 . 您可以设置它以便在一系列事件( hdfs.rollCount ),间隔( hdfs.rollInterval )或大小( hdfs.rollSize )上刷新 . 发生的事情是当你杀死代理时,它会清理当前正在做的事情并冲洗......所以基本上你是通过杀死它来强迫它 .

    您也可以尝试降低 hdfs.batchSize .

    请记住,Hadoop喜欢更大的文件 . 一般来说,你应该尽量避免使用大量的小文件 . 所以在这里经常滚动时要小心 .


    像你一样在前台运行它,ctrl c或kill是阻止它的唯一真正方法 . 在 生产环境 中,您应该使用具有启动/停止/重启的init脚本 .

  • 1

    谢谢唐纳德和普拉文:

    我可以通过在我的flume-conf文件中设置以下内容来解决问题

    TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
    TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
    TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000
    

    并删除此条目

    TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
    

    现在,水槽正在写入HDFS .

相关问题