一、Order by

order by会对输入的数据做全局排序,因此只有一个reducer,多个reducer无法保证全局有序。只有一个reducer的弊端在于当输入的数据量较大时,需要较长的计算时间。order by跟数据库中的order by功能一致,按照某一项或几项排序输出。它与数据库中 order by 的区别在于在hive.mapred.mode = strict 模式下 必须指定 limit 否则执行会报错。因为在order by 状态下所有数据会到一台服务器进行reduce操作也即只有一个reduce,如果在数据量大的情况下会出现无法输出结果的情况,如果指定limit,那么只有一个reduce也可以处理过来。

二、Sort by

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

三、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。

Hive中的四种排序相关推荐

  1. Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解

    在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by clus ...

  2. HOL中的四种排序,Order By、Sort By、Distribute By、Cluster By

    1.全局排序(Order By) Order By:全局排序,一个Reducer 1.使用 ORDER BY 子句排序 ASC(ascend): 升序(默认) DESC(descend): 降序 2. ...

  3. Hive中的几种排序方式

    Order By Order By 会对输入做全局的排序,所以只会有一个reduce,这样的话在大量数据面前查询效率较低,费时较长 select * from salary order by sala ...

  4. 061 hive中的三种join与数据倾斜

    一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...

  5. 大数据之Hive:hive中的四个by

    目录 1.前言 2.order by 3.sort by 4.distribute by 5.Cluster By 6.实际需求 1.前言 hive中的四个by分别为order by,sort by, ...

  6. php主要算法设计,四种排序算法设计(PHP)

    标签 详细分析 /** * 四种排序算法设计(PHP) * * 1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当 ...

  7. 比较排序算法的时间复杂度 c语言,c语言四种排序算法时间复杂度比较(10页)-原创力文档...

    1.方案设计: 我这次实验通过随机生成30000个随机数,把随机数存到数组中,用这同一组随机数据分别进行四种排序,直接插入排序.直接选择排序.冒泡排序和快速排序.还通过了调用txt文件把运算所需时间导 ...

  8. golang实现四种排序(快速,冒泡,插入,选择)

    本文系转载 原文地址: http://www.limerence2017.com/2019/06/29/golang07/ 前面已经介绍golang基本的语法和容器了,这一篇文章用golang实现四种 ...

  9. 四种排序:选择,插入,冒泡,快速排序原理及其对应的时间、空间复杂度解析

    四种排序:选择,插入,冒泡,快速排序原理及其对应的时间空间复杂度 首先,在了解四种排序之前,让我们来了解一下什么是时间复杂度和空间复杂度. 时间复杂度:算法的时间复杂度是一个函数,它定性描述该算法的运 ...

最新文章

  1. 系统启动 之 Linux系统启动概述(2)
  2. idea高效找出全部未被使用的代码
  3. java组合数打印出结果_Java打印一组数据中,抽取固定数目的数的所有可能组合...
  4. linux qt计算器,QT 计算器小程序
  5. easyui小清新俺也晒晒 视频管理软件bs项目
  6. Atitit onvif协议获取rtsp地址播放java语言attilx总结
  7. 用几何画板演示高尔顿钉板动画
  8. 给Jetson Nano更换eMMC闪存(扩容)
  9. Civil 3D API二次开发学习指南
  10. linux u盘 中毒,linux对中毒u盘分区和格式化
  11. php 公众号 欢迎,关注公众号的欢迎语怎么设置?公众号欢迎语怎么加链接?
  12. 【正则表达式】从字符串中提取数字
  13. Python的数据库
  14. 虚拟机VMware Workstation安装使用教程
  15. [LabVIEW应用]Labview如何将PC机和仪器设备连接到一起
  16. 【考研英语语法】状语从句精讲
  17. 收支系统(超超超简版)1.0
  18. 去哪儿网——项目管理平台助力研发效率提升
  19. 【Qt】disconnect一个lambda匿名函数
  20. Windows找不到文件c:program files怎么办?

热门文章

  1. 2061 【例1.2】梯形面积
  2. 那些困扰你多年的项目管理问题,终于有解决方案了!
  3. 浅谈HEVC中的CTU CU PU TU
  4. 职教云自动选题、答题并自动修改答题已用时间 脚本
  5. Java8函数式编程、Stream流、Option的使用,一篇足够了
  6. MySQL---DQL语言
  7. rust 模块/文件/project
  8. 【计算机视觉实验二】特征提取与匹配
  9. 微信开源C++Libco介绍与应用(二)
  10. Flutter滑动体验对齐原生-滑动曲线篇