问题:我们的项目使用flume收集web产生的日志,输出hdfs上,一天一个文件夹。文件下面就是今天的日志,然后有一个日志分析程序读取每天的日志进行分析,但是日志分析程序一直读不到hdfs上收集的日志,但是查看已经收集的日志文件,文件里面有事有数据的,分析可能是文件流一直在打开,导致未关闭的文件中的数据是不能被日志分析程序读取的,后来经一起查找,发现hdfs.idleTimeout参数可以定时关闭文件流,文件流关闭后,下次写入的数据就会进入新的文件里面。官方文档接受:连续事件到一个未关闭的文件需要等待的最大时间周期的秒值,设置为0禁用该选项。

hdfs.idleTimeout,使用注意事项:比如值为20,连续20秒没有新的数据写入当前文件,当前文件就会被关闭,然后产生一个新的文件,再有写入的数据就写到新的文件里面;因此要控制好时间,否则会在hdfs上产生太多小文件。

例如:
agent1.sinks.sink1.hdfs.idleTimeout = 20

06-20 02:09