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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何相互转换逗号分隔的字符串和List【转】

将逗号分隔的字符串转换为List 方法 1&#xff1a; 利用JDK的Arrays类 String str "a,b,c"; List<String> result Arrays.asList(str.split(",")); 方法 2&#xff1a; 利用Guava的Splitter String str "a, b, c"; List<String&g…

禁用F12和鼠标右键,防止查看控制台代码

虽然是个治标不治本的办法&#xff0c;还是挺有用的 在禁用同时&#xff0c;自身的代码健壮性也需要加强 // 屏蔽F12document.onkeydown function () {//f12键if (window.event && window.event.keyCode 123) {event.keyCode 0;event.returnValue false;}// enter…

java 文件解析异常_java中异常的解析

Java Exception&#xff1a;1、Error2、Runtime Exception 运行时异常3、Exception4、throw 用户自定义异常异常类分两大类型&#xff1a;Error类代表了编译和系统的错误&#xff0c;不允许捕获&#xff1b;Exception类代表了标准Java库方法所激发的异常。Exception类还包含运行…

Spring JMS:处理事务中的消息

1.引言 这篇文章将向您展示在使用JMS异步接收消息期间&#xff0c;使用者执行过程中的错误如何导致消息丢失。 然后&#xff0c;我将解释如何使用本地事务解决此问题。 您还将看到这种解决方案在某些情况下可能导致消息重复&#xff08;例如&#xff0c;当它将消息保存到数据库…

OS X EI Captain 下解决 There was a problem confirming the ssl certificate 问题

参考&#xff1a; Problem Confirming the SSL Certificate - OSX OS X EI Captain 下解决 There was a problem confirming the ssl certificate 问题 在安装 matplotlib 时&#xff0c;出现以下错误&#xff1a; python3 -mpip install matplotlibCollecting matplotlibCould…

Linux下Python编译安装

1.安装python3 1.1下载python源码包 网址&#xff1a;https://www.python.org/downloads/release/python-362/ 下载地址&#xff1a;https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz 1.1.1安装python前的库环境&#xff0c;非常重要 yum install gcc patch libffi-d…

call/apply以及this指向的理解

javascript是面向对象的语言&#xff0c;Function也是一种对象&#xff0c;有自己的属性和方法。call和apply就是js函数自带方法&#xff0c;挂在Fucntion.prototype上。一般调用某函数时&#xff0c;直接“函数名&#xff08;参数&#xff09;”的写法即可&#xff0c;函数内部…

Java排序算快速排序_Java排序算法 [快速排序]

package cn.com.dom4j.sort;public class QuickSort {/**快速排序在 Java中, 快速排序被用作基本数据类型的排序 (当然, 不只快速排序一种)快速排序是实践中的一种快速的排序算法, 在 C或对 Java基本类型的排序证特别有用.它的平均运行时间是 O(N logN), 该算法之所以特别快, 主…

Java Enterprise软件与应有的内容

许多开发人员在其职业生涯的某个阶段最终进入了Java“企业”世界。 我知道&#xff0c;仅此一个词就能引起各种反应&#xff0c;这是正确的。 通常&#xff0c;存在许多有趣的技术挑战的环境最终会成为那些没人愿意从事的环境&#xff0c;因为它们脆弱&#xff0c;难以处理且没…

OO第二单元作业总结

一&#xff1a;设计策略 第一次作业&#xff1a;第一次是单电梯傻瓜调度策略&#xff0c;因此我把调度器当作共享资源对象&#xff0c;有一个put和一个get方法&#xff0c;因为只有一个电梯&#xff0c;并且单次取出和投放一个请求&#xff0c;因此只需要同步控制一下这两个方法…

LESS+to+MCSS

此文已由作者郑海波授权网易云社区发布。欢迎访问网易云社区&#xff0c;了解更多网易技术产品运营经验一、前言虽然首页没有开始做&#xff0c;昨天仍决定将[MCSS](https://github.com/NetEaseWD/mcss)从身边的基友们开始向杭研推广了&#xff0c;从开始做这个直到现在推广遇到…

jmeter找不到java.dll_Windows下Jmeter安装出现Not able to find Java executable or version问题解决方案...

最近在做一个开放接口平台性能测试 , 指标是最少达到1000/s的并发 , 接口鉴权 百万级的表 在1s内完成..在众多压测工具中 ,,选择了Apache的jmeter ,于官网下载了最新版本http://jmeter.apache.org/download_jmeter.cgi (jmeter下载地址)由于jmeter运行是基于java的,所以需要…

localStorage/cookie 用法分析与简单封装

本地存储是HTML5中提出来的概念&#xff0c;分localStorage和sessionStorage。通过本地存储&#xff0c;web应用程序能够在用户浏览器中对数据进行本地的存储。与 cookie 不同&#xff0c;存储限制要大得多&#xff08;至少5MB&#xff09;&#xff0c;并且信息不会被传输到服务…

使用Lucene的搜索服务器搜索Jira问题

您可能还记得我的第一篇博客文章&#xff0c;其中描述了Lucene开发人员如何使用Lucene搜索应用程序查找我们的Jira问题来食用我们自己的狗食。 该应用程序已成为许多Lucene现代功能的强大展示&#xff0c;例如侧向钻取和动态范围刻面&#xff0c; 基于中缀匹配的新建议 &#…

迭代加深搜索 C++解题报告 :[SCOI2005]骑士精神

题目 此题根据题目可知是迭代加深搜索。 首先应该枚举空格的位置&#xff0c;让空格像一个马一样移动。 但迭代加深搜索之后时间复杂度还是非常的高&#xff0c;根本过不了题。 感觉也想不出什么减枝&#xff0c;于是便要用到了乐观估计函数&#xff08;Optimistic Estimation …

一个web项目web.xml的配置中context-param配置作用

<context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>2.紧接着,容器创建一个Servl…

JavA持有类_关于继承:Java持有对象的超类的类型

本问题已经有最佳答案&#xff0c;请猛点这里访问。我有两个类动物和狗。因为你可以从动物身上延伸出来。我可以毫无问题地编写这些类&#xff0c;但我注意到我可以像这样创建一个新的dog对象&#xff1a;Dog firstDog new Dog("rocky");没关系&#xff0c;但是当我…

CSS3 选择器用法小结

表单选择器&#xff1a; /*:enabled 可用的 :disabled 被禁用的 :focus 获取了焦点的 多用在表单元素上*/ input:enabled {...} input:disabled {...} input:focus {...} 属性选择器&#xff1a; /*[attribute] [attributevalue] 选择具有对应属性的元素 即使此属性没有实际作…

Postgres和Oracle与Hibernate的兼容性

在某些情况下&#xff0c;您的JEE应用程序需要支持Postgres和Oracle作为数据库。 Hibernate应该在这里完成工作&#xff0c;但是有些细节值得一提。 在为已经运行Oracle的应用程序启用Postgres时&#xff0c;我遇到了以下棘手的部分&#xff1a; BLOBs支持&#xff0c; CLO…

Ubuntu|ython3 :ImportError: cannot import name 'main'

1、问题 rootstephen-K55VD:/usr/bin# pip3 Traceback (most recent call last):File "/usr/bin/pip3", line 9, in <module>from pip import main ImportError: cannot import name main2、解决办法 编辑/usr/bin/pip3&#xff0c;修改代码 from pip._interna…