1. 程式人生 > >017-Hadoop Hive sql語法詳解7-去重排序、數據傾斜

017-Hadoop Hive sql語法詳解7-去重排序、數據傾斜

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-去重排序、數據傾斜