hive中的全排序
写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出
现在学了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;
当然这失去了按照气温排序的要求。
hive中的全排序的更多相关文章
- [大数据相关] Hive中的全排序:order by,sort by, distribute by
写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出,详见Hadoop简单实现全排序. 现在学了hive,写sql大家都很熟悉,如果一个order by解决 ...
- HIVE中join、semi join、outer join
补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...
- Hive中SELECT TOP N的方法(order by与sort by的区别)
我想说的SELECT TOP N是取最大前N条或者最小前N条. Hive提供了limit关键字,再配合order by可以很容易地实现SELECT TOP N. 但是在Hive中order by只能使 ...
- Hadoop学习笔记: 全排序
在Hadoop中实现全排序有如下三种方法: 1. 只使用一个reducer 2. 自定义partitioner 3. 使用TotalOrderPartitioner 其中第一种方法显然违背了mapre ...
- Hive中的排序语法
ORDER BY hive中的ORDER BY语句和关系数据库中的sql语法相似.他会对查询结果做全局排序,这意味着所有的数据会传送到一个Reduce任务上,这样会导致在大数量的情况下,花费大量时间. ...
- mysql分组排序取最大值所在行,类似hive中row_number() over partition by
如下图, 计划实现 :按照 parent_code 分组, 取组中code最大值所在的整条记录,如红色部分.(类似hive中: row_number() over(partition by)) sel ...
- Hive 中的四种排序详解,再也不会混淆用法了
Hive 中的四种排序 排序操作是一个比较常见的操作,尤其是在数据分析的时候,我们往往需要对数据进行排序,hive 中和排序相关的有四个关键字,今天我们就看一下,它们都是什么作用. 数据准备 下面我们 ...
- Hive 中的 order by, sort by, distribute by 与 cluster by
Order By order by 会对输入做全排序, 因此只有一个Reducer(多个Reducer无法保证全局有序), 然而只有一个Reducer, 会导致当输入规模较大时, 消耗较长的计算时间. ...
- 谈谈hive中join下on和where
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 很多人如果先接触mysql的执行顺序(from ->on ->join -&g ...
随机推荐
- data-icon=""图片还可以是自定义的?
自定义的图片怎么写啊? data-icon = "地址" 不对啊????? 不是写地址,而是设置css 比如 data-icon="mm" 那么在css中肯定有 ...
- 编写一个go gRPC的服务
前置条件: 获取 gRPC-go 源码 $ go get google.golang.org/grpc 简单例子的源码位置: $ cd $GOPATH/src/google.golang.org/gr ...
- bash 学习笔记
shell:能够操作应用程序的接口就称为shell. Linux由C编写的. TAB键的使用 alias:设置别名
- 蓝桥杯---波动数列(dp)(背包)(待解决)
问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减 ...
- VS打包资源文件,转自推酷,请小星同学查看
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- spring Integration服务总线
最新项目中使用数据交换平台,主要通过交换平台抓取HIS数据库医生医嘱检查检验等数据以及FTP上的txt文件,html等病程文件,生成XML文件,之后通过业务系统按业务规则对数据进行处理,再将其存入数据 ...
- mysql 存储结构
mysql存储结构:数据库->表->数据 1)管理数据库 增:create database sjk; 删:drop database sjk; 改:alter database sjk; ...
- 网站图片优化-解码JPEG
首先,老大拿了两个网站工具的分析跟我说,让我分析一下我们网站的图片有没有什么方法优化. [网站分析工具]webpage test: http://www.webpagetest.org/谷歌pages ...
- 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型
[Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...
- Hello world!让 grub2 引导自己的操作系统 Xos 内核
按照惯例,Xos 的第一步是在屏幕上打印 Hello world!第一步是神奇的一步,如果读者对 PC 不了解,将很难得到头绪. PC 开机后,CS 和 IP 被初始化为 CS=0xFFFFh,IP= ...