Hive中 Order by,Sort by, Distribute by, Cluster by详解

order by、distribute by、sort by、group by、partition by order by:全局排序 order by 会对数据进行一次全局排序,所以说,只要hive的sql中指定了order by,那么所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer)。 order by 只在一个reduce中进行,所以数据量特别大的时候效率非常低。建议在小的数据集中使用order by进行排序 可以通过设置hiv... 阅读详情

Hive中 Order by,Sort by, Distribute by, Cluster by详解

本文的数据基础:
在这里插入图片描述

empnoenamejobmgrhiredatesalcommdeptno
工号姓名职位老板工号雇佣日期工资不重要部门编号

初始计算引擎为tez,而不是默认的MR。

1.Order by

order by的用法和mysql中一模一样,是针对全局排序。此处不进行详述。

2.Sort by

Hive基于Hadoop集群,Sort by为每个reducer产生一个排序文件。每个Reducer内部进行排序,对全局结果集来说不是排序。

既然是说为每个reducer产生一个排序文件,那当然要有两个以上的reducer了。可在hive客户端设置reducer个数,我这里设置为3,意味着会产生三个分区。

注意:不设置这个参数的话,默认reducer个数为1,和order by没区别。

hive (default)> set mapreduce.job.reduces=3;

针对部门编号deptno来一下sort by;

select * from emp sort by deptno desc;

在这里插入图片描述

可以看到,上表确实是被分成了三部分,并按大到小排序。

看到这三个分区,有没有什么疑问呢?为何每个分区都会有相同的deptno数据。这个结果说明分区机制并不是按照hadoop中取key的hash值 % reducer个数得到的。下面来看一段英文:

Note: It may be confusing as to the difference between 
SORT BY alone of a single column and CLUSTER BY. 
The difference is that CLUSTER BY partitions by the field and 
SORT BY if there are multiple reducers partitions randomly 
in order to distribute data (and load) uniformly across the reducers.
替你们翻译一下:
注意:关于单个列的单独SORT BY与CLUSTER BY之间的区别可能会造成混淆。 
区别在于,如果有多个reducer分区,则CLUSTER BY按字段划分,
而SORT BY则是随机划分,以便在reducer上均匀地分布数据(和负载)。

上面这段英文来自hive.apache.org官网

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

这说明结果的由来是随机的,但并不是每次都是随机,而是通过一种随机算法计算得到,就是说你再排序一次,得到的依然是上面的结果,不信的童鞋可以试一下。

sort by通常和下面要介绍的Distribute by一起使用。

3.Distribute by

Distribute by可以控制某个特定行应该到哪个reducer,通常是为了进行后续的聚集操作。类似MR中partition(自定义分区)。

先给个结论:

Ø distribute by的分区规则是根据分区字段的hash码与reduce的个数进行模除后,余数相同的分到一个区。

下面开搞:

依然设置reducer个数为3:

hive (default)> set mapreduce.job.reduces=3;

再针对deptno字段进行distribute by.

select * from emp distribute by deptno;

结果如下:


结果有点出人意料,数字的hash值是其本身,按照distribute by的分区规则,那应该是10在1号分区,20在2号分区,30在0号分区(请忽略null,脏数据)。这里为什么只有两个分区,20,30堆在一起了?我们来验证一下是否是真的堆在一起了,将查询的文件输出到本地:

insert overwrite local directory '/opt/module/hive/datas/dis_by' select * from emp distribute by deptno;

查看datas文件夹:

[shy@hadoop dis_by]$ ll
总用量 8
-rw-r--r--. 1 shy shy 546 7月  30 22:21 000000_0
-rw-r--r--. 1 shy shy 139 7月  30 22:21 000001_0

确实是只有两个文件,内容:

[shy@hadoop dis_by]$ cat 000000_0 
\N\N\N\N\N\N\N\N
7902FORDANALYST75661981-12-33000.0\N20
7900JAMESCLERK76981981-12-3950.0\N30
7876ADAMSCLERK77881987-5-231100.0\N20
7844TURNERSALESMAN76981981-9-81500.00.030
7788SCOTTANALYST75661987-4-193000.0\N20
7698BLAKEMANAGER78391981-5-12850.0\N30
7654MARTINSALESMAN76981981-9-281250.01400.030
7566JONESMANAGER78391981-4-22975.0\N20
7521WARDSALESMAN76981981-2-221250.0500.030
7499ALLENSALESMAN76981981-2-201600.0300.030
7369SMITHCLERK79021980-12-17800.0\N20

确实是20, 30堆在一起了。

这是因为目前用的计算引擎是tez!它会自动进行优化。

现在我们来更改一下引擎:

set hive.execution.engine=mr;

再执行一次distribute by排序:

select * from emp distribute by deptno;

结果很明确:

在这里插入图片描述

可以再加上sort by,分区内的empno进行排序:

select * from emp distribute by deptno sort by empno;

结果:
在这里插入图片描述

所以,distribute by和sort by的区别是一个按规则分区,一个随机分区并排序。

4.Cluster by

cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。当distribute by和sort by字段相同时,可以使用clusterby方式。

以下两种写法等价

hive (default)> select * from emp cluster by deptno;

hive (default)> select * from emp distribute by deptno sort by deptno;
rby方式。

hive中,cluster by为什么会出现?有什么意义?有什么用处?有什么应用场景?              前段时间,因为项目原因,了解了cluster by,顺路写了一篇博客:HIVE中,cluster by有什么意义。然后底下有人回复:假如100个专业分了10个区,那么每一个区里都应该会有不同的专业。但反过来说,真正的mr 并没有完全按专业分区,如果完全的话那应该是100个区。问题是结果只有10个区,这么做意义的结果总结一下应该是:cluster by 的字段只是参 阅读详情

相关推荐

HIVE中,cluster by有什么意义

文章目录1. cluster by 是什么?2. cluster by有什么意义? 1. cluster by 是什么?       如果想彻底了解:HIVE中,order by、sort by、 distribute by和 cluster by的区别,请查看HIVE中,order by、sort by、 distribute by和 ...

慢慢来 1万+

hive中的distribute by

1.背景    hive中有一个store表,字段分别是"商店所属人标识"(merid),“商户余额(money)”,“商店名称(name)”。求每个法人下属的商店的余额按照降序排序。//merid,money,name B     10 store_B_4 A 12 store_A_1 A 14 store_A_2 B 15 store_B_1 B 19 store_B_2 B 30 sto...

fantasticqiang的博客 5万+

Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解

在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by cluster by 一、order by(全局排序) 1、作用:全局排序,只有一个reducer。 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),也正因为只有一个reducer,所以当输入的数据规模较大时会导致计算时间较长。   set hive.mapr

weixin_43230682的博客 1万+

Hive 常见的数据倾斜及调优技巧

Hive在执行MapReduce任务时经常会碰到数据倾斜的问题,表现为一个或者几个reduce节点运行很慢,延长了整个任务完成的时间,这是由于某些key...

Focus on Lakehouse 1142

Hive中order by,sort by,distribute by和cluster by详解

作为数据开发工程师,在平时工作中,肯定接到过产品小姐姐提的排序需求,例如在mysql数据库中,就是使用order by函数。在hive中也是有order by函数的,那么除了order by之外是否还有其他排序函数呢?今天就跟小伙伴们聊聊hive中有哪些排序函数以及使用场景!只有了解了各个排序函数的功能和使用场景,才能在开发过程中达到事半功倍的效果,提升HQL性能,节省计算资源,提质增效。

笑看风云路的博客 1065

Hive(23):Select高级查询之SORT/ORDER/CLUSTER/DISTRIBUTE BY

order by会对输入做全局排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。sort by不是全局排序,其在数据进入reducer前完成排序。因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1,则sort by只保证每个reducer的输出有序,不保证全局有序。distribute by(字段)根据指定字段将数据分到不同的reducer,分发算法是hash散列。

u013938578的博客 1451

Hive排序与分发深度解析:ORDER BY、SORT BY、DISTRIBUTE BY、CLUSTER BY 区别详解

全局排序ORDER BY,一个Reducer拖到底局部排序SORT BY,每个文件自己比数据分发DISTRIBUTE BY,相同key到一起分发排序CLUSTER BY,两者结合限制你。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 4645

