文件數目過多,會給HDFS帶來壓力,並且會影響處理效率,可以通過合並Map和Reduce的結果文件來消除這樣的影響:
set hive.merge.mapfiles = true ##在 map only 的任務結束時合並小文件
set hive.merge.mapredfiles = false ## true 時在 MapReduce 的任務結束時合並小文件
set hive.merge.size.per.task = 256*1000*1000 ##合並文件的大小
set mapred.max.split.size=256000000; ##每個 Map 最大分割大小
set mapred.min.split.size.per.node=1; ##一個節點上 split 的最少值
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; ##執行 Map 前進行小文件合並