hive 排序


1、全局排序(order by)

Order by:全局排序,只有一個reducer

ASC(ascend):升序(默認)

DESC(descend):降序

2、每個MR內部排序(sort by)

sort By:對於大規模的數據集order by的效率非常低。在很多情況下,並不需要全局排序,此時可以使用sort by

Sort By為每個Reducer產生一個排序文件。每個Reducer內部進行排序,對全局結果集來說不是排序。

(1)設置reduce個數

hive (default)> set mapreduce.job.reduces=3;

(2)根據部分編號降序查看員工信息

hive (default)> select * from emp sort by empno desc;

3、分區排序(Distribute By)

Distribute By:在某些情況下,我們需要控制某個特定行應該到哪個Reducer,通常是為了后續的聚集操作。

Distribute by類似MR中partition(自定義分區),進行分區,結合sort by使用

測試時要分配多個reduce進行處理,否則無法看到Distribute by的效果

 set mapreduce.job.reduces=3;

注意:

  • Distribute by的分區規則是根據分區字段的hashcode與reduce的個數進行取模后,余數相同的分到一個區
  • hive要求Distribute by語句要寫在sort by語句之前

4、cluster by

當Distribute by 和sort by 字段相同時,可以使用cluster by 方式

cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是升序排序,不能指定排序規則為ASC或者DESC。

1)以下兩種寫法等價

hive (default)> select * from emp cluster by deptno;

hive (default)> select * from emp distribute by deptno sort by deptno;


免責聲明!

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



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