文档章节

hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法

原创学无止境
 原创学无止境
发布于 2017/04/24 14:41
字数 597
阅读 3
收藏 0

order by

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

set hive.mapred.mode=nonstrict; (default value / 默认值)

set hive.mapred.mode=strict;

 order by 和数据库中的Order by 功能一致,按照某一项 & 几项 排序输出。

 与数据库中 order by 的区别在于在hive.mapred.mode = strict 模式下 必须指定 limit 否则执行会报错。

 hive> select * from test order by id;     

FAILED: Error in semantic analysis: 1:28 In strict mode, if ORDER BY is specified, LIMIT must also be specified. Error encountered near token 'id'

 原因: 在order by 状态下所有数据会到一台服务器进行reduce操作也即只有一个reduce,如果在数据量大的情况下会出现无法输出结果的情况,如果进行 limit n ,那只有  n * map number 条记录而已。只有一个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>),对输出的数据再执行归并排序,即可以得到全部结果。

注意:可以用limit子句大大减少数据量。使用limit n后,传输到reduce端(单机)的数据记录数就减少到n* (map个数)。否则由于数据过大可能出不了结果。

 

distribute by

 按照指定的字段对数据进行划分到不同的输出reduce  / 文件中。

 insert overwrite local directory '/home/hadoop/out' select * from test order by name distribute by length(name);  

 此方法会根据name的长度划分到不同的reduce中,最终输出到不同的文件中。 

 length 是内建函数,也可以指定其他的函数或这使用自定义函数。

  

Cluster By

 cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。 

 但是排序只能是倒序排序,不能指定排序规则为asc 或者desc。

 

转自 http://metooxi.iteye.com/blog/1447621


© 著作权归作者所有

共有 人打赏支持
原创学无止境
粉丝 1
博文 14
码字总数 25526
作品 0
徐汇
程序员
私信 提问
Hive从入门到实战视频教程【40讲全】

1、Hive是什么,Hive的体系结构,Hive和Hadoop的关系 2、Hive的元数据存储、Hive的数据存储、Hive和RDBMS的区别 3、JDK安装 4、Hadoop集群搭建-1 5、Hadoop集群搭建-2 6、Hadoop集群搭建-3 ...

tom先生
2014/11/26
48
0
Hadoop Hive 中几种排序方法的区别与比较

Hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法 1. order by set hive.mapred.mode=nonstrict; (default value / 默认值) set hive.mapred.mode=strict; order by 和数......

大数据之路
2012/10/16
0
0
hive中order by,sort by, distribute by, cluster by作用以及用法

order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理(不管有...

张欢19933
2016/09/20
11
0
Hive的sort by, order by, distribute by, cluster by区别?

Hive的order by语句和其他的SQL语言的定义是一样的,其会对查询结果集执行一个全局排序。这也就是说会有一个所有的数据都通过一个reducer进行处理的过程。对于大数据集,这个过程可能会消耗太...

无精疯
2018/04/22
0
0
hive order by sort by

order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的b...

浮云飘飘
2016/02/26
21
0

没有更多内容

加载失败,请刷新页面

加载更多

Git cherry-pick 使用总结

应用背景:假设现在有两个分支:dev_01, dev_02. 如果我想把dev_01分支上的某几个commit合并到dev_02分支, 那么怎么办呢? 这就是cherry-pick的工作了。cherry-pick会捡选某些commit, 即把某...

天王盖地虎626
35分钟前
5
0
css动态设置宽高

css 中可以使用 calc() 来动态设置宽高,但是,在表达式中运算符的前后必须要有空格 height:calc(100vh - 80px)

林梓阳
46分钟前
0
0
Git忽略提交规则 - .gitignore配置运维总结

在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。简单来说一个场景:在你使用git add ....

二团长的迫击炮
47分钟前
2
0
记录一次用VB合并数据,确实很好用

Sub 合并()Dim row, col, val As DoubleFor row = 1 To 710 Step 1 For col = 1 To 15 Step 1 If IsNumeric(sheet2.Cells(row, col)) And IsNumeric(Sheet3.Cells(row, ......

蓝栩液枫
49分钟前
3
0
多态小笔记

多态背后的思想将‘做什么’和‘谁去做以及怎么去做’分离开来 根本作用是将过程化的条件分支转化为对象的多态,从而消除掉条件分支语句

莫西摩西
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部