order by: 会将所有的数据汇聚到一个reduce上去执行,然后能保证全局有序。但是效率低,因为不能并行执行
sort by: 当设置mapred.reduce.tasks>1,则sort by只保证每个reducer的输出有序,不保证全局有序。好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序。
distribute by: 根据指定的字段将数据分到不同的reduce,且分发算法是hash散列。能保证每一个reduce负责的数据范围不重叠了,但是不保证排序的问题。
cluster by: 除了具有distribute by的功能外,还会对该字段进行排序。
只有一个reduce时,cluster by效果不明显,可以执行set mapred.reduce.tasks>1来使效果明显。
当字段相同时,cluster by效果等同于distribute by+sort by。
注意:cluster 和 sort 在查询(select)时不能共存,建表时可以共存