1. Map輸入合並小文件
對應參數:
set mapred.max.split.size=256000000; #每個Map最大輸入大小
set mapred.min.split.size.per.node=100000000; #一個節點上split的至少的大小
set mapred.min.split.size.per.rack=100000000; #一個交換機下split的至少的大小
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; #執行Map前進行小文件合並
在開啟了org.apache.hadoop.hive.ql.io.CombineHiveInputFormat后,一個data node節點上多個小文件會進行合並,合並文件數由mapred.max.split.size限制的大小決定。
mapred.min.split.size.per.node決定了多個data node上的文件是否需要合並~
mapred.min.split.size.per.rack決定了多個交換機上的文件是否需要合並~
2.輸出合並
set hive.merge.mapfiles = true #在Map-only的任務結束時合並小文件
set hive.merge.mapredfiles = true #在Map-Reduce的任務結束時合並小文件
set hive.merge.size.per.task = 256*1000*1000 #合並文件的大小
set hive.merge.smallfiles.avgsize=16000000 #當輸出文件的平均大小小於該值時,啟動一個獨立的map-reduce任務進行文件merge