hive,order by ,distribute by ,sort by ,cluster by 区别,作用,用法

0 order by 是全局有序。sort by是在一个reduce中排序,该reduce的输出有序,是局部有序。distriute by c1 是作用于map输出的结果,把c1的值相同的记录输入到同一个reduce中;如果reduce数目比较少,c1多个不同值的记录会输入到同一个reduce中。 1distribute by要写在sort by前面,不然报错 2distribute by c1,c2sort by c1,c2 = cluster by c1,c2 ,注意distribute by...

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 2279

【Hive】中的Order by,Sort by,Distribute by,Cluster by的区别详解

1 . order by order by实现的是对输入的数据进行全局排序,可以有ASC升序(默认)和DESC降序,与mysql等数据库中order by的用法一样。 因此只在一个reducer中实现,因为多个reducer就无法保证全局数据有序; 但当只有一个reducer时,若输入数据的规模较大时,所需要的计算时间就会过长,效率低下。 2 . sort by sort by并不...

Aimo_哈撒的博客 1568

从虚拟机到双系统:手把手教你为Gromacs搭建最强Linux环境(含WSL2、Ubuntu22.04配置)

本文详细指导如何在Windows系统下为Gromacs分子动力学模拟搭建高性能Linux环境,涵盖WSL2和Ubuntu22.04双系统配置。通过对比虚拟机、WSL2和原生Linux的性能数据,提供GPU加速、内存优化等实用技巧,帮助科研人员提升计算效率。

weixin_30861797的博客 270

C#实现串口通讯程序

1、自动获取本地串口。2、根据传入串口基本属性参数打开串口。3、串口数据的发送接收功能(ASCII和HEX格式)。4、ASCII和HEX相互转换。csharp体验AI代码助手代码解读复制代码[Category("UserProperty")] [Description("轮廓半径")] public int Radius { get => radius;

2401_89221445的博客 1765

hive中order by、sort by、distribute by、cluster by的区别详解

1. order by 在hive中order by是进行全局排序的,这也就是说会最后会在一个reduce 中进行统一的排序,所以说使用order by进行全局排序尽量不要对数据量很 大 的表进行全局排序,这样效率会很低,会对进行排序的那一个reduce所在 的节点造成内存压力。 使用order by会受到如下属性的约束: set hive.mapred.mode=nonstrict; set hive.mapred.mode=strict; 默认是在nonstrict模式下的,如果在stric

AnameJL的博客 1266

2023电视专用!安卓电子相册APP避坑指南(附开源代码)

本文针对2023年智能电视用户,提供安卓电子相册APP的避坑指南与实战教程。文章详细解析了电视端相册应用的常见广告与兼容性陷阱,并指导用户如何安全获取、部署纯净的APK应用,通过核心设置实现无广告的个性化图片轮播体验,最终打造专属的家庭回忆墙。

weixin_29012677的博客 494

hive 中 order by ,sort by ,distribute by ,cluster by 详解

1. order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序) 只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。 set hive.mapred.mode=nonstrict; (default value / 默认值) set hive.mapred.mode=strict; order by 和数据库中的O...

u012957549的博客 2690

告别AT串口线!用STM32F407的USB FS口直连EC800M进行物联网通信

本文介绍了一种创新的物联网通信方案,利用STM32F407的USB FS接口直连EC800M模块,替代传统的AT串口线连接。通过详细的硬件对比、STM32CubeMX配置和USB驱动调试步骤,展示了如何实现更高效的AT指令通信,同时降低硬件复杂度和功耗。

weixin_29189987的博客 706

WPS访问权限不足怎么解决??具体怎么操作?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 4171

【Hive】 order by 、sort by 、distribute by 、cluster by 排序详解

【order by 】:全局排序,并且只有在一个reduce 的情况 【sort by 】 【distribute by 】 【cluster by】

Genebrother 2165

气象大模型光伏功率预测中的应用:从短期,超短期,中长期的实现与开源代码详解

