[发明专利]防止Hive数据倾斜的方法和装置在审
申请号: | 201410482327.7 | 申请日: | 2014-09-19 |
公开(公告)号: | CN104239529A | 公开(公告)日: | 2014-12-24 |
发明(设计)人: | 刘璧怡;郭美思;吴楠 | 申请(专利权)人: | 浪潮(北京)电子信息产业有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京安信方达知识产权代理有限公司 11262 | 代理人: | 王丹;李丹 |
地址: | 100085 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 防止 hive 数据 倾斜 方法 装置 | ||
技术领域
本发明涉及数据处理技术领域,尤其涉及一种优化Hive数据倾斜的方法和装置。
背景技术
在互联网高速发展的时代,每天都有数以百计请求查询及数据汇总,在这样大规模的数据处理中,数据的输入量是非常巨大的,目前单个PC机已经无法能满足现状的需求。采取分布式处理技术,将多台廉价计算机组成集群,将这些计算任务分布到这些廉价的计算机上处理。在分布式集群中Hadoop提供了分布式处理的平台,可以利用MapReduce框架在多台计算机组成的集群中并行的运行大规模的分布式计算操作,具有高效的计算能力。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化数据文件映射为一张数据库表,并提供完整的结构化查询语言(SQL,Structured Query Language)查询功能,可以将SQL语句转换为MapReduce任务进行运行,防止了对于不熟悉MapReduce的编程人员编写MapReduce带来的不便。
在Hive进行SQL语句操作时是通过底层的MapReduce框架来完成处理操作的。但在MapReduce处理的过程中会在Map阶段后生成的中间文件分配阶段出现数据倾斜的问题,由于Map阶段处理数据量的差异过大,使得数据不能均匀的分配到各个Reduce中。
在Hive中执行操作导致数据倾斜的原因是表中的key值分布不均匀,建表时考虑不全面,应用场景的特点等都会有数据倾斜的可能。在数据倾斜现象中,会在Reduce阶段中有明显的几个Reduce的处理数据远远高于其他的Reduce,使得这几个Reduce处理时间很长,处理的很慢,在任务进度中长时间维持在接近完成的状态,查看任务监控时会发现一直有几个Reduce任务未完成。因此,导致整个任务的性能下降。
发明内容
为了解决上述技术问题,本发明提供了一种防止Hive数据倾斜的方法和装置,能够防止由于数据倾斜带来的性能下降。
为了达到本发明目的,本发明提供了一种防止Hive数据倾斜的方法,包括:根据需要处理的表的规模及特性,设置Map数量和Reduce数量;在Map端设置聚合函数和负载均衡参数;根据应用场景特点及表的特性,利用聚合函数和负载均衡参数,进行SQL编写,对数据进行负载均衡。
进一步地,聚合函数是sum聚合函数;负载均衡参数是hive.groupby.skewindata=true,将Map的输出结果集合中相同Key的数据随机分发不到Reduce。
进一步地,应用场景包括由于join或者group by操作中的key分布不均匀导致的数据倾斜,其中,join包括大小表Join和两个大表Join。
进一步地,根据应用场景特点及表的特性,利用聚合函数和负载均衡参数,进行SQL编写,对数据进行负载均衡,包括:如果是大小表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/2.html,转载请声明来源钻瓜专利网。
- 上一篇:用于注塑模具的防卡死装置
- 下一篇:一种基于互联网的分布式存储方法
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置