hive.groupby.skewindata為


如果設置hive.map.aggr為true,hive.groupby.skewindata為true,執行流程如下:

 

 

 

會生成兩個job來執行group by,第一個job中,各個map是平均讀取分片的,在map階段對這個分片中的數據根據group by 的key進行局部聚合操作,這里就相當於Combiner操作。
在第一次的job中,map輸出的結果隨機分區,這樣就可以平均分到reduce中
在第一次的job中,reduce中按照group by的key進行分組后聚合,這樣就在各個reduce中又進行了一次局部的聚合。
因為第一個job中分區是隨機的,所有reduce結果的數據的key也是隨機的,所以第二個job的map讀取的數據也是隨機的key,所以第二個map中不存在數據傾斜的問題。
在第二個job的map中,也會進行一次局部聚合。
第二個job中分區是按照group by的key分區的,這個地方就保證了整體的group by沒有問題,相同的key分到了同一個reduce中。
經過前面幾個聚合的局部聚合,這個時候的數據量已經大大減少了,在最后一個reduce里進行最后的整體聚合。
————————————————
版權聲明:本文為CSDN博主「鳴宇淳」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chybin500/article/details/80988089


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM