1.问题背景
通过flume直接上传实时数据到hdfs,会常遇到的一个问题就是小文件,需要调参数来设置,往往在生产环境参数大小也不同
1.flume滚动配置为何不起作用?
2.通过源码分析得出什么原因?
3.该如何解决flume小文件?
2. 过程分析
接着上一篇,https://blog.csdn.net/hu_lichao/article/details/110358689
本人在测试hdfs的sink,发现sink端的文件滚动配置项起不到任何作用,配置如下:
a1.sinks.k1.type=hdfs
a1.sinks.k1.channel=c1
a1.sinks.k1.hdfs.useLocalTimeStamp=true
a1.sinks.k1.hdfs.path=hdfs://linux121:9000/user/data/logs/%Y-%m-%d
a1.sinks.k1.hdfs.filePrefix=XXX
a1.sinks.k1.hdfs.rollInterval=60
a1.sinks.k1.hdfs.rollSize=0
a1.sinks.k1.hdfs.rollCount=0
a1.sinks.k1.hdfs.idleTimeout=0
这里配置的是60秒,文件滚动一次,也就每隔60秒,会新产生一个文件【前提,flume的source端有数据来】这里注意 useLocalTimeStamp 是使用本地时间戳来对hdfs上的目录来命名,这个属性的目的就是相当于时间戳的拦截器,否则%Y 等等这些东西都识别不了
要么用上面这个属性,要么用时间戳拦截器。但是当我启动flume的时候,运行十几秒,不断写入数据,发现hdfs端频繁的产生文件,每隔几秒就有新文件产生而且在flume的日志输出可以频繁看到这句:
[WARN] Block Under-replication detected. Rotating file.
只要有这句,就会产生一个新的文件,意思就是检测到复制块正在滚