一: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-----4510 小Q系列故事——为什么时光不能倒流

    小Q系列故事——为什么时光不能倒流 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)T ...

  2. HDUOJ----Eddy's research I

    Eddy's research I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. 玩转Masonry JS库来实现瀑布流Web效果

    工作项目中需要制作个Mobile上的Web App的展示,方便快捷访问和评价反馈.在展示页面能看到应用展示图,点击进入Web应用.我不是前端开发者,对HTML, CSS, JS这三剑客仅仅是略知一二. ...

  4. C# 采用钩子捕获键盘和鼠标事件-验证是否处于无人操作状态

    原文地址:https://www.cnblogs.com/gc2013/p/4036414.html 全局抽象类定义 using System; using System.Collections.Ge ...

  5. android适配器Adapter

    一.什么是适配器,适配器有什么用? 适配器是AdapterView视图(如ListView - 列表视图控件.Gallery - 缩略图浏览器控件.GridView - 网格控件.Spinner - ...

  6. Unix环境高级编程(十八)高级进程间通信

    本章主要介绍了基于STREAM的管道和UNIX域套接字,这些IPC可以在进程间传送打开文件描述符.服务进程可以使用它们的打开文件描述符与指定的名字相关联,客户进程可以使用这些名字与服务器进程通信. 1 ...

  7. 基于EM的多直线拟合实现及思考

    作者:桂. 时间:2017-03-22  06:13:50 链接:http://www.cnblogs.com/xingshansi/p/6597796.html 声明:欢迎被转载,不过记得注明出处哦 ...

  8. cocos2dx 3.3 场景切出时RenderTexture crash

    在cocos2dx 3.3中下面myScene在切出时会存在概率性崩溃(代码作了最大程度简化,仅为说明问题): class CmyLayer:public Layer{ public: CmyLaye ...

  9. [elk]停电日志离线恢复故障处理-elk环境极速搭建

    es数据手动导入 周末停电了两天,发现两天的日志没导入: 原因: 1. elk开启没设启动 2.日志入库时间是当前时间,不是日志本身的time字段 - 导入步骤 1. 先把日志拖下来 2. 事先需要干 ...

  10. [self.view addSubview:vc2.view]程序崩溃的解决办法

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIButt ...