12-order by和group by 原理和優化 sort by 倒敘


 

========================原理和優化==================================
groupBy分組?會造成一個數據傾斜
1.解決方案:將輸入在map端進行部分的打亂重分
set hive.groupby.skewindata=true;
2.在map到reduce端的時候設置combiner進行合並
set hive.map.aggr=true;
3.在combiner進行合並的時候要知道數據量的大小,如果不是特別大就不需要進行合並
set hive.groupby.mapaggr.checkinterval=100000;如果數據小於10w條那么沒必要合並
4.看在combiner合並期間做的合並率
set hive.map.aggr.hash.min.reduction=0.5

order by是排序?全局排序,reduce就應該是一個
其實orderby就是一個reduce在進行排序處理,那么壓力特別大,並且容易產生宕機
那么我們在使用這個order by的時候就不能進行全局排序,加上limit
set hive.mapred.mode = strict; 
在嚴格模式下如果向使用order by進行排序,那么必須使用limit進行指定條數

sort by排序,不是全局排序,單個reduce的排序
問題:將每個部門的數據都按照工資進行倒序?

set mapreduce.job.reduces=3;
select * from t_emp distribute by deptno sort by salary desc;




sort by 每個mr自己得文件單獨排序
distribute by 分發將map端得數據按照一定得規則分發給不同得reduce端
set mapreduce.job.reduces=3;
與order by不同,order by是全局排序 其實sortby也可以全局排序 reduce是一個得時候就可以全局排序
cluster by:分發+排序 == sort by+distribute by,但是cluster by 這個分發加上排序是只能指定一個字段

 

 


免責聲明!

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



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