[发明专利]防止Hive数据倾斜的方法和装置在审
申请号: | 201410482327.7 | 申请日: | 2014-09-19 |
公开(公告)号: | CN104239529A | 公开(公告)日: | 2014-12-24 |
发明(设计)人: | 刘璧怡;郭美思;吴楠 | 申请(专利权)人: | 浪潮(北京)电子信息产业有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京安信方达知识产权代理有限公司 11262 | 代理人: | 王丹;李丹 |
地址: | 100085 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 防止 hive 数据 倾斜 方法 装置 | ||
1.一种防止Hive数据倾斜的方法,其特征在于,包括:
根据需要处理的表的规模及特性,设置Map数量和Reduce数量;
在Map端设置聚合函数和负载均衡参数;
根据应用场景特点及表的特性,利用聚合函数和负载均衡参数,进行SQL编写,对数据进行负载均衡。
2.根据权利要求1所述的防止Hive数据倾斜的方法,其特征在于,所述聚合函数是sum聚合函数;
所述负载均衡参数是hive.groupby.skewindata=true,将Map的输出结果集合中相同Key的数据随机分发不到Reduce。
3.根据权利要求1或2所述的防止Hive数据倾斜的方法,其特征在于,所述应用场景包括由于join或者group by操作中的key分布不均匀导致的数据倾斜,其中,join包括大小表Join和两个大表Join。
4.根据权利要求3所述的防止Hive数据倾斜的方法,其特征在于,所述根据应用场景特点及表的特性,利用聚合函数和负载均衡参数,进行SQL编写,对数据进行负载均衡,包括:
如果是大小表Join时,将小表放进内存,将join转化为mapjoin进行查询,在MapJoin中,每次MapReduce任务的逻辑是内存中会缓存Join序列中除了最后一个表的所有表的记录,再通过最后一个表将结果序列化到文件系统,select/*+MAPJOIN(b)*/a.key,a.value from a join b on a.key=b.key。
5.根据权利要求3所述的防止Hive数据倾斜的方法,其特征在于,所述根据应用场景特点及表的特性,利用聚合函数和负载均衡参数,进行SQL编写,对数据进行负载均衡,包括:
如果是两个大表Join时,空的Key的比重高;
使用空值不参与操作的方式,select*from a join b on a.key is not null and a.key=b.key,或者,利用随机函数,select*from a left outer join b on case when a.key is null then concat(a.key,rand())else a.key end=b.key,其中如果a表的key值是空值,对数据进行负载均衡。
6.根据权利要求3所述的防止Hive数据倾斜的方法,其特征在于,所述根据应用场景特点及表的特性,利用聚合函数和负载均衡参数,进行SQL编写,对数据进行负载均衡,包括:
如果是由于group by操作中的key分布不均匀导致的数据倾斜,使用负载均衡参数hive.groupby.skewindata=true,在查询的计划中生成两个MapReduce作业,其中,在第一个作业中,Map的输出结果随机分布到Reduce中,每个Reduce做部分聚合操作,输出结果;在第二个作业中,按照相同的key值分不到同一个Reduce中,完成最终的聚合操作。
7.一种防止Hive数据倾斜的装置,其特征在于,包括:
第一设置模块,用于根据需要处理的表的规模及特性,设置Map数量和Reduce数量;
第二设置模块,用于在Map端设置聚合函数和负载均衡参数;
负载均衡单元,用于根据应用场景特点及表的特性,利用聚合函数和负载均衡参数,进行SQL编写,对数据进行负载均衡。
8.根据权利要求7所述的防止Hive数据倾斜的装置,其特征在于,所述聚合函数是sum聚合函数;所述负载均衡参数是hive.groupby.skewindata=true,将Map的输出结果集合中相同Key的数据随机分发不到Reduce。
9.根据权利要求1或8所述的防止Hive数据倾斜的装置,其特征在于,所述应用场景包括由于join或者group by操作中的key分布不均匀导致的数据倾斜,其中,join包括大小表Join和两个大表Join。
10.根据权利要求9所述的防止Hive数据倾斜的装置,其特征在于,所述负载均衡单元,具体用于:
如果是大小表Join时,将小表放进内存,将join转化为mapjoin进行查询,在MapJoin中,每次MapReduce任务的逻辑是内存中会缓存Join序列中除了最后一个表的所有表的记录,再通过最后一个表将结果序列化到文件系统,select/*+MAPJOIN(b)*/a.key,a.value from a join b on a.key=b.key;
如果是两个大表Join时,空的Key的比重高;使用空值不参与操作的方式,select*from a join b on a.key is not null and a.key=b.key,或者,利用随机函数,select*from a left outer join b on case when a.key is null then concat(a.key,rand())else a.key end=b.key,其中如果a表的key值是空值,对数据进行负载均衡;
如果是由于group by操作中的key分布不均匀导致的数据倾斜,使用负载均衡参数hive.groupby.skewindata=true,在查询的计划中生成两个MapReduce作业,其中,在第一个作业中,Map的输出结果随机分布到Reduce中,每个Reduce做部分聚合操作,输出结果;在第二个作业中,按照相同的key值分不到同一个Reduce中,完成最终的聚合操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮(北京)电子信息产业有限公司,未经浪潮(北京)电子信息产业有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410482327.7/1.html,转载请声明来源钻瓜专利网。
- 上一篇:用于注塑模具的防卡死装置
- 下一篇:一种基于互联网的分布式存储方法
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置