hive的几个排序

简介:

hive中常用的几个排序

order by   #全局排序,因为是全局排序,所以job是一个reduce,reduce的个数参数设置对其无效

sort by    #一个reduce时为全局排序,多个reduce时,每个reduce各自排序,为了提高全局排序的性能,可以先用sort by做局部排序,然后再做全局排序

distribute by #hash 分组,根据key和reduce个数进行数据分发,默认使用hash的方式

cluster by #distribute by + sort by(注意和hive.enforce.bucketing参数的应用

结合两个例子来看排序的应用:

1)cdnjob的优化思路

熟悉map slot的分配规则的同学应该知道,text gz的文件是不支持split的,因此这种情况下最多只有一个map(不管数据量多大),

这样在做数据处理时,如果文件很大而且计算逻辑比较复杂(比如cdn的报表,需要做各种聚合计算和ip地址的解析),效率就会比较低下。

一个思路就是建一个中间表,对原始表进行distribute by,对中间表进行复杂的计算,这样就可以使用多个map,提高运算效率。

2)solr测试的思路

测试hive2solr时,需要模拟一个文件和多个文件的写入情况。

默认使用的sql是

1
insert into table xxx   select  * from data_for_sol;

这是一个hdfs操作,不涉及mapred,不太好模拟多个文件的写入情况。

可以在后面套一个 distribute by ,并合理设置reduce的数量(mapred.reduce.tasks),这样就会生成多个reduce的文件。

1
insert into table xxx  select  * from data_for_solr distribute by session_id;

注意:reduce slot的分配由下面几个情况决定

1)sql类型(比如order by只有一个reduce)

2)参数

1
mapred.reduce.tasks;

每个任务reduce的默认值,默认为-1,-1 代表自动根据作业的情况来设置reduce的值,优先级高于下面两个设置。

1
hive. exec .reducers.bytes.per.reducer

根据reduce的输入数据(map端的输出数据,不管是否压缩),大小判断reduce的个数,默认1G

hive.exec.reducers.max reduce的最大数量,默认999个

计算方法:

1
2
3
4
5
   reducers = (int) ((totalInputFileSize + bytesPerReducer - 1) / bytesPerReducer);
   reducers = Math.max(1, reducers);
   reducers = Math.min(maxReducers, reducers);
   
   关于map /reduce  slot的分配规则以后有机会再说。


本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1427493,如需转载请自行联系原作者
相关文章
|
7月前
|
SQL 存储 大数据
Hive的查询、数据加载和交换、聚合、排序、优化
Hive的查询、数据加载和交换、聚合、排序、优化
158 2
|
SQL HIVE
HIVE基本查询操作(二)——第1关:Hive排序
HIVE基本查询操作(二)——第1关:Hive排序
649 0
|
SQL 分布式计算 算法
Hive 中的四种排序详解,再也不会混淆用法了
排序操作是一个比较常见的操作,尤其是在数据分析的时候,我们往往需要对数据进行排序,hive 中和排序相关的有四个关键字,今天我们就看一下,它们都是什么作用。
719 0
Hive 中的四种排序详解,再也不会混淆用法了
|
SQL 分布式计算 算法
【Hive】(二十)详解 Hive 四种排序的区别
【Hive】(二十)详解 Hive 四种排序的区别
292 0
|
SQL HIVE
Hive实现分组排序或者分页
使用到的语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
3886 0
|
SQL 分布式计算 HIVE
|
7月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
212 1
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
69 0
|
5月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。