========================原理和優化================================== 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 這個分發加上排序是只能指定一個字段