[发明专利]防止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中,完成最终的聚合操作。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮(北京)电子信息产业有限公司,未经浪潮(北京)电子信息产业有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201410482327.7/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top