hive整體架構優化解決策略

2021-08-19 22:23:45 字數 1981 閱讀 6888

高階大資料架構師

hive可以從幾個方面進行優化,從系統角度看:整體架構、mr階段、job以及平台都可以進行優化。從使用者角度看:了解sql執行過程以及業務資料特點,調整sql語句進行優化。

一 整體架構優化現在hive的整體框架如下,計算引擎不僅僅支援map/reduce,並且還支援tez、spark等。根據不同的計算引擎又可以使用不同的資源排程和儲存系統。

整體架構優化點:

2 為了減少磁碟儲存空間以及i/o次數,對資料進行壓縮相關引數設定:job輸出檔案按照block以gzip方式進行壓縮。

mapreduce.output.fileoutputformat.compress=truemapreduce.output.fileoutputformat.compress.type=blockmapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io 

.compress.gzipcodecmap輸出結果也以gzip進行壓縮。

mapreduce.map.output.compress=truemapreduce.map.output.compress.codec=org.apache.hadoop.io 

.compress.gzipcodec 對hive輸出結果和中間結果進行壓縮。

hive.exec.compress.output=truehive.exec.compress.intermediate=true

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

hive.exec.reducers.bytes.per.reducer=1g

reduce task num=min

,可以根據實際需求來調整reduce的個數。

三 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個。

效能測試:

資料量(萬)操作正常執行時間(秒)本地執行時間(秒)170group by361680count346

2 mapjoin預設mapjoin是開啟的,hive.auto.convert.join.noconditionaltask.size=10mb裝載到記憶體的表必須是通過scan的表(不包括group by等操作),如果join的兩個表都滿足上面的條件,/*mapjoin*/指定**不起作用,只會裝載小表到記憶體,否則就會選那個滿足條件的scan表。

四 sql優化整體的優化策略如下:

1. 去除查詢中不需要的column

2. where條件判斷等在tablescan階段就進行過濾

3. 利用partition資訊,只讀取符合條件的partition

5. 調整join順序,確保以大表作為驅動表

6. 對於資料分布不均衡的表group by時,為避免資料集中到少數的reducer上,分成兩個map-reduce階段。第乙個階段先用distinct列進行shuffle,然後在reduce端部分聚合,減小資料規模,第二個map-reduce階段再按group-by列聚合。

7. 在map端用hash進行部分聚合,減小reduce端資料處理規模。

五 平台優化

1 hive on tez

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

HIVE優化 解決方案

1.開啟並行引數 set hive.exec.parallel true set hive.exec.parallel.thread.number 16 同乙個sql允許最大並行度,預設為8 2.負載均衡引數 只針對groupby操作的傾斜 set hive.groupby.skewindata t...

hive配置項優化解決關於hive表多表關聯的問題

1.場景 hive多表關聯使用join關聯時,sql語句不執行。如下sql select b.phoneno,b.statuscode,b.strategyid from whphone a left join rm workerorder info b on a.phoneno b.phoneno...

Hbase的優化解決方案

1.hbase的periodic flusher 一般hbase在預設情況下回自動觸發flush操作,初衷是為了防止有些memstore長時間不flush,在沒有進行wal的情況下,出現資料的丟失.由於我們的hbase每個region server 有將近100個resign,幾乎每分鐘都有regi...