hive 的map, reduce數量除錯
阿新 • • 發佈:2021-01-01
場景: 執行hive sql,佔用的記憶體資源特別多, 如何去減少佔用的記憶體 cpu資源.
執行的sql只是做了一下group by操作。
步驟1:
減少map數量,合併小檔案
set mapreduce.input.fileinputformat.split.maxsize=1500000000 set mapreduce.input.fileinputformat.split.minsize=800000000 set mapreduce.input.fileinputformat.split.minsize.per.node=800000000 set mapreduce.input.fileinputformat.split.minsize.per.rack=800000000 set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat #執行 Map 前進行小檔案合併
步驟2:
減少reduce數量
hive.exec.reducers.bytes.per.reducer 預設是1G,輸入檔案如果是10G,那麼就會起10個reducer
hive.exec.reducers.max(每個sql任務最大的reduce數,預設為999)
mapred.reduce.tasks 設定固定的reduce數量
步驟3:
hive.groupby.skewindata:
group by操作是否允許資料傾斜,
預設是false,
當設定為true時,執行計劃會生成兩個map/reduce作業,第一個MR中會將map的結果隨機分佈到reduce中,達到負載均衡的目的來解決資料傾斜
結果:
從 原來的32個containers 32個cpu 32G記憶體
變成了現在6個containers 6個CPU 6G記憶體