017-Hadoop Hive sql語法詳解7-去重排序、數據傾斜
阿新 • • 發佈:2017-11-25
col 去重排序 sel cluster 可能 更多 分發 指定 clust
一、數據去重排序
1.1、去重
distinct與group by
盡量避免使用distinct進行排重,特別是大表操作,用group by代替
-- 不建議 select DISTINCT key from a -- 建議 select key from a group by key
1.2、排序優化
只有order by產生的結果是全局有序的,可以根據實際場景進行選擇排序。
1、order by 實現全局排序,一個reduce實現,由於不能並發執行,所以效率偏低
2、sort by實現部分有序,單個reduce輸出的結果是有序的,效率高,通常和distribute by關鍵字一起使用
(distribute by 關鍵字可以指定map到reduce端的分發key)
3、cluster by col1等價於 distribute by col1 sort by col1但不能指定排序規則
二、數據傾斜
任務進度長時間維持在99%(或100%),查看任務監控頁面,發現只有少量(1個或幾個)reduce子任務未完成。因為其處理的數據量和其他reduce差異過大。
單一reduce的記錄數與平均記錄數差異過大,通常可能達到30倍甚至更多。最長時長遠大於平均時長。
017-Hadoop Hive sql語法詳解7-去重排序、數據傾斜