Hive中的order by、sort by、 distribute by、cluster by

一颗蔬菜 2019-08-03 AM 187℃ 0条

前言

从语义上理解:order、sort的中文含义是排序。而ditribute和cluster的中文含义是分发和簇。

order by-全局排序

对数据进行全局排序,所有数据会被安排到同一个reduce中进行,但数据量特别大时就会出现数据倾斜。在严格模式下,order by必须与limit配合使用,其目的是减少该reduce的计算时间。这种情况下,无论mapred.reduce.task的值是否为1,数据都只会被分到同一个reduce中。

sort by-局部排序

在mapred.reduce.task的值不为1的情况下,各reduce对数据进行局部排序,这种并行处理的方式效率高,但不能保证全局有序。在mapred.reduce.task的值为1的情况下,局部排序和全局排序的效率是一样的。

distribute by-按key值分发

distribute by用于控制map的输出按照key值划分到reduce中。换句话说,这种方式可以使得相同key值的记录被划分到同一个reduce中。

cluster by-按key值分发并局部排序

cluster by可以理解为先请按照key值分发到reduce然后进行局部排序,即distribute by和sort by的结合。不过,它们之间的差异是order by和sort by都可以指定升序(asc)或者降序(desc)排序,而cluster只能按照默认值(升序)排序。

结束语

梦想有多遥远,人就需要有多努力。

标签: 大数据

非特殊说明,本博所有文章均为博主原创。