flume不写hdfs除非被杀死

hsgswve4  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(328)

我按照链接设置twittersource和hdfs sink。
用于启动代理的命令:

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

我成功地做到了这一点,但现在有一个问题。在停止flume代理之前,不会写入输出。一旦我杀了我的flume代理,它就会被写入hdfs。
我有两个问题:
1) 如何停止flume代理-除了按ctrl+c还有其他方法吗。
2) 我可以让flume代理在运行中写入hdfs,而不必杀死代理。
注意:终止进程后,写入的文件的扩展名为.tmp。是预期的吗?
编辑:

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

mpbci0fu1#

写入了多少数据?我打赌它不会写,因为您没有收集到足够的数据来触发使用默认配置参数刷新hdfs。有许多方法可以配置hdfs接收器,以便它以可预测的方式进行刷新。您可以将其设置为在多个事件上刷新( hdfs.rollCount ),间隔( hdfs.rollInterval ),或尺寸( hdfs.rollSize ). 当你杀死代理的时候,它会清理当前正在做的事情并刷新。。。所以基本上你是通过杀死它来强迫它。
你也可以试着降低 hdfs.batchSize .
记住hadoop喜欢较大的文件。一般来说,你应该尽量避免使用很多小文件。所以在这里要小心滚动太频繁。
像你一样在前台运行它,ctrl+c或kill是唯一真正阻止它的方法。在生产环境中,您可能应该使用init脚本,它具有start/stop/restart。

jljoyd4f

jljoyd4f2#

谢谢唐纳德和普拉文:
我可以通过在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

现在flume正在向hdfs写入数据。

相关问题