众所周知,从flume采集数据到hdfs的时候,需要避免小文件的产生,太多的小文件,在数据处理的过程中,会降低数据处理的性能,那么在日常的flume采集到hdfs的文件,如果避免小文件的产生?
在flume的sink操作时,有涉及到3个默认的参数,分别是:
a1.sinks.k1.hdfs.rollInterval
a1.sinks.k1.hdfs.rollSize
a1.sinks.k1.hdfs.rollCount
这三个参数分别表示
(rollInterval):每次间隔多久往hdfs写入一次数据
(rollSize ):等待sink的数据缓存多大,就往hdfs写入一次数据
(rollCount):有多少的event事件,就往hdfs写入一次数据
默认情况下,这三个参数是同时开启的,当满足其中一个条件的时候,就会触发写入hdfs的操作。
在减少小文件的优化方面,我们应该将rollInterval、rollCount这2个参数屏蔽,设置为0
a1.sinks.k1.hdfs.rollInterval=0
a1.sinks.k1.hdfs.rollCount=0
而对于rollInterval参数设置为128M .设置为hdfs的块大小134217728(128*1024*1204)
最后这三个参数的配置为:
a1.sinks.k1.hdfs.rollInterval=0
a1.sinks.k1.hdfs.rollSize =134217728
a1.sinks.k1.hdfs.rollCount=0