背景
Hive query将运算好的数据写回hdfs(比如insertinto语句),有时候会产生大量的小文件,如果不采用CombineHiveInputFormat就对这些小文件进行操作的话会产生大量的map task,耗费大量集群资源,而且小文件过多会对namenode造成很大压力。所以Hive在正常job执行完之后,会起一个conditionaltask,来判断是否需要合并小文件,如果满足要求就会另外启动一个map-only job 或者mapred job来完成合并
参数解释
hive.mergejob.maponly (默认为true)
如果Hadoop版本支持CombineFileInputFormat,则启动Map-only job formerge,否则启动 MapReduce merge job,map端combine file是比较高效的做法
hive.merge.mapfiles(默认为true)
正常的map-only job后,是否启动merge job来合并map端输出的结果
hive.merge.mapredfiles(默认为false)
正常的map-reduce job后,是否启动merge j