小文件处理
如何产生?
(1)动态分区插入数据,产生大量的小文件;
(2)reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的);
(3)数据源本身就包含大量的小文件。
影响
(1)存储层面:
1个文件块,占用namenode多大内存150字节
(2)计算层面:
每个小文件都会起到一个MapTask,占用了大量计算资源
HDFS处理
(1)har归档
(2)CombineTextInputFormat
(3)开启JVM重用;如果没有小文件,不要开启
Hive处理
(1)在Map前合并,减少Map数:CombineHiveInputFormat
(2)merge合并小文件,在map-only、map-reduce任务任务结束时合并小文件
SET hive.merge.mapfiles = true;
SET hive.merge.mapredfiles = true;
(3)开启JVM重用