Hive 支持在 MR 任務結束之後,再另起一輪 MR 作業進行小文件的合併。這輪作業只會有 mapper, 沒有 reducer. 每個 mapper 根據參數讀入若干文件並輸出成一個文件,從而達到文件合併的效果
與 mergefile 有關的參數有以下:
參數
|
說明
|
當前默認值
|
---|---|---|
hive.merge.mapfiles | 在只有 mapper 階段的任務結束後進行合併 | true |
hive.merge.mapredfiles | 在有 reducer 階段的任務結束後進行合併 | false |
hive.merge.size.per.task | 每個 task 最終輸出的文件大小 | 256M |
hive.merge.smallfiles.avgsize |
進行文件合併的條件。當任務執行完之後輸出的文件平均大小小於該參數,則 hive 會啓動文件合併任務 | 16M |
如若需要開啓合併參數,只需要 set hive.merge.mapredfiles=true; 即可
注意:合併的任務是會算在 原作業 的 Stage 中的。比如,某個 SQL 生成的 MR 有 3 輪,則開啓合併參數後會變成 4 輪
合併文件這輪任務的開銷基本會在 10 分鐘之內完成。對於有嚴格 SLA 要求的 ETL 可以考慮是否開啓