加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数据排序 Hive中的order by ,sort by ,distribute by

发布时间:2022-11-04 15:00:39 所属栏目:大数据 来源:网络
导读: #Hive的本质就是MapReduce
#设置reduce个数
set mapreduce.job.reduces=num //设置num数量的reduce
#查看设置reduce个数
set mapreduce.job.reduces
#1.Order by 全局排序
只有一个ReduceT

#Hive的本质就是MapReduce

#设置reduce个数

set mapreduce.job.reduces=num //设置num数量的reduce

#查看设置reduce个数

set mapreduce.job.reduces

#1.Order by 全局排序

只有一个ReduceTask,是对所有的数据排序,结果是所有数据是有序的。自定义Reduce数量是无效的,只有一个reduce。效率很低,在数据量很大的情况下,只有一个reduce干活是运行不了的

#2.sort by 部分排序(每个reduce内部排序)

sort by 为每个reduce产生一个排序文件。每个reduce内部进行排序,对全局的结果集来说不是有序。如果只写sort by 的话,那么就是随机分区排序的,如果需要定义按照哪个字段来分区,就需要用到distribute by 。这两者是结合使用的。

#3.distribute by 分区排序

分区和排序都是在shuffle阶段完成的,分区是在shuffle中的Maptask阶段完成的,排序是在maptask中完成,也在reducetask中完成。当在执行SQL语句的时候,底层调用了Mapreduce,如果只是写了sort by 的话,那么就是随机分区的。如果需要自定义字段分区排序(某个特定行到对应的reduce),此时就需要distribute by 。distribute类似MR中的partition分区。distribute by的分区规则是根据分区字段的hash码与reduce的个数进行取模大数据排序,相同的为同一分区再进行排序。当全局排序的时候用这个就没有意义了,因为reducetask只有一个,所有只会有一个分区。所以distribute by只有结合部分排序才有意义。这两者结合使用对区域内的数据进行升序降序排列。

#4.cluster by

当distribute by 和 sort by 的字段相同时,可以使用cluster by 。

cluster by 就是 distribute by 和 sort by 的组合,但是只能默认升序。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!