1. 程式人生 > >order by/sort by/distribute by /cluster by 的區分

order by/sort by/distribute by /cluster by 的區分

主要說說這3者的區分和場景:

1.order by:這是日常使用最多的,因為是最終的排序,所以是全域性的,所以最後只會有1個reduce(set mapred.reduce.tasks=n無效)完成。假如sql的執行結果的資料量很大的話,這裡就會比較坑。

2.sort by:sortby不是全域性排序,資料在reducer前就完成排序。sortby只會保證每個reducer的輸出是有序的,sortby不受hive.mapred.mode屬性的影響。我們可以set mapred.reduce.tasks=n來指定reduce的個數,最後在執行order by 進行全域性的排序。

3. distribute by :distribute by 是控制map端如何拆分資料給reduce端的。hive會根據by 的列,對應reduce的個人進行分發,預設是hash演算法。

4. cluster by :等價於 distribute by columns sort by columns,但是隻能是倒敘排序

  notes: distribute by 和sort by的使用場景:

     1. map輸出的檔案大小不均勻

     2. reduce輸出的檔案大小不均

     3. 小檔案過多

     4. 檔案太大。 

  

set mapred.reduce.tasks=n