在算法中,各个排序算法的复杂度都比较高,正常情况下为O (nlogn) ,所以当数据量特别大的时候,对数组进行排序消耗都很大。

因为hive的计算引擎MapReduce是分布式系统,

利用分布式的特点,可以对排序的数据各个机器节点内有序,再做归并排序,

虽然这样做的复杂度还是O (nlogn) ,

但是对比老版本hive的做法,改善不少。

老版本hive的order by并不是做归并排序,而是将所有数据都集合到一台机器上,然后做一个全局排序,

这样做的缺点就是,

一个没办法利用分布式系统的并发计算,因为在一台机器上,这台机器的cpu压力很大,

第二个缺点是这台机器的内存压力也很大,因为计算要发生在内存中,数据量很大的情况下,一台机器的内存并放不下这么多的数据。

在hive的严格模式中,order by的时候会要求你加上limit字段

尽管已经用归并排序做了优化,但是在大数据统计中,全局排序的场景也不太常见,

针对计算topN的排序,只要限制了limit字段,每台机器都可以只排序前N条数据,然后对N条数据做归并排序,

速度上快了很多,毕竟,我们可能只需要计算top一万,但是总数据量可能有一亿(总数据量总是高的离谱,但top范围总是很低的)。

hive还提供了一个order by 的弱化版本,就是sort by,减去了最后一个归并排序,只要各个机器节点里的数据有序就行了

比如n条数据,被分成n/m条数据,那么复杂度就是  (n/m)*(m)*log(m)=nlogm,分的越离散(m越小),速度越快,

因为不需要最后做归并排序(m越小,数据条数就越多,归并排序的时候就越耗时)

关于n条如何被分为m条,需要用distribute by指定字段,比如指定name,这样就可以保证相同name的数据有序了。

为什么说sort by 是order by 的弱化版本,

因为没有了最后一步归并排序,所以最后的结果不是全局有序的,只是局部有序的

hive的排序 order by和sort by的更多相关文章

  1. Hive中的order by、sort by、distribute by、cluster by解释及测试

    结论: order by:全局排序,这也是4种排序手段中唯一一个能在终端输出中看出全局排序的方法,只有一个reduce,可能造成renduce任务时间过长,在严格模式下,要求必须具备limit子句. ...

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

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

  3. Hive中的Order by与关系型数据库中的order by语句的异同点

    在Hive中,ORDER BY语句是对查询结果集进行整体的排序,最终将会产生一个reducer进行全局的排序,达到的最终结果是和传统的关系型数据库是一样的. 在数据量非常大的时候,全局排序的单个red ...

  4. 2.12 Hivet中order by,sort by、distribute by和cluster by

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy 一.order by 对全局数据的排序,仅仅只有一个red ...

  5. hive 分组排序,topN

    hive 分组排序,topN 语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rankpartition by:类似hiv ...

  6. hive的排序,分組练习

    hive的排序,分組练习 数据: 添加表和插入数据(数据在Linux本地中) create table if not exists tab1( IP string, SOURCE string, TY ...

  7. [Hive_9] Hive 的排序

    0. 说明 全排序(order by) | 部分排序(sort by) | hash 分区(distribute by)  | cluster by 1. 前期准备 1.1 建表 create tab ...

  8. SAS中的Order By - Proc Sort

    SAS中的Order By - Proc Sort 1.排序proc sort proc sort在按数据集中某一个变量或几个变量的升序或降序将记录重新排列,并把结果保存在输出数据集中,如果不另外指定 ...

  9. 经典排序算法 – 插入排序Insertion sort

    经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种, ...

随机推荐

  1. Linux执行.sh文件,提示No such file or directory的问题

    问题描述 在window平台下,写好shell脚本文件,迁移到linux平台,赋过可执行权限,执行该sh文件,却提示NO such file or directory 解决方案 难道是文件格式兼容性问 ...

  2. WERTYU UVA - 10082

    ​ A common typing error is to place the hands on the keyboard one row to the right of the correct po ...

  3. Pytorch系列:(二)数据加载

    DataLoader DataLoader(dataset,batch_size=1,shuffle=False,sampler=None, batch_sampler=None,num_worker ...

  4. 一个DDOS木马后门病毒的分析

    http://blog.csdn.net/qq1084283172/article/details/49305827 一.样本信息 文件名称:803c617e665ff7e0318386e24df63 ...

  5. Python socket(TCP阻塞模式)基础程式

    前置知识:Python基础语法,socket库 tips: 1. 默认HOST_IP:127.0.0.1 2. 默认HOST_PORT:7676 参考代码: 1. 客户端程式 #!/usr/bin/e ...

  6. DVWA之Insecure Captcha

    Insecure CAPTCHA Insecure CAPTCHA,意思是不安全的验证码,CAPTCHA是Completely Automated Public Turing Test to Tell ...

  7. 基于frida框架Hook native中的函数(1)

    作者:H01mes撰写的这篇关于frida框架hook native函数的文章很不错,值得推荐和学习,也感谢原作者. 0x01 前言 关于android的hook以前一直用的xposed来hook j ...

  8. Docker仓库-Docker Hub

    Docker Hub Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量上百万的镜像,大部分需求都可以通过在Docker Hub 中直接下载镜像来实现. 注册: https:/ ...

  9. 本地计算机上的Apple Mobile Device服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止

    解决办法:1.开始--运行--regedit.exe,打开注册表编辑器,删除以下两个键: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Wi ...

  10. (8)MySQL进阶篇SQL优化(InnoDB锁-共享锁、排他锁与意向锁)

    1.锁的分类 锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制.之前MyISAM锁章节已经讲过锁分类,而InnoDB锁按照粒度分为锁定整个表的表级锁(table-level l ...