【Hive】Order by、Sort by、Distribute by和Cluster by
1 Order by
Hive中的Order by语句和其他的SQL中定义的一样,其会对查询结果集执行一个全局排序,即会有一个所有的数据都通过一个reducer进行处理的过程。对于大数据集,这个过程可能会消耗太多的时间来执行。
2 Sort by
对于使用Order by进行全局排序的操作,Hive增加了一个可供选择的方式,就是Sort by,其只会在每个reducer中对数据进行排序,即执行一个局部排序的过程,这可以保证在每个reducer的输出数据都是有序的(但并非全局排序),这样可以提高后面进行的全局排序的效率。
3 Distribute by
Distribute by控制map的输出在reducer中是如何划分的,MapReduce job中传输的所有数据都是按照键-值对的方式进行组织的,因此,Hive在将用户的查询语句转换成MapReduce job时,其必须在内部使用这个功能。
默认情况下,MapReduce计算框架会依据map输入的键计算相应的哈希值,然后按照得到的哈希值将键-值对均匀分发到多个reducer中去。不过不幸的是,这也就意味着当使用Sort by时,不同的reducer的输出内容会有明显的重叠,至少对于排列顺序而言是这样的,即使每个reducer的输出的数据都是有序的。
4 Cluster by
是Distribute by和Sort by 的结合。