Hive优化(再一遍系统复习)
生活随笔
收集整理的這篇文章主要介紹了
Hive优化(再一遍系统复习)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Hive優化(或者面試問你工作中遇到的問題就可以答hive優化)
(1) 小表 join 大表
將key相對分散,并且數據量小的表放在jon左邊,這樣可以有效減少內存溢出(OOM)錯誤發生幾率;在進一步可以開啟MapJoin讓小維度的表先進入內存,在map端完成reduce(注:現在用的hive版本本身已經進行了優化,所以小表放在前或者后沒有明顯區別)
(2)大表 Join 大表
1.空key過濾(一般數據清洗已經被過濾掉了,臟數據需要進行過濾)
2.空key轉換
有時某個key為空,但是并不是異常數據,此時可以給空key字段賦一個隨機值,使數據隨機均勻地分布在reduce上(要不然空key數據會都被分配到一個reduce里,造成數據傾斜)
內存足夠大可以把閾值調大(默認25M以下認為是小表)
set hive.mapjoin.smalltable.filesize = ?;
MapJoin工作機制:join機制在map階段完成,把小表全部加載到內存在map端進行join,避免reduce處理。
(1) (默認情況,map階段同一key數據分發給一個reduce,當一個key數據過大時就會發生數據傾斜)
(2) 并不是聚合操作都要在reduce完成,也可以開啟map端進行預聚合(combiner)(默認是開啟的)
(3)在發現有數據傾斜的時候可以打開負載均衡(默認是false)
hive.groupby.skewindata = true;(確定存在數據傾斜時打開)
開啟后會生出兩個MRJob,第一個job中,map的輸出結果會隨機分布到reduce中,每個reduce做部分聚合,并輸出結果;第二個Job再根據預處理的結果按照group by key分布到reduce中,最后完成最終聚合。
先group by 再count,避免oom或者數據傾斜
只有一個reducer在進行count(distinct)的計算
(1)列處理:少用select *
(2)行處理:當使用外關聯時,如果將副表過濾,條件寫在where后面,那么就會全表關聯,之后在過濾,那么副表就要先子查詢在進行join。
10.MR優化
(1)合理設置map數
(2)合理設置reduce數
(3)并行執行
設置參數hive.exec.parallel = true;
hive會將一個查詢轉換成一個或多個階段,階段可以是MR、抽樣階段、合并階段、limit階段。多個階段并行度越高,job完成越快。
(4)嚴格模式(嚴格模式下,笛卡爾積不被允許,分區表未指定分區不被允許等),在生成環境中是開啟的,默認是false。
總結
以上是生活随笔為你收集整理的Hive优化(再一遍系统复习)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招行现金分期手续费是多少 招行现金分期5
- 下一篇: Hive报错:Exception in