HIVE優化

問題導讀:

1、Hive整體架構優化點有哪些?

2、如何在MR階段進行優化?

3、Hive在SQL中如何優化?

4、Hive框架平臺中如何優化?




一、整體架構優化
現在hive的整體框架如下,計算引擎不僅僅支持Map/Reduce,並且還支持Tez、Spark等。根據不同的計算引擎又可以使用不同的資源調度和存儲系統。
 

整體架構優化點:

1、根據不同業務需求進行日期分區,並執行類型動態分區。
相關參數設置:
0.14中默認hive.exec.dynamic.partition=ture

2、爲了減少磁盤存儲空間以及I/O次數,對數據進行壓縮
相關參數設置:
job輸出文件按照BLOCK以Gzip方式進行壓縮。

[AppleScript] 純文本查看 複製代碼
?
1
2
3
mapreduce.output.fileoutputformat.compress=true
mapreduce.output.fileoutputformat.compress.type=BLOCK
mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec


map輸出結果也以Gzip進行壓縮。
[AppleScript] 純文本查看 複製代碼
?
1
2
mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec


對hive輸出結果和中間結果進行壓縮。
[AppleScript] 純文本查看 複製代碼
?
1
2
hive.exec.compress.output=true
hive.exec.compress.intermediate=true


3、hive中間表以SequenceFile保存,可以節約序列化和反序列化的時間

相關參數設置:
hive.query.result.fileformat=SequenceFile

4、yarn優化,在此不再展開,後面專門介紹。

二、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的個數。

三、JOB優化
1、本地執行

默認關閉了本地執行模式,小數據可以使用本地執行模式,加快執行速度。
相關參數設置:
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

2、mapjoin

默認mapjoin是打開的, hive.auto.convert.join.noconditionaltask.size=10MB

裝載到內存的表必須是通過scan的表(不包括group by等操作),如果join的兩個表都滿足上面的條件,/*mapjoin*/指定表格不起作用,只會裝載小表到內存,否則就會選那個滿足條件的scan表。

四、SQL優化

整體的優化策略如下:
  •     去除查詢中不需要的column
  •     Where條件判斷等在TableScan階段就進行過濾
  •     利用Partition信息,只讀取符合條件的Partition
  •     Map端join,以大表作驅動,小表載入所有mapper內存中
  •     調整Join順序,確保以大表作爲驅動表
  •     對於數據分佈不均衡的表Group by時,爲避免數據集中到少數的reducer上,分成兩個map-reduce階段。第一個階段先用Distinct列進行shuffle,然後在reduce端部分聚合,減小數據規模,第二個map-reduce階段再按group-by列聚合。
  •     在map端用hash進行部分聚合,減小reduce端數據處理規模。

五、平臺優化
1、hive on tez
 

2、spark SQL大趨勢
 

總結
上面主要介紹一些優化思想,有些優化點沒有詳細展開,後面分別介紹yarn的優化細節、SQL詳細的優化實例以及我們在Tez、spark等框架優化結果。最後用一句話共勉:邊coding,邊優化,優化無止境。

來源:github
作者:jacksu
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章