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

文档序号:9375799阅读:来源:国知局
以分别产生关联伪列字段;倾斜数据关联模块,用于在 reduce端根据所述关联伪列字段对所述第一关联表和所述第二关联表进行关联。
[0028] 可选地,在所述关联字段上,所述第一关联表的数据量远远小于所述第二关联表 的数据量。
[0029] 可选地,所述数据倾斜统计模块进一步用于:分别统计所述第一关联表和所述第 二关联表在所述关联字段上的第一数据出现频度和第二数据出现频度;根据筛选阈值,建 立所述第一统计信息和第二统计信息,所述第一统计信息包括第一倾斜数据列值和所述第 一数据出现频度,并且所述第二统计信息包括第二倾斜数据列值和所述第二数据出现频 度;以及将所述第一统计信息和第二统计信息缓存在相应文件中。
[0030] 可选地,所述表流式倾斜处理模块进一步用于:根据所述第一统计信息,在map端 处理所述第一关联表的每一行数据;针对所述第一关联表在所述关联字段上的倾斜值,根 据所述第一统计信息,计算出用于所述倾斜值的样本空间的个数上限值;以及基于所述上 限值,对每一行数据进行复制并生成所述关联伪列字段,其中,所述复制份数与所述上限值 相关。
[0031] 可选地,所述表流式倾斜处理模块进一步用于:根据所述第二统计信息,在map端 处理所述第二关联表的每一行数据;根据所述第二统计信息,将所述第二关联表在所述关 联字段上的倾斜值进行平均分组并编号以生成所述关联伪列字段,其中,所述分组个数与 所述上限值相关。
[0032] 可选地,所述倾斜数据关联模块进一步用于:生成相应的reduce字段,其中,所述 reduce字段的样本个数与所述上限值相关。
[0033] 根据本发明的技术方案,引入数据倾斜分析工具,在关联前对数据进行倾斜分析, 对需要处理的数据倾斜值进行分析统计,从而方便对关联数据进行提前处理;通过表流式 倾斜处理,将倾斜值均匀分成多份,生成相应的关联伪列字段,以便生成多个reduce值;最 后根据生成的关联伪列字段对关联表进行关联,即可将生成的reduce字段的多个值通过 多个reduce进行数据关联,完全消除了只有一个reduce处理倾斜值的瓶颈,从而完美解决 了 reduce端海量数据关联时的数据倾斜问题,保障了数据仓库的高性能和稳定性。
【附图说明】
[0034] 附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
[0035] 图1是根据本发明实施例的一种解决数据倾斜的方法的主要步骤示意图;
[0036] 图2是根据本发明实施例的一种解决数据倾斜的装置的主要模块示意图。
【具体实施方式】
[0037] 以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种 细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识 到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同 样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0038] 图1是根据本发明实施例的一种解决数据倾斜的方法的主要步骤示意图。如图1 所示,本发明实施例中的一种解决数据倾斜的方法主要包括如下的步骤Sll至步骤S13。
[0039] 步骤Sll :由数据倾斜统计模块使用调度程序分别统计出参与关联的第一关联表 和第二关联表在关联字段上的第一统计信息和第二统计信息。在对第一关联表和第二关联 表在关联字段上的信息进行统计时,可以按照如下顺序进行:
[0040] (1)分别统计第一关联表和第二关联表在关联字段上的第一数据出现频度和第二 数据出现频度;
[0041] (2)根据筛选阈值,建立第一统计信息和第二统计信息,第一统计信息包括第一倾 斜数据列值和第一数据出现频度,并且第二统计信息包括第二倾斜数据列值和第二数据出 现频度;
[0042] (3)将第一统计信息和第二统计信息缓存在相应文件中。
[0043] 此处提到的筛选阈值可根据经验进行设置,例如实际观察各线程处理数据时运行 速度的快慢等信息,定出合理的限值,具体如,当数据超过1万条的时候在数据关联时就会 出现倾斜,则可将该阈值设为1万。那么,超出该筛选阈值的关联表中的相应数据就是需要 进行处理的倾斜值。
[0044] 步骤S12 :由表流式倾斜处理模块根据待关联的倾斜字段,在map端对所述第一关 联表和所述第二关联表的数据进行处理,以分别产生关联伪列字段。其中,在所述关联字段 上,所述第一关联表的数据量远远小于所述第二关联表的数据量。
[0045] 表流式倾斜处理模块根据待关联的倾斜字段,在map端对第一关联表进行处理主 要包括:根据第一统计信息,由表流式倾斜处理模块在map端处理第一关联表的每一行数 据;针对第一关联表在该关联字段上的倾斜值,根据该第一统计信息,计算出用于所述倾斜 值的样本空间的个数上限值;以及基于该上限值,对每一行数据进行复制并生成关联伪列 字段,其中,该复制份数与所述上限值相关。
[0046] 表流式倾斜处理模块根据待关联的倾斜字段,在map端对第二关联表进行处理主 要包括:根据第二统计信息,由表流式倾斜处理模块在map端处理所述第二关联表的每一 行数据;根据该第二统计信息,将第二关联表在该关联字段上的倾斜值进行平均分组并编 号以生成关联伪列字段,其中,该分组个数与所述上限值相关。
[0047] 由以上描述可以看出,步骤S12的关键在于确定步骤Sll中所述倾斜值的样本空 间的个数上限值,之后,将第一关联表在该关联字段上的倾斜值根据该上限值进行复制以 产生关联伪列字段,将第二关联表在该关联字段上的倾斜值根据该上限值进行平均分组并 编号以产生关联伪列字段。其中,该上限值根据前述的第一和第二统计信息确定。举例而 言,该上限值可选为进行数据关联的线程的个数;或者也可选为根据倾斜值的数据条数与 筛选阈值相除所得。
[0048] 步骤S13 :由倾斜数据关联模块在reduce端根据所述关联伪列字段对所述第一关 联表和所述第二关联表进行关联。根据步骤S12,对第一关联表和第二关联表的数据进行处 理后,分别生成关联伪列字段,将者两个关联表在生成的关联伪列字段上进行关联,并生成 相应的reduce字段,其中,reduce字段的样本个数与所述上限值相关。
[0049] 根据前述的步骤Sll至步骤S13,可以将进行倾斜处理前的一个reduce字段的 一个值,通过合理的算法复制成多个值,如此处理可使以前只有一个reduce处理倾斜值的 瓶颈完全消除,同时还可保证数据的正确性,从而完美解决了 reduce端数据关联的倾斜问 题,保障了数据仓库的高性能和稳定性。
[0050] 下面结合一个具体的实施例对前述的步骤Sll至S13进行详细描述。例如,数据仓 库中存在两个待关联的表1和表2,对这两个表进行倾斜统计后得到相应的倾斜统计信息。 其中表1为商品表(见表1),表2为订单表(见表2),该两表的关联字段C为"商品id"。 由于表2在关联字段C上的数据量假设为1000万条(设定筛选阈值为100万条),而表1 在关联字段C上的数据量为1条,这样就会产生一个1000万对1的关联,也就是说会在某 一个reduce上进行1000万条数据的处理,此时就会出现严重的数据倾斜。
[0051] 为了克服数据倾斜带来的严重后果,需要对造成倾斜的数据进行处理。首先,根据 1000万对1的关联比例及设定的筛选阈值100万,计算出造成倾斜的数据值的样本空间的 个数上限值η。例如我们假设线程数足够多,则我们可以选择η = 1000万/100万=10。然 后,对表1在关联字段C上的数据进行逐行流式处理。本实施例中对表1进行的处理为将 该行数据复制η = 10份,并生成新的关联伪列字段k,且其分布范围是{dl,d2,…dn},如 表3所示。之后,对表2在在关联字段C上的数据进行逐行流式处理。本实施例中对表2 进行的处理为将该表中的倾斜数据进行平均分为η组并编号,以生成与表1相对应的关联 伪列字段k,且其分布范围是{dl,d2,…dn},如表4所示。
[0052] 最后,由倾斜数据关联模块在reduce端对进行倾斜数据处理后得到的表3和表 4,根据生成的关联伪列字段k进行关联。这样就可以产生η = 10个reduce,这样以前一 个reduce处理1000万条数据的情况,就变成了 10个reduce处理1000万条数据,即:一个 reduce处理100万条数据的情况,同时数据的正确性也不会受到影响。
[0053] 表1商品表
[0059] 表4倾斜处理后的订单表[0060]
[0054]
[0055]
[0056]
[0057]
[0058]
[0061] 由以上描述可以看出,通过本发明所述的方法对倾斜数据进行处理后,即可避免 由于数据倾斜而导致的异常报错和处理超时,且能保证数据的正确性,从而保障了数据仓 库的高性能和稳定性。
[0062] 图2是根据本发明实
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1