写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出,详见Hadoop简单实现全排序。

现在学了hive,写sql大家都很熟悉,如果一个order by解决了全排序还用那么麻烦写mapreduce函数吗?

事实上,hive使用order by会默认设置reduce的个数=1,既然reducer的个数都是1了,结果自然全排序

这也违背了充分利用分布式计算进行海量数据排序的初衷,效率低下。

那么hive又提供了一个可供选择的方式:sort by

它会保证每个reducer的输出文件是有序的(其实是废话,每个reducer的输出当然是有序的!),要想实现全排序,还得加一个order by的过程,就是对sort by的reduce输出结果再进行一次排序

所以:

要想用hive实现全排序:

要么用order by,但这样默认了reducer个数为1,效率低下。

要么用sort by+order by,sort by过程可以设置reducer个数(n),order by过程用n个reducer的输出文件进行一次全排序,得到最终的结果

(个人理解,如有错误请不吝赐教,感谢!)

注:

(1)对于order by,sort by:

我们可以使用limit进行限制返回的行数,从而实现抓出数据的top N的情形。

(2)对于distribute by

sort by为每个reducer产生一个排序文件。在有些情况下,你需要控制某个特定行应该到哪个reducer,通常是为了进行后续的聚集操作。hive的distribute by就派上用场了

from table select year, temperature distribute by year sort by year asc, temperature desc; 

上面实现了局部排序,且规定了:根据年份和气温对气象数据进行排序,以确保所有具有相同年份的行最终都在一个reducer分区中(文件下),可以看出,distribute by经常与sort by一起使用

需要注意的是,hive要求distribute by要写在sort by之前

(3)对于cluster by:

简而言之:cluster by column=distribute by column+sort by column(注意,都是针对column列,且采用默认ASC)

即对于上面例子:

from table select year, temperature cluster by year;

就等于:

from table select year, temperature distribute by year sort by year; 

当然这失去了按照气温排序的要求。

参考:https://www.jianshu.com/p/1a3625a71118  仅供个人学习,有改动

[大数据相关] Hive中的全排序:order by,sort by, distribute by的更多相关文章

  1. hive中的全排序

    写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出 现在学了Hive,写sql大家都很熟悉,如果一个order by解决了全排序还用那么麻烦写mapred ...

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

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

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

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

  4. 从技术 Leader 的招聘需求看,如何转岗为当前紧缺的大数据相关人才?

    前段时间,跟候选人聊天的时候,一个有多年工作经验的资深 iOS 工程师告诉我,他最近正在学习 Machine Learning 相关的知识.他觉得,对于程序员来说,技术进步大大超过世人的想象,如果你不 ...

  5. Build2016上值得一看的大数据相关Session

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:Build2016开完很久了,现在才来回顾下,就说说那些和大数据相关的Session, ...

  6. 漫谈ELK在大数据运维中的应用

    漫谈ELK在大数据运维中的应用 圈子里关于大数据.云计算相关文章和讨论是越来越多,愈演愈烈.行业内企业也争前恐后,群雄逐鹿.而在大数据时代的运维挑站问题也就日渐突出,任重而道远了.众所周知,大数据平台 ...

  7. 大数据平台Hive数据迁移至阿里云ODPS平台流程与问题记录

    一.背景介绍 最近几天,接到公司的一个将当前大数据平台数据全部迁移到阿里云ODPS平台上的任务.而申请的这个ODPS平台是属于政务内网的,因考虑到安全问题当前的大数据平台与阿里云ODPS的网络是不通的 ...

  8. hdfs数据到hive中,以及hdfs数据隐身理解

    hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...

  9. 各类人工智能&大数据相关比赛

    比赛技巧:https://zhuanlan.zhihu.com/p/28084438 文章来源: https://www.imooc.com/article/72863 随着近几年人工智能和大数据的快 ...

随机推荐

  1. 【转】Java基础——面试题汇总

    1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Runtime Env ...

  2. Fortify漏洞之Open Redirect(开放式重定向)

    继续对Fortify的漏洞进行总结,本篇主要针对  Open Redirect(开放式重定向)  的漏洞进行总结,如下: 1.1.产生原因: 通过重定向,Web 应用程序能够引导用户访问同一应用程序内 ...

  3. linux查看日志报错

    查看运行时错误: tail  -f  catalina.out   | grep   -C   10  'Exception'          10是行数: 单引号里面的是要查找的关键字:

  4. Android利用系统原生BottomNavigationView实现底部导航

    <android.support.design.widget.BottomNavigationView android:id="@+id/navigation" androi ...

  5. Spring+Dubbo+TestNG接口测试初探

    最近因工作原因,需要测试dubbo接口,通过公司同事写的框架,再结合度娘的帮助,自己做了一些总结记录. 通过下文意在说明如何搭建一个spring + dubbo + testng的测试环境,并完成一个 ...

  6. Python面向对象Day2

    一.组合 给一个类的对象分组一个属性,这个属性是另一个类的对象 意义:让类的对象与另一个类的对象产生关系,也叫类与类之间产生关系(继承也能) 好处: ① 让两个类之间产生关系 ② 某一个对象是独立存在 ...

  7. Yum三方仓库——RPMForge

    参考:How to Enable RPMForge Repository in RHEL/CentOS 7.x/6.x/5.x RPMForge / RepoForge这两个项目已经死亡,不应该使用 ...

  8. visual studio调试exe程序

    标题:How to debug and profile any EXE with Visual Studio 文章:https://devblogs.microsoft.com/visualstudi ...

  9. 利用socketserver模块的简单功能来完成一个多线程消息传递

    客户端:客户端的代码无需改动 import socket client = socket.socket() client.connect(("127.0.0.1",8777)) w ...

  10. maya 在 pymel 中运行 mel

    maya 在 pymel 中运行 mel 前言 maya mel 自身定义了很多有用的方法,当我们用 pymel 开发的时候,不想重新写一遍 mel 已经有的功能,那么就可以在 pymel 中运行 m ...