一:order by

order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间。关于order by的详细介绍请参考这篇文章:Hive Order by操作

二:sort by

sort by不是全局排序,其在数据进入reducer前完成排序,因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1,则sort by只会保证每个reducer的输出有序,并不保证全局有序。sort by不同于order by,它不受Hive.mapred.mode属性的影响,sort by的数据只能保证在同一个reduce中的数据可以按指定字段排序。使用sort by你可以指定执行的reduce个数(通过set mapred.reduce.tasks=n来指定),对输出的数据再执行归并排序,即可得到全部结果。

三:distribute by

distribute by是控制在map端如何拆分数据给reduce端的。hive会根据distribute by后面列,对应reduce的个数进行分发,默认是采用hash算法。sort by为每个reduce产生一个排序文件。在有些情况下,你需要控制某个特定行应该到哪个reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此,distribute by经常和sort by配合使用。

注:Distribute by和sort by的使用场景

1.Map输出的文件大小不均。

2.Reduce输出文件大小不均。

3.小文件过多。

4.文件超大。

四:cluster by

cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是倒叙排序,不能指定排序规则为ASC或者DESC。

示例:

#sort by

  1. hive (hive)> select * from user;
  2. OK
  3. id  name
  4. 1   lavimer
  5. 2   liaozhongmin
  6. 3   liaozemin

使用sort by按id降序排列:

  1. hive (hive)> select * from user sort by id desc;
  2. //MapReduce...
  3. Execution completed successfully
  4. Mapred Local Task Succeeded . Convert the Join into MapJoin
  5. OK
  6. id  name
  7. 3   liaozemin
  8. 2   liaozhongmin
  9. 1   lavimer
  10. Time taken: 3.828 seconds

#distribute by

  1. hive (hive)> select * from user;
  2. OK
  3. id  name
  4. 1   lavimer
  5. 2   liaozhongmin
  6. 3   liaozemin
  7. 100 hello
  8. 200 hadoop

#设置reduce的个数

  1. hive (hive)> set mapred.reduce.tasks=2;
  2. hive (hive)> set mapred.reduce.tasks;
  3. mapred.reduce.tasks=2

#使用带distribute by的数据从user表中导出数据

  1. hive (hive)> insert overwrite local directory '/usr/local/src/user.txt' select * from user distribute by id;
  2. //MapReduce...
  3. Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 2

注:从上述语句执行过程可以看到启动了两个Reducer。

#导出到本地的数据

  1. [root@liaozhongmin5 src]# cd user.txt/
  2. [root@liaozhongmin5 user.txt]# ll
  3. 总用量 8
  4. -rwxrwxrwx. 1 root root 36 1月  30 14:35 000000_0
  5. -rwxrwxrwx. 1 root root 22 1月  30 14:35 000001_0
  6. [root@liaozhongmin5 user.txt]# more 000000_0
  7. 2<span style="white-space:pre">  </span>liaozhongmin
  8. 100<span style="white-space:pre"> </span>hello
  9. 200<span style="white-space:pre"> </span>hadoop
  10. [root@liaozhongmin5 user.txt]# more 000001_0
  11. 1<span style="white-space:pre">  </span>lavimer
  12. 3<span style="white-space:pre">  </span>liaozemin
  13. [root@liaozhongmin5 user.txt]#

注:从上述结果中,我们可以看到数据被分发到了两个Reducer中处理。

#distribute by和sort by结合使用

  1. hive (hive)> select * from temperature;
  2. OK
  3. year    tempra
  4. 2008    30`C
  5. 2008    35`C
  6. 2008    32.5`C
  7. 2008    31.5`C
  8. 2008    31`C
  9. 2015    41`C
  10. 2015    39`C
  11. 2015    36`C
  12. 2015    33`C
  13. 2015    35`C
  14. 2015    37`C

#根据年份和气温对气象数据进行排序,以确保所具有相同年份的行最终都在一个reduce分区中。

    1. hive (hive)> select * from temperature distribute by year sort by year asc,tempra desc;
    2. //MapReduce...
    3. Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 2
    4. //MapReduce...
    5. OK
    6. year    tempra
    7. 2008    35`C
    8. 2008    32.5`C
    9. 2008    31`C
    10. 2008    31.5`C
    11. 2008    30`C
    12. 2015    41`C
    13. 2015    39`C
    14. 2015    37`C
    15. 2015    36`C
    16. 2015    35`C
    17. 2015    33`C
    18. Time taken: 17.358 seconds

Hive中order by,sort by,distribute by,cluster by的区别的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. hive中order by、distribute by、sort by和cluster by的区别和联系

    hive中order by.distribute by.sort by和cluster by的区别和联系 order by order by 会对数据进行全局排序,和oracle和mysql等数据库中 ...

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

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

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

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

随机推荐

  1. HDUOJ----4504 威威猫系列故事——篮球梦

    威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  2. Workflow_上传和下载Workflow编译方式(汇总)

    2014-12-27 Created By BaoXinjian

  3. 页面日期选择控件--jquery ui datepicker 插件

    日期选择插件Datepicker是一个配置灵活的插件,我们可以自定义其展示方式,包括日期格式.语言.限制选择日期范围.添加相关按钮以及其它导航等.官方地址:http://docs.jquery.com ...

  4. React dva 的使用

    各大传送门: DvaJS Github DvaJS API与示例 了解 dva- dva = React-Router + Redux + Redux-saga + fetch - dva的初衷是(其 ...

  5. mysql - 在已有真实数据的表的基础上加入自增主键

    先删除自增长在删除主键Alter table tb change id id int(10);//删除自增长Alter table tb drop primary key;//删除主建 然后再常规添加 ...

  6. leetcode-000-序

    一直以来学习的都是些理论,编程一直用的也是MATLAB,其他语言很少涉及.希望自己弥补这一块短板,时间初步定在五月底,拿出半个月时间学习Python,学多少算多少. 直接从leetcode开始: ar ...

  7. .net程序调试一:快速定位异常

    作为一个程序员,解BUG是我们工作中常做的工作,甚至可以说解决问题能力是一个人工作能力的重要体现.因为这体现了一个程序员的技术水平.技术深度.经验等等. 那么在我们解决BUG的过程中,定位问题是非常重 ...

  8. RednaxelaFX写的文章/回答的导航帖

    https://www.zhihu.com/people/rednaxelafx/answers http://hllvm.group.iteye.com/group/topic/44381#post ...

  9. 什么是GC Roots

    GC Root 2012年11月28日  ⁄ 综合 ⁄ 共 625字 ⁄ 字号  小 中 大  ⁄ 评论关闭   常说的GC(Garbage Collector) roots,特指的是垃圾收集器(Ga ...

  10. 《SPARK/TACHYON:基于内存的分布式存储系统》-史鸣飞(英特尔亚太研发有限公司大数据软件部工程师)

    史鸣飞:大家好,我是叫史鸣飞,来自英特尔公司,接下来我向大家介绍一下Tachyon.我事先想了解一下大家有没有听说过Tachyon,或者是对Tachyon有没有一些了解?对Spark呢? 首先做一个介 ...