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;