5.3 小文件
操作场景:
现在社区对于输入是小文件是没有自动合并功能,提供的合并命令,不够实用, 比如一个表有很多分区,需要对每个分区执行合并操作,我们暂时不建议用户用。
现在如果输入有小文件要合并,我们是建议用户先原始数据加载到hive表中,再启动一个MR从小文件临时表插入最终表,这个过程即解决小文件也解决文件存储格式(ORC + Snappy)。
对于输出,现在hive有参数控制多小的文件是小文件,对于输出的小文件是否要进行合并的参数,如下。
对于顺序执行的作业链,只有最后一张表的数据需要持久化,中间临时结果用完就删除的情况,可以在最后一个insert into table之前再开启,防止之前的作业也会launch merge job使得作业变慢。
修改参数:
参数名 | 描述 |
---|---|
hive.merge.mapfiles | 默认为 True,是否合并 Map 输出文件 |
hive.merge.mapredfiles | 默认为 False,是否合并 Reduce 输出文件 |
hive.merge.size.per.task | 默认256*1000*1000,合并后单个文件的大小 |
hive.merge.smallfiles.avgsize | 默认16 * 1000 * 1000,文件平均大小小于该值时,认为需要合并 |