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
全局排序,一个Reduce Sort By
每个reduce内部进行排序,全局不是排序 Distribute By
类似MR中partition,进行分区,结合sort by使用 Cluster By
当distribute和sort字段相同时,使用方式

2.12 Hivet中order by,sort by、distribute by和cluster by的更多相关文章

  1. hive中order by,sort by, distribute by, cluster by的用法

    1.order by hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数 ...

  2. hive中order by ,sort by ,distribute by, cluster by 的区别(**很详细**)

    hive 查询语法 select [all | distinct] select_ condition, select_ condition from table_name a [join table ...

  3. hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  4. Hadoop Hive 中的排序 Order by ,Sort by ,Distribute by以及 Cluster By

    order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set h ...

  5. [转载]hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  6. Hive 中的 order by, sort by, distribute by 与 cluster by

    Order By order by 会对输入做全排序, 因此只有一个Reducer(多个Reducer无法保证全局有序), 然而只有一个Reducer, 会导致当输入规模较大时, 消耗较长的计算时间. ...

  7. hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法

    order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序) 只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set ...

  8. [大数据相关] Hive中的全排序:order by,sort by, distribute by

    写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出,详见Hadoop简单实现全排序. 现在学了hive,写sql大家都很熟悉,如果一个order by解决 ...

  9. hive 排序 order by sort by distribute by cluster by

    order by:     order by是全局排序,受hive.mapred.mode的影响.       使用orderby有一些限制:     1.在严格模式下(hive.mapred.mod ...

随机推荐

  1. RabbitMQ的工作模式

    简单模式: # #########################基于简单模式的 生产者 ######################### #!/usr/bin/env python import ...

  2. Canvas学习笔记——拖曳与投掷物体

    首先用一个例子来演示这个效果: 鼠标可以拖曳和投掷小球   // > 16 & 0xff, g = color >> 8 & 0xff, b = color > ...

  3. Java8新特性(一)概览

    最近看了好几段Java代码和以往的风格很不一样,都有点不太适应了,后来一查原来是Java8的新特性. 为了保持对技术的敏感性(面试...),这里我们一起来学习下Java8的新特性. 如果从技术角度来看 ...

  4. datatable的使用

    学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/20069 ...

  5. 【BZOJ1845】[Cqoi2005] 三角形面积并 几何+扫描线

    [BZOJ1845][Cqoi2005] 三角形面积并 Description 给出n个三角形,求它们并的面积. Input 第一行为n(N < = 100), 即三角形的个数 以下n行,每行6 ...

  6. 基于EasyIPCamera实现的数字网络摄像机IPCamera的模拟器IPC RTSP Simulator

    还记得去年在北京安博会上,看到一些厂家的展示台上,各种船舶.公路.车辆的高清视频直播,好奇这些数据是怎么接到现场的,现场成百上千家展台,不可能有那么大的带宽供应,细想数据肯定不是实时的,果然,盯着看了 ...

  7. Aspose.cells 读取Excel表中的图片问题

    一.说明 本文主要是讲解,怎么使用aspose.cells读取Excel表中的图片,并把图片转换成流或是image对象. 二.开发环境说明 开发工具vs2012,c#语言, 三.Aspose.cell ...

  8. Performance Tuning Using Linux Process Management Commands

    [root@bigdata-server-02 /]# ps --help all Usage: ps [options] Basic options: -A, -e all processes -a ...

  9. java的多生产者多消费者例子

    import java.util.concurrent.locks.*; public class Test9 { public static void main(String[] args) { / ...

  10. android开发基础知识了解

    JDK下载:www.oracle.com; SDK下载:www.android.developer.com; eclipse下载:www.eclipse.org;