您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Hive優化的方法有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Hive優化的方法有哪些”這篇文章吧。
一、整體架構優化
現在hive的整體框架如下,計算引擎不僅僅支持Map/Reduce,并且還支持Tez、Spark等。根據不同的計算引擎又可以使用不同的資源調度和存儲系統。
整體架構優化點:
1、根據不同業務需求進行日期分區,并執行類型動態分區。
相關參數設置:
0.14中默認hive.exec.dynamic.partition=ture
2、為了減少磁盤存儲空間以及I/O次數,對數據進行壓縮
相關參數設置:
job輸出文件按照BLOCK以Gzip方式進行壓縮。
1 2 3 |
|
map輸出結果也以Gzip進行壓縮。
1 2 |
|
對hive輸出結果和中間結果進行壓縮。
1 2 |
|
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大趨勢
以上是“Hive優化的方法有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。