一种解决数据倾斜的方法及装置的制造方法

文档序号:9375799阅读:332来源:国知局
一种解决数据倾斜的方法及装置的制造方法
【技术领域】
[0001] 本发明涉及计算机技术领域,特别地涉及一种解决数据倾斜的方法及装置。
【背景技术】
[0002] 自互联网大爆发以来,面对日益增长的海量数据,用以支撑主流搜索引擎公司、电 子商务、社交网站的传统数据仓库系统早已不堪重负了,而构建于Hadoop集群之上的Hive 的出现恰逢其时,已成为实现大数据时代分布式数据仓库的福音。数据关联是关系数据库 功能的基本操作,是任何资源在万维网上发布的一种方式。基于分布式运算(mapreduce) 的数据仓库Hive也支持在海量数据集上进行数据关联操作,通常Hive进行数据仓库(DW) 数据关联时,都是由两个或多个海量数据集进行。例如电子商务常见的数据模式为:将数十 亿的用户流量和数亿的商品、千万级订单数据集进行关联运算来产生用户、商品搜索推荐 结果和电子邮箱相关联的营销数据。此类数据关联操作的特点是海量数据,同时数据分布 不均匀,存在热点数据。
[0003] 基于Hive的海量数据关联的底层实现是由mapreduce提供的,即在Map (映射) 阶段根据数据的大小划分为多个分布式计算任务,尽可能利用数据本地化处理速度快的优 势在本地进行运算,然后进行分区(即根据相同的关键字的数据进入同一数据处理列),最 后在reduce (归约)阶段进行合并关联运算。
[0004] Mapreduce在进行数据关联时,可在map阶段和reduce阶段分别进行。map端聚 合的适用条件是关联方有一个数据集足够小(一般不超过25MB)可以放在分布式缓存里, 而reduce阶段关联的场景是关联成员的数据集都很大,无法缓存。故而对于海量数据,无 法进行map端关联,只能在reduce阶段进行关联。然而,此时数据关联的瓶颈点已不在于 数据规模的大小,而在于数据分布的不均匀。当mapreduce在执行程序进行数据关联时,大 部分reduce节点已执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的 执行时间很长,这是因为某一个关联关键字的数据条数比其他关联关键字多很多(有时是 百倍或者千倍之多),那么这个关联关键字所在的reduce节点所处理的数据量比其他节点 就大很多,从而导致某一个或者几个节点迟迟运行不完,此称之为数据倾斜。解决海量数据 关联的关键点就是解决数据倾斜问题。
[0005] 目前Hive处理数据关联时数据倾斜的问题大多采用以下方法:
[0006] 1.创建倾斜表法:
[0007] 特点就是在建表时列出表中单列或多列的高倾斜值,Hive会将这些数据自动单独 存储,在执行关联时,第一次查询处理非倾斜的数据,第二次查询将处理高倾斜的数据,如 果其中高倾斜值的小表数据适合在内存缓存,这样效率会更高,在map端就进行了关联,最 后对两部分查询结果进行合并。
[0008] 2.配置参数法:
[0009] 在Hive执行数据处理时预先配置参数,第一个mapreduce任务中,Map的输出结 果集合会随机分布到reduce中,每个reduce做部分关联操作,并输出结果,这样处理的结 果是相同分组的同一关键字的数据有可能被分发到不同的reduce中,从而达到负载均衡 的目的;第二个mapreduce任务再根据第一个mapreduce任务预处理的数据结果按照分组 的关键字分布到reduce中(这个过程可以保证相同分组的同一关键字的数据被分布到同 一个reduce中),最后完成最终的聚合操作。这是最简单的方式。
[0010] 3. Mapjoin :
[0011] 适用条件是关联表中有一张小表(一般默认为25MB),数据量适合分布式缓存,在 执行过程中,mapjoin会把小表全部读入本地内存中,在map阶段直接拿另外一个表的数据 和内存中表数据做匹配,这样避免了 reduce端关联,因此效率是最高的。
[0012] 在使用过程中,发现现有的几种数据关联的方式在处理海量数据关联数据倾斜的 问题时,都会存在一些缺点。
[0013] 创建倾斜表法的缺点在于,参与关联的表需要读和处理两次,因为是部分结果,所 以最终结果也需要读写两次,同时用户需要人工建表时分析出倾斜值,如果倾斜值频繁变 化,则需要变更表结构,而运行中线上环境不允许频繁变更表,因此浪费了过多人工操作。
[0014] 配置参数法偶尔会出现有多次执行数据不一致的现象,至今官方还未修复这个漏 洞,这会对数据质量产生致命影响,是不可接受的。
[0015] Mapjoin (map端关联)对机器内存有很强的约束,尽管我们调大了mapjoin的约束 参数,但是大部分业务场景仍然无法缓存最小的数据集,故此种方法不是通用的解决方式, 无法解决我们的问题。
[0016] 由以上描述可以看出,现有的Hive处理数据关联时数据倾斜的方法都具有或多 或少的缺陷,然而由于数据倾斜会导致任务失败和严重超时,影响数据仓库的整体稳定性, 尤其是这些导致关联倾斜的数据基本上都是数据仓库任务的关键部分,不允许失败和超 时,因此需要在任务执行前智能识别关联表的倾斜字段并进行特殊处理,这就需要有自动 化的数据倾斜分析器,以统计出某目标表在关联字段上的数据出现频度,往往数据倾斜就 是发生在这些高频度的数据字段上。目前特殊处理此类场景比较浪费人力,已成为影响数 据仓库稳定运行的关键因素,如何解决和优化海量数据在reduce端进行关联时的倾斜问 题已经迫在眉睫。

