hive中 Sort By,Order By,Cluster By,Distrbute By区别

本文详细介绍了Hadoop MapReduce中用于数据排序和分布的四个关键操作:orderby全局排序可能导致计算时间增长,sortby仅在reducer内部排序,distributeby按指定字段划分数据到不同reducer,而clusterby同时具备distributeby和sortby功能。通过示例代码展示了如何在Hadoop SQL中应用这些操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • order by:会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)。只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
  • sort by:不是全局排序,其在数据进入reducer前完成排序。
  • distribute by:按照指定的字段对数据进行划分输出到不同的reduce中。
  • cluster by:除了具有 distribute by 的功能外还兼具 sort by 的功能。

代码:

CREATE TABLE `person`(
  `id` int,
  `name` string,
  `address` string);
insert into person values(1, 'lisi', 'beijing');
insert into person values(2, 'zhangsan', 'chengdu');
insert into person values(3, 'wangwu', 'shanghai');
insert into person values(4, 'zhaoliu', 'guangzhou');
insert into person values(5, 'name5', 'beijing');

-- order by会对查询结果执行一个全局排序,reducer的数量是1。因此这个过程可能会很漫长。
explain insert overwrite local directory '/root/order-by-result' select *
from person order by id asc ;

-- sort by只会对reducer中进行排序,局部排序
set mapreduce.job.reduces=3;
explain insert overwrite local directory '/root/sort-by-result' select * from person sort by id desc;

-- distribute by 控制mapper中的输出在 reducer 中是如何进行划分的,使用distribute by可以保证相同key的记录被划分到一个reducer中
insert overwrite local directory '/root/distribute-by-result' select * from person distribute by id  sort by address;

-- cluster by结果和上面一样,修改了sort by后面的好像也不影响查询结果,默认是升序,不可改变顺序
insert overwrite local directory '/root/cluster-by-result' select * from person cluster by id ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的三板斧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值