2.12 Hivet中order by,sort by、distribute by和cluster by
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy
一、order by
对全局数据的排序,仅仅只有一个reduce;Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序, 所以说,只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理(不管有多少map, 也不管文件有多少的block只会启动一个reducer)。但是对于大量数据这将会消耗很长的时间去执行。这里跟传统的sql还有一点区别:如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须 指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能 不能出结果,那么在这样的严格模式下,必须指定输出的条数。
hive (db_hive)> select * from emp order by empno desc;
二、sort by
Hive中指定了sort by,那么在每个reducer端都会做排序,也就是说保证了局部有序(每个reducer出来的数据是有序的, 但是不能保证所有的数据是有序的,除非只有一个reducer),好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率 (其实就是做一次归并排序就可以做到全局排序了)。
#我们可以设置一下reduce的个数 hive (db_hive)> set mapreduce.job.reduces= 3; hive (db_hive)> set mapreduce.job.reduces; mapreduce.job.reduces=3#再执行的时候就会有3个reduce结果,在命令行上输出结果时默认合并了, hive (db_hive)> select * from emp sort by empno asc;#如果用下面语句将结果插入到本地目录,就会看到三个结果集 insert overwrite local directory'/opt/datas/sortby-res'select * from emp sort by empno asc;[root@hadoop-senior ~]# ls /opt/datas/sortby-res/ 000000_0 000001_0 000002_0[root@hadoop-senior ~]# cat /opt/datas/sortby-res/000000_0 7654MARTINSALESMAN76981981-9-281250.01400.030 7698BLAKEMANAGER78391981-5-12850.0\N30 7782CLARKMANAGER78391981-6-92450.0\N10 7788SCOTTANALYST75661987-4-193000.0\N20 7839KINGPRESIDENT\N1981-11-175000.0\N10 7844TURNERSALESMAN76981981-9-81500.00.030[root@hadoop-senior ~]# cat /opt/datas/sortby-res/000001_0 7499ALLENSALESMAN76981981-2-201600.0300.030 7521WARDSALESMAN76981981-2-221250.0500.030 7566JONESMANAGER78391981-4-22975.0\N20 7876ADAMSCLERK77881987-5-231100.0\N20 7900JAMESCLERK76981981-12-3950.0\N30 7934MILLERCLERK77821982-1-231300.0\N10[root@hadoop-senior ~]# cat /opt/datas/sortby-res/000002_0 7369SMITHCLERK79021980-12-17800.0\N20 7902FORDANALYST75661981-12-33000.0\N20
三、distribute by
类似于MapReduce中分区partition,对数据进行分区,结合sort by进行使用;
distribute by必须要写在sort by之前,因为distribute by的功能是要先分区,sort by是对分区进行排序的;
#我这里是对deptno进行分区,然后对empno排序 hive (db_hive)> insert overwrite local directory '/opt/datas/distby-res' select * from emp distribute by deptno sort by empno asc;#emp表的最后一个字段是deptno,从下面可以看出是按最后一个字段分区的 [root@hadoop-senior ~]# cat /opt/datas/distby-res/000000_0 7499ALLENSALESMAN76981981-2-201600.0300.030 7521WARDSALESMAN76981981-2-221250.0500.030 7654MARTINSALESMAN76981981-9-281250.01400.030 7698BLAKEMANAGER78391981-5-12850.0\N30 7844TURNERSALESMAN76981981-9-81500.00.030 7900JAMESCLERK76981981-12-3950.0\N30[root@hadoop-senior ~]# cat /opt/datas/distby-res/000001_0 7782CLARKMANAGER78391981-6-92450.0\N10 7839KINGPRESIDENT\N1981-11-175000.0\N10 7934MILLERCLERK77821982-1-231300.0\N10[root@hadoop-senior ~]# cat /opt/datas/distby-res/000002_0 7369SMITHCLERK79021980-12-17800.0\N20 7566JONESMANAGER78391981-4-22975.0\N20 7788SCOTTANALYST75661987-4-193000.0\N20 7876ADAMSCLERK77881987-5-231100.0\N20 7902FORDANALYST75661981-12-33000.0\N20
四、cluster by
当distribute by和sort by字段相同时,可以使用cluster by;
cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。 所以最终的结果是每个Reduce处理的数据范围不重叠,
而且每个Reduce内的数据是排序的,而且可以打到全局有序的结果。
## hive (db_hive)> insert overwrite local directory '/opt/datas/cluster-res' select * from emp cluster by empno; ## [root@hadoop-senior ~]# ls /opt/datas/cluster-res/ 000000_0 000001_0 000002_0[root@hadoop-senior ~]# cat /opt/datas/cluster-res/000000_0 7521WARDSALESMAN76981981-2-221250.0500.030 7566JONESMANAGER78391981-4-22975.0\N20 7698BLAKEMANAGER78391981-5-12850.0\N30 7782CLARKMANAGER78391981-6-92450.0\N10 7788SCOTTANALYST75661987-4-193000.0\N20 7839KINGPRESIDENT\N1981-11-175000.0\N10 7902FORDANALYST75661981-12-33000.0\N20[root@hadoop-senior ~]# cat /opt/datas/cluster-res/000001_0 7369SMITHCLERK79021980-12-17800.0\N20 7654MARTINSALESMAN76981981-9-281250.01400.030 7876ADAMSCLERK77881987-5-231100.0\N20 7900JAMESCLERK76981981-12-3950.0\N30[root@hadoop-senior ~]# cat /opt/datas/cluster-res/000002_0 7499ALLENSALESMAN76981981-2-201600.0300.030 7844TURNERSALESMAN76981981-9-81500.00.030 7934MILLERCLERK77821982-1-231300.0\N10
五、总结
OrderBy 全局排序,一个ReduceSort By 每个reduce内部进行排序,全局不是排序Distribute By 类似MR中partition,进行分区,结合sort by使用Cluster By 当distribute和sort字段相同时,使用方式
转载于:https://www.cnblogs.com/weiyiming007/p/10761404.html
2.12 Hivet中order by,sort by、distribute by和cluster by相关推荐
- hive中order by,sort by, distribute by, cluster by作用以及用法
1. order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会 ...
- Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解
在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by clus ...
- 4种排序方式比较:order by, sort by, distribute by, cluster by
文章记录了4种排序方式:order by, sort by, distribute by, cluster by 总结: order by 全局排序,只有一个 Reducer,通过order对字段进行 ...
- Hive中的order by ,sort by ,distribute by , cluster by 区别
#Hive的本质就是MapReduce #设置reduce个数 set mapreduce.job.reduces=num //设置num数量的reduce #查看设置reduce个数 set ma ...
- hive 中排序order by,sort by,distribute by使用
前提:hive 中使用的排序有oder by, sort by,distribute By,cluster By 具体使用如下 测试数据: 0: jdbc:hive2://hadoop-03:1000 ...
- hive四种排序Order By , Sort By ,Distribute By ,Cluster By
前文 Hive的本质是MapReduce,MapReduce中如何排序的?? MapReduce分为几种: 1.全排序order By: 结果只有一个(也就是只有一个分区),所有的数据整体有序. 2. ...
- order by,sort by,distribute by,cluster by的区别是什么?
前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...
- Hive中orderBy,sortBy,distribute by,cluster by,group by
文章目录 1.总结 2.order by 3.sort by 4.distribute by 5.distribute by + sort by 6.Cluster by 7.group by 和di ...
- hive 中 order by、sort by、distribute by 、cluster by 区别
1. select 语法 Hive 中的 SELECT 基础语法和标准SQL语法基本一致,支持 WHERE.DISTINCT.GROUP BY.ORDER BY.HAVING.LIMIT.子查询等.语 ...
最新文章
- mysql 5.7 json函数_Mysql5.7中对于JSON函数设置的案例详细说明
- Imagination升级PowerVR图形架构,高端移动设备或将迎来重大升级
- 数字语音信号处理学习笔记——语音信号的短时时域分析(4)
- c# applibrary实现一个Sheet表中存放多张DataTable数据
- php用于防SQL注入的几个函数
- mybatis学习(8):The server time zone value '???ú±ê×??±??' is unrecognized or represents more
- 【2018ACM山东省赛 - G】Games(Nim博弈 + dp)
- Android分辨率比例为1,修改android5.1系统分辨率
- Pytorch中 .numpy() .item() .cpu() 区别
- Flink Java 使用map reduce实现wordcount
- Microsoft Active Directory(LDAP)连接常见错误代码
- vue 登录页面背景 - 动态粒子特效包括vue3使用 (Vue-Particles)
- 滑动平均滤波c语言_9种简单的数字滤波算法(C语言源程序)
- Eureka微服务之服务核心动作
- 百度地图 java 纠偏_模板:纠偏服务首页 | 百度地图API SDK
- 虚幻4英雄联盟模型分享——荆棘之刺婕拉
- 2017-2018-2 1723《程序设计与数据结构》实验四 实验五 课程总结 总结
- 微信公众号二维码不同环境差异化处理
- 小米note开发者选项如何开启
- 10大PPT模板可直接套用助PM正确写好年终总结