1、總體架構優化
如今hive的總體框架以下,計算引擎不單單支持Map/Reduce,而且還支持Tez、Spark等。根據不一樣的計算引擎又可使用不一樣的資源調度和存儲系統。
總體架構優化點:
一、根據不一樣業務需求進行日期分區,並執行類型動態分區。
相關參數設置:
0.14中默認hive.exec.dynamic.partition=ture
二、爲了減小磁盤存儲空間以及I/O次數,對數據進行壓縮
相關參數設置:
job輸出文件按照BLOCK以Gzip方式進行壓縮。git
1github 2算法 3apache |
|
map輸出結果也以Gzip進行壓縮。oop
1性能 2測試 |
|
對hive輸出結果和中間結果進行壓縮。
1 2 |
|
三、hive中間表以SequenceFile保存,能夠節約序列化和反序列化的時間
相關參數設置:
hive.query.result.fileformat=SequenceFile
四、yarn優化,在此再也不展開,後面專門介紹。
2、MR階段優化
hive操做符有:
執行流程爲:
reduce切割算法:
相關參數設置,默認爲:
hive.exec.reducers.max=999
hive.exec.reducers.bytes.per.reducer=1G
reduce task num=min{reducers.max,input.size/bytes.per.reducer},能夠根據實際需求來調整reduce的個數。
3、JOB優化
一、本地執行
默認關閉了本地執行模式,小數據可使用本地執行模式,加快執行速度。
相關參數設置:
hive.exec.mode.local.auto=true
默認本地執行的條件是,hive.exec.mode.local.auto.inputbytes.max=128MB, hive.exec.mode.local.auto.tasks.max=4,reduce task最多1個。 性能測試:
數據量(萬) 操做 正常執行時間(秒) 本地執行時間(秒)
170 group by 36 16
80 count 34 6
二、mapjoin
默認mapjoin是打開的, hive.auto.convert.join.noconditionaltask.size=10MB
裝載到內存的表必須是經過scan的表(不包括group by等操做),若是join的兩個表都知足上面的條件,/*mapjoin*/指定表格不起做用,只會裝載小表到內存,不然就會選那個知足條件的scan表。
4、SQL優化
總體的優化策略以下:
5、平臺優化
一、hive on tez
二、spark SQL大趨勢
總結 上面主要介紹一些優化思想,有些優化點沒有詳細展開,後面分別介紹yarn的優化細節、SQL詳細的優化實例以及咱們在Tez、spark等框架優化結果。最後用一句話共勉:邊coding,邊優化,優化無止境。 來源:github 做者:jacksu