【发明内容】

[0017] 有鉴于此,本发明提供一种解决数据倾斜的方法及装置,能够克服现有技术的缺 点和不足,通过引入倾斜分析统计工具及表流式倾斜处理工具,避免了数据倾斜导致的任 务失败和超时,使得海量倾斜数据的关联任务能快速完成,从而保障了数据仓库的高性能 和稳定性。
[0018] 为实现上述目的,本发明所提出的技术方案关键点为:在reduce端进行数据关联 之前将含有倾斜关键字的数据通过合理算法变成多份,使其分布均匀化,避免出现只在一 个reduce端进行关联的瓶颈效应,这样便可以使数据尽可能的均勾分布在多个reduce中, 平滑参与数据关联。
[0019] 为实现上述目的,根据本发明的一个方面,提供了一种解决数据倾斜的方法。
[0020] 本发明的一种解决数据倾斜的方法,包括:由数据倾斜统计模块使用调度程序分 别统计出参与关联的第一关联表和第二关联表在关联字段上的第一统计信息和第二统计 信息;由表流式倾斜处理模块根据待关联的倾斜字段,在map端对所述第一关联表和所述 第二关联表的数据进行处理,以分别产生关联伪列字段;由倾斜数据关联模块在reduce端 根据所述关联伪列字段对所述第一关联表和所述第二关联表进行关联。
[0021] 可选地,在所述关联字段上,所述第一关联表的数据量远远小于所述第二关联表 的数据量。
[0022] 可选地,所述统计的步骤进一步包括:分别统计所述第一关联表和所述第二关联 表在所述关联字段上的第一数据出现频度和第二数据出现频度;根据筛选阈值,建立所述 第一统计信息和第二统计信息,所述第一统计信息包括第一倾斜数据列值和所述第一数据 出现频度,并且所述第二统计信息包括第二倾斜数据列值和所述第二数据出现频度;以及 将所述第一统计信息和第二统计信息缓存在相应文件中。
[0023] 可选地,在map端对所述第一关联表和所述第二关联表的数据进行处理进一步包 括:根据所述第一统计信息,由所述表流式倾斜处理模块在map端处理所述第一关联表的 每一行数据;针对所述第一关联表在所述关联字段上的倾斜值,根据所述第一统计信息,由 所述表流式倾斜处理模块计算出用于所述倾斜值的样本空间的个数上限值;以及基于所述 上限值,由所述表流式倾斜处理模块对每一行数据进行复制并生成所述关联伪列字段,其 中,所述复制份数与所述上限值相关。
[0024] 可选地,在map端对所述第一关联表和所述第二关联表的数据进行处理进一步包 括:根据所述第二统计信息,由所述表流式倾斜处理模块在map端处理所述第二关联表的 每一行数据;根据所述第二统计信息,由所述表流式倾斜处理模块将所述第二关联表在所 述关联字段上的倾斜值进行平均分组并编号以生成所述关联伪列字段,其中,所述分组个 数与所述上限值相关。
[0025] 可选地,由倾斜数据关联模块在reduce端根据所述关联伪列字段对所述第一关 联表和所述第二关联表进行关联进一步包括:生成相应的reduce字段,其中,所述reduce 字段的样本个数与所述上限值相关。
[0026] 根据本发明的另一方面,提供了 一种解决数据倾斜的装置。
[0027] 本发明的一种解决数据倾斜的装置,包括:数据倾斜统计模块,用于使用调度程序 分别统计出参与关联的第一关联表和第二关联表在关联字段上的第一统计信息和第二统 计信息;表流式倾斜处理模块,用于根据待关联的倾斜字段,在map端对所述第一关联表 和所述第二关联表的数据进行处理,
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1