本文详细介绍了基于大模型的光伏功率预测方法,涵盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1周)预测。文章首先讨论了数据准备与预处理,包括历史功率、气象、天文和电站特性数据的收集与特征工程。随后,针对不同预测需求,提出了多种深度学习模型:超短期预测采用1DCNN-LSTM混合模型,短期预测使用Transformer模型,中长期预测则通过多尺度特征提取模型和概率预测方法处理不确定性。文章还提供了模型训练、评估、部署和优化的完整流程,并开源了代码实现。未来研究方向包括结合数值天气预报、开发时

专注AI大模型,软件混淆,授权 1570

Hive中order by,sort by, distribute by, cluster by区别,用法详解

1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer)。但是对于大量数据这将会消耗很长的时间去执行。     这里跟传统的sql还有一点...

S_Running_snail的博客 571

【异常】claude : 无法将“claude”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径

如果claude方式1(临时):使用完整路径运行,比如:# Windows 批处理脚本示例 C:\你的脚本目录\claude . bat # PowerShell 脚本示例 C:\你的脚本目录\claude . ps1方式2(永久):将脚本所在文件夹添加到系统 PATH 环境变量(参考场景1的环境变量配置步骤),之后即可直接输入claude运行。错误核心原因:系统 PATH 环境变量中找不到claude对应的可执行文件/脚本。

奶爸的编程之路,也就一周冷个三天 3669

UG\NX二次开发 使用UF_CURVE_create_ocf_feature函数创建“在面上偏置”特征

使用UF_CURVE_create_ocf_feature函数创建“在面上偏置”特征。

王牌飞行员_里海的博客 850

Hive中的排序与分桶技术详解

本文综述了Hive中的四种排序技术(ORDERBY、SORTBY、DISTRIBUTEBY、CLUSTERBY)和分桶技术。ORDERBY实现全局排序但性能较低;SORTBY在Map端预排序;DISTRIBUTEBY控制数据分发规则,常与SORTBY配合使用;CLUSTERBY兼具分发和排序功能。分桶技术通过指定分桶字段和数量优化查询性能,支持高效取样和mapside join,并能自动控制小文件数量。这些技术通过不同方式优化了Hive的数据处理效率和查询性能。

535

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

hive order by sort by distribute by cluster by

order by 语法 Hive QL中的order by 类似于SQL语言中的ORDER BY语法。 排序方式:ASC|DESC 空值排序方式:NULLS FIRST|NULLS LAST 语法:order by 字段名称 ASC|DESC [NULLS FIRST|NULLS LAST] “ order by”子句中有一些限制。在严格模式下(即hive.mapred.mode = strict...

weixin_38491020的博客 607

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Hive】Hive 中四个BY对比:Order By,Sort By ,Distribute By,Cluster By [Hive面试常考]

Hive 中四个BY比较一、Order By二、Sort By三、 Distribute By四、 Cluster By 一、Order By  Order By:全局排序。只有一个 Reducer,无论将reducer设置为几,实际都只有一个。 效率较低。 有ASC(ascend): 升序(默认) DESC(descend): 降序两种排序方式。 ORDER BY 子句在SELECT 语句的结尾 例: select * from emp order by sal desc; 二、Sort By

m0_46568930的博客 2034

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2020.9.18课堂笔记(hive数据排序:ORDER BY、SORT BY、DISTRIBUTE BY、CLUSTER BY)

hive 1.order by ORDER BY (ASC|DESC)类似于标准SQL 只使用一个Reducer执行全局数据排序 速度慢,应提前做好数据过滤 支持使用CASE WHEN或表达式 支持按位置编号排序:set hive.groupby.orderby.position.alias=true; 2.SORT BY/DISTRIBUTE BY SORT BY对每个Reducer中的数据进行排序 当Reducer数量设置为1时,等于ORDER BY 排序列必须出现在SELECT column列表中 D

超可爱慕之 1161

hive中Sort By,Order By,Cluster By,Distribute By,Group By的区别

order by: hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数据多少,不管文件多少,都启用一个reduce进行处理。如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。 s

RangeYan 1069
上一篇: Hadoop中MapReduce整体源码解析
下一篇: Spark Submit流程源码详解(on yarn)
dab-hand
博客等级 码龄7年 10粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值