一种数据倾斜处理方法及装置的制造方法

文档序号:10570044阅读:268来源:国知局
一种数据倾斜处理方法及装置的制造方法【专利摘要】本发明实施例提供一种数据倾斜处理方法及装置,涉及计算机应用
技术领域
。其中,所述方法包括:当进行映射关联mapjoin操作的第一数据集和第二数据集的数据量均大于预置阈值时,将所述第一数据集拆分为N个子数据集,其中,N大于或等于2,所述子数据集的数据量小于或等于所述预置阈值;将所述第二数据集分别与所述N个子数据集进行mapjoin操作。本发明实施例提供的技术方案能有效避免mapreduce的shuffle(置乱)过程以及在单一reduce中处理同一个key(关键字)的大量数据,可在一定程度上解决大部分的数据倾斜问题;换句话说,本发明实施例提供的技术方案是以资源来换取效率,大大提高会发生数据倾斜的hive任务的效率。【专利说明】一种数据倾斜处理方法及装置
技术领域
[0001]本发明实施例涉及计算机应用
技术领域
,尤其涉及一种数据倾斜处理方法及装置。【
背景技术
】[0002]目前,面对日益增长的海量数据,用以支撑主流搜索引擎公司、电子商务、社交网站的传统数据仓库系统早已不堪重负,而构建于Hadoop集群之上的Hive的出现实现了大数据时代分布式数据仓库,能有效的解决现有问题。数据关联是关系数据库功能的基本操作,是任何资源在万维网上发布的一种方式。基于分布式运算(mapreduce)的数据仓库Hive也支持在海量数据集上进行数据关联操作,通常Hive进行数据仓库(DW)数据关联时,都是由两个或多个海量数据集进行。例如,电子商务常见的数据模式为:将数十亿的用户流量和数亿的商品、千万级订单数据集进行关联运算来产生用户、商品搜索推荐结果和电子邮箱相关联的营销数据。此类数据关联操作的特点是海量数据,同时数据分布不均匀,存在热点数据。[0003]基于Hive的海量数据关联的底层实现是由mapreduce提供的,S卩在Map(映射)阶段根据数据的大小划分为多个分布式计算任务,尽可能利用数据本地化处理速度快的优势在本地进行运算,然后进行分区(即根据相同的关键字的数据进入同一数据处理列),最后在reduce(归约)阶段进行合并关联运算。[0004]Mapreduce在进行数据关联时,可在map阶段和reduce阶段分别进行。Map端聚合的适用条件是关联方有一个数据集足够小(一般不超过25MB)可以放在分布式缓存里,而reduce阶段关联的场景是关联成员的数据集都很大,无法缓存。故对于海量数据,无法进行map端关联的,只能在reduce阶段进行关联。然而,此时数据关联的瓶颈点已不在于数据规模的大小,而在与数据分布的不均勾。当mapreduce在执行程序进行数据关联时,大部分reduce节点已执行完毕,但是有一个或几个reduce节点运行很慢,导致整个程序的执行时间很长,这是因为某一个关联关键字的数据条数比其他关联关键字多很多(有时是百倍或者千倍),那么这个关联关键字所在的reduce节点所处理的数据量要比其他节点就大很多,从而导致某一个或几个节点迟迟运行不完,此称之为数据倾斜。解决海量数据关联的关键点就是解决数据倾斜问题。[0005]目前,mapjoin操作适用的条件是关联表中有一张小表,数据量适合分布式缓存,在执行过程中,mapjoin会把小表全部读入本地内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,这样避免了reduce端关联,因此效率是最高的。但是上述方法对于小表的数据量有着很大的限制。当小表的数据量超过一定的阈值时(mapjoin的阈值要根据集群的具体情况来具体设置,目前一般为100MB左右),就无法转换为mapjoin。如果这两个表中存在数据倾斜的问题,就会导致运算的速度特别缓慢,有的需要好几天才能执行完毕,有时候甚至根本就得到所需的结果。尽管我们调大了mapjoin的约束参数,但是大部分业务场景仍然无法缓存最小的数据集,故此种方法不是通用的解决方式,无法解决我们的问题。【
发明内容】[0006]本发明实施例提供一种数据倾斜处理方法及装置,用以解决现有技术中mapjoin操作对数据量限制的问题。[0007]本发明实施例提供一种数据倾斜处理方法,包括:[0008]当进行映射关联mapjoin操作的第一数据集和第二数据集的数据量均大于预置阈值时,将所述第一数据集拆分为N个子数据集,其中,N大于或等于2,所述子数据集的数据量小于或等于所述预置阈值;[0009]将所述第二数据集分别与所述N个子数据集进行mapjoin操作。[0010]可选地,上述的所述方法,还包括:[0011]获取进行mapjoin操作的两个数据集的数据量;[0012]比较所述两个数据集的数据量,并根据比较结果将所述数据量小的数据集作为所述第一数据集,所述数据量大的数据集作为所述第二数据集。[0013]可选地,上述的方法中,所述将所述第一数据集拆分为N个子数据集,包括:[0014]获取所述第一数据集的数据量;[0015]根据所述数据量和所述预置阈值,计算出拆分数量N;[0016]将所述第一数据集拆分出N个子数据集。[0017]可选地,上述的方法中,将所述第二数据集分别与所述N个子数据集进行mapjoin操作,包括:[0018]分别对所述N个子数据集进行序列化,得到N个哈希表HashTable文件;[0019]将所述第二数据集切分为M个数据块,其中,M大于或等于2;[0020]启动M*N个映射map任务,对所述N个HashTabIe文件和所述M个数据块执行关联join操作。[0021]可选地,上述的方法中,所述启动M*N个map任务,对所述N个HashTable文件和所述M个数据块执行join操作,具体为:?0022]启动Μ*Ν个map任务,每个map任务读取一个所述子数据集到内存中,并获取一个所述数据块和内存中的所述子数据集进行join操作。[0023]可选地,上述的方法中,所述分别对所述N个子数据集进行序列化,得到N个HashTabIe文件,具体为:[0024]使用java的kryo序列化库,分别对所述N个子数据集进行序列化,得到N个所述HashTable文件。[0025]可选地,上述的方法,还包括:[0026]按照预设的命名规则,为所述N个HashTable文件分别命名;[0027]将已命名的所述N个HashTable文件存储至预置的Hadoop分布式文件系统HDFS目录下。[0028]可选地,上述的方法,还包括:[0029]将所述mapjoin操作产生的结果写入HDFS的中间结果文件目录中。[0030]本发明实施例提供一种数据倾斜处理装置,包括:[0031]拆分模块,用于当进行mapjoin操作的第一数据集和第二数据集的数据量均大于预置阈值时,将所述第一数据集拆分为N个子数据集,其中,N大于或等于2,所述子数据集的数据量小于或等于所述预置阈值;[0032]执行模块,用于将所述第二数据集分别与所述N个子数据集进行mapjoin操作。[0033]可选地,上述的装置,还包括:[0034]获取模块,用于获取进行mapjoin操作的两个数据集的数据量;[0035]比较模块,用于比较所述两个数据集的数据量,并根据比较结果将所述数据量小的数据集作为所述第一数据集,所述数据量大的数据集作为所述第二数据集。[0036]可选地,上述的装置中,所述拆分模块,包括:[0037]获取单元,用于获取所述第一数据集的数据量;[0038]计算单元,用于根据所述数据量和所述预置阈值,计算出拆分数量N;[0039]拆分单元,用于将所述第一数据集拆分出N个子数据集。[0040]可选地,上述的装置中,所述执行模块,包括:[0041]处理单元,用于分别对所述N个子数据集进行序列化,得到N个HashTable文件;[0042]切分单元,用于将所述第二数据集切分为M个数据块,其中,M大于或等于2;[0043]执行单元,用于启动M*N个映射map任务,对所述N个HashTable文件和所述M个数据块执行join操作。[0044]可选地,上述的装置中,所述执行单元,具体用于启动M*N个map任务,每个map任务读取一个所述子数据集到内存中,并获取一个所述数据块和内存中的所述子数据集进行join操作。[0(Μ5]可选的,上述的装置中,所述处理单元,具体用于使用java的kryo序列化库,分别对所述N个子数据集进行序列化,得到N个所述HashTabIe文件。[0046]可选地,上述装置中,所述执行模块,还包括:[0047]命名单元,用于按照预设的命名规则,为所述N个HashTable文件分别命名;[0048]存储单元,用于将已命名的所述N个HashTable文件存储至预置的HDFS目录下。[0049]可选地,上述装置,还包括:[0050]写入模块,用于将所述mapjoin操作产生的结果写入HDFS的中间结果文件目录中。[0051]本发明实施例通过将数据量大于mapjoin操作预置阈值的表拆分为多个满足mapjoin所允许阈值的分表,然后生成并启动多个map任务来执行join操作,以实现进行mapjoin操作的两个数据集也能在map端关联,能有效避免mapreduce的shuffle(置乱)过程以及在单一reduce中处理同一个key(关键字)的大量数据,可在一定程度上解决大部分的数据倾斜问题;换句话说,本发明实施例提供的技术方案是以资源来换取效率,大大提高会发生数据倾斜的hive任务的效率。【附图说明】[0052]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0053]图1为本发明实施例一提供的一种数据倾斜处理方法的流程示意图;[0054]图2为本发明实施例二提供的一种数据倾斜处理方法的流程示意图[0055]图3为本发明实施例三提供的一种数据倾斜处理装置的结构示意图。【具体实施方式】[0056]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0057]采用本发明实施例提供的技术方案,可将hive的参与mapjoin操作的表的数据量限制从原先的25MB?200MB的级别提高到了IGB?100GB级别。本发明实施例提供的技术方案可以理解为是一种对现有hive的mapjoin方案的加强,能解决大部分的数据倾斜问题。[0058]图1为本发明实施例一提供的一种数据倾斜处理方法的流程示意图。如图1所示,所述方法包括:[0059]步骤101、当进行mapjoin操作的第一数据集和第二数据集的数据量均大于预置阈值时,将所述第一数据集拆分为N个子数据集。[0060]其中,N大于或等于2,所述子数据集的数据量小于或等于所述预置阈值。其中拆分的步骤可采用如下方法实现:[0061]首先,获取所述第一数据集的数据量。[0062]然后,根据所述数据量和所述预置阈值,计算出拆分数量N。[0063]在具体实施例时,可采用如下公式计算拆分数量N:[0064]N=数据量/预置阈值[0065]最后,将所述第一数据集拆分出N个子数据集。[0066]这里需要说明的是:本领域技术人员知道,进行mapjoin操作的两个数据集通常为一个大表(即数据量大的表)和一个小表(即数据量小的表),将小表全部读入本地内存中,在map阶段直接拿大表的数据与内存中的表数据做匹配。因此,当本发明实施例中所述第一数据量和第二数据量为两个数据量不同的数据集,特别是数据量差别比较大时,本发明实施例提供的技术方案也可将其中一个数据量小的表进行拆分,可减少拆分后的子数据集的个数。即本发明实施例提供的所述方法,还包括:[0067]步骤S1、获取进行mapjoin操作的两个数据集的数据量。[0068]步骤S2、比较所述两个数据集的数据量,并根据比较结果将所述数据量小的数据集作为所述第一数据集,所述数据量大的数据集作为所述第二数据集。[0069]步骤102、将所述第二数据集分别与所述N个子数据集进行mapjoin操作。[0070]在具体实施时,本步骤的实现过程如下:[0071]步骤1021、分别对所述N个子数据集进行序列化,得到N个HashTable文件。[0072]在具体实施时,可使用java的kryo序列化库,分别对所述N个子数据集进行序列化,得到N个所述HashTable文件。使用kryo作为java的序列化库,能够有效的减少压缩文件的大小。[0073]步骤1022、将所述第二数据集切分为M个数据块。[0074]其中,M大于或等于2。在实际应用中,Mapjoin的计算步骤分两步,将小表的数据变成hashtable广播到所有的map端,将大表的数据进行合理的切分,然后在map阶段的时候用大表的数据一行一行的去探测(probe)小表的hashtable,如果joinkey相等,就写入HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系统)。大表的切分是hadoop层面的,大表的数据存储在hdfs上的。其中,hdfs上的文件时分块存储的,每个块的大小是有配置参数决定的(目前集群是512MB)。由此可知,本发明实施例提供的上述步骤中,M=第二数据集的数据量/配置参数。若第二数据集的数据量小于或等于配置参数,则M就等于I;若第二数据集的数据量大于配置参数,则M就大于或等于2。[0075]步骤1023、启动M*N个映射map任务,对所述N个HashTable文件和所述M个数据块执行关联join操作。[0076]启动M*N个map任务,每个map任务读取一个所述子数据集到内存中,并获取一个所述数据块和内存中的所述子数据集进行join操作。假设,第一数据集被拆分为2个,分别为子数据集I和子数据集2;第二数据集被切分为3个数据块,分别为数据块1、数据块2和数据块3;那么就需要启动6个map任务,这6个map任务并行执行。这里为了方便说明,我们分别表示为map任务1、map任务2、map任务3、map任务4、map任务5和map任务6。其中,[0077]map任务I,读取子数据集I到内存中,并获取数据块I和子数据集I进行join操作;[0078]map任务2,读取子数据集I到内存中,并获取数据块2和子数据集I进行join操作;[0079]map任务3,读取子数据集I到内存中,并获取数据块3和子数据集I进行join操作;[0080]map任务4,读取子数据集2到内存中,并获取数据块I和子数据集2进行join操作;[0081]map任务5,读取子数据集2到内存中,并获取数据块2和子数据集2进行join操作;[0082]map任务6,读取子数据集2到内存中,并获取数据块3和子数据集2进行join操作。[0083]这里需要说明的是:启动M*N个map任务,是根据hive生成的执行计划来启动的。具体的,该执行计划的生成过程为:首先,需要对现有的hive的源码进行修改,并利用hive指定的mapjoin的hint(提示),进行语法分析,生成执行计划。然后,重写执行计划,生成新的计划树。例如,假设子数据集的个数N为3,则重写为3个各自的mapjoin任务,同时还要给下游计划添加依赖,且上游任务执行完毕后添加触发这3个mapjoin任务的触发指令。给下游计划添加依赖的目的是,在执行完成mapjoin操作后即触发下游的操作,直至任务全部执行完毕。其中,下游计划可为现有技术中执行完mapjoin操作后的一些操作,其不是本发明实施例的重点,因此,本文不进行详细说明。[0084]利用hadoop的DistributedCache,将所有子数据集分发到各个mapjoin任务的节点,例如,假设子数据集的个数N为3,则利用hadoop的DistributedCache将这3个子数据集分别分发到3个mapjoin任务的节点。在mapreduce框架下,根据前述生成的执行计划,同时启动M*N个map。每个map任务将读取一个子数据集到内存中,在map阶段的时候用第二数据集的数据一行一行的去探测(probe)小表的hashtable。如果joinkey相等,就写入HDFS。其中,M*N个map任务是并行进行的。[0085]进一步的,本发明实施例提供的所述方法,还可包括:[0086]步骤103、按照预设的命名规则,为所述N个HashTabIe文件分别命名。[0087]其中,命名规则可人为约定,例如,打161、打162,……filen,本发明实施例对此不作具体限定。[0088]步骤104、将已命名的所述N个HashTable文件存储至预置的HDFS目录下。[0089]例如,可将已命名的所述N个HashTable文件存储在一个具有唯一标识的HDFS目录dir下。[0090]进一步的,本发明实施例提供的所述方法,还可包括:[0091]步骤105、将所述mapjoin操作产生的结果写入HDFS的中间结果文件目录中。[0092]本发明实施例通过将数据量大于mapjoin操作预置阈值的表拆分为多个满足mapjoin所允许阈值的分表,然后生成并启动多个map任务来执行join操作,以实现进行mapjoin操作的两个数据集也能在map端关联,能有效避免mapreduce的shuffle(置乱)过程以及在单一reduce中处理同一个key(关键字)的大量数据,可在一定程度上解决大部分的数据倾斜问题;换句话说,本发明实施例提供的技术方案是以资源来换取效率,大大提高会发生数据倾斜的hive任务的效率。[0093]如图2所示,本发明实施例二提供的一种数据倾斜处理方法的流程示意图。如图2所示,所述方法包括:[0094]步骤201、获取进行mapjoin操作的两个数据集的数据量。[0095]步骤202、比较所述两个数据集的数据量,并根据比较结果将所述数据量小的数据集作为所述第一数据集,所述数据量大的数据集作为所述第二数据集。[0096]步骤203、根据所述第一数据集的数据量和所述预置阈值,计算出拆分数量N。[0097]步骤204、将第一数据集拆分出N个子数据集。[0098]步骤205、对N个子数据集进行序列化,得到N个HashTable文件。[0099]在具体实施时,可使用java的kryo序列化库,分别对所述N个子数据集进行序列化,得到N个所述HashTable文件。使用kryo作为java的序列化库,能够有效的减少压缩文件的大小。[0100]步骤206、将N个HashTable文件存储到一个预置HDFS目录下。[0?0?]步骤207、根据HDFS目录下的文件,生成N个mapjoin任务。[0102]步骤208、将N个HashTable文件分别分发到对应的mapjoin任务。[0?03]在具体实施例时,可利用hadoop的DiStributedCache,将所有子数据集分发到各个mapjoin任务的节点,例如,假设子数据集的个数N为3,则利用hadoop的Distributecache将这3个子数据集分别分发到3个mapjoin任务的节点。[0104]步骤209、将第二数据集切分为M个数据块。[0105]其中,M大于或等于2。在实际应用中,Mapjoin的计算步骤分两步,将小表的数据变成hashtable广播到所有的map端,将大表的数据进行合理的切分,然后在map阶段的时候用大表的数据一行一行的去探测(probe)小表的hashtable,如果joinkey相等,就写入HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系统)。大表的切分是hadoop层面的,大表的数据存储在hdfs上的。其中,hdfs上的文件时分块存储的,每个块的大小是有配置参数决定的(目前集群是512MB)。由此可知,本发明实施例提供的上述步骤中,M=第二数据集的数据量/配置参数。若第二数据集的数据量小于或等于配置参数,则M就等于I;若第二数据集的数据量大于配置参数,则M就大于或等于2。[0106]步骤210、启动M*N个映射map任务,对所述N个HashTable文件和所述M个数据块执行关联join操作。[0107]其中,这里需要说明的是:启动M*N个map任务,是根据hive生成的执行计划来启动的。具体的,该执行计划的生成过程为:首先,需要对现有的hive的源码进行修改,并利用hive指定的mapjoin的hint(提示),进行语法分析,生成执行计划。然后,重写执行计划,生成新的计划树。例如,假设子数据集的个数N为3,则重写为3个各自的mapjoin任务,同时还要给下游计划添加依赖,且上游任务执行完毕后添加触发这3个mapjoin任务的触发指令。[0108]步骤211、将所述mapjoin操作产生的结果写入HDFS的中间结果文件目录中。[0109]这里需要说明的是:执行完步骤211后即可触发后续的操作,后续的操作即同现有技术,此处不再赘述。[0110]本发明实施例通过将数据量大于mapjoin操作预置阈值的表拆分为多个满足mapjoin所允许阈值的分表,然后生成并启动多个map任务来执行join操作,以实现进行mapjoin操作的两个数据集也能在map端关联,能有效避免mapreduce的shuffle(置乱)过程以及在单一reduce中处理同一个key(关键字)的大量数据,可在一定程度上解决大部分的数据倾斜问题;换句话说,本发明实施例提供的技术方案是以资源来换取效率,大大提高会发生数据倾斜的hive任务的效率。[0111]需要说明的是:对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。[0112]图3为本发明实施例三提供的一种数据倾斜处理装置的结构示意图。如图3所示,本实施例提供的数据倾斜处理装置包括:拆分模块10和执行模块20。其中,[0113]拆分模块10,用于当进行mapjoin操作的第一数据集和第二数据集的数据量均大于预置阈值时,将所述第一数据集拆分为N个子数据集,其中,N大于或等于2,所述子数据集的数据量小于或等于所述预置阈值。[0114]执行模块20,用于将所述第二数据集分别与所述N个子数据集进行mapjoin操作。[0115]进一步的,本发明实施例提供的数据倾斜处理装置还可包括:获取模块和比较模块,其中,[0116]获取模块,用于获取进行mapjoin操作的两个数据集的数据量。[0117]比较模块,用于比较所述两个数据集的数据量,并根据比较结果将所述数据量小的数据集作为所述第一数据集,所述数据量大的数据集作为所述第二数据集。[0118]进一步的,上述的拆分模块可包括:获取单元、计算单元和拆分单元。其中,[0119]获取单元,用于获取所述第一数据集的数据量。[0120]计算单元,用于根据所述数据量和所述预置阈值,计算出拆分数量N。[0121]拆分单元,用于将所述第一数据集拆分出N个子数据集。[0122]进一步的,上述的执行模块可包括:处理单元、切分单元和执行单元。其中,[0123]处理单元,用于分别对所述N个子数据集进行序列化,得到N个HashTable文件;[0124]切分单元,用于将所述第二数据集切分为M个数据块,其中,M大于或等于2;[0125]执行单元,用于启动M*N个映射map任务,对所述N个HashTable文件和所述M个数据块执行join操作。[Ο126]进一步的,上述的执行单元具体用于启动Μ*Ν个map任务,每个map任务读取一个所述子数据集到内存中,并获取一个所述数据块和内存中的所述子数据集进行join操作。[0127]进一步的,上述的处理单元,具体用于使用java的kryo序列化库,分别对所述N个子数据集进行序列化,得到N个所述HashTable文件。[0128]进一步的,上述的执行模块,还可包括:命名单元和存储单元。其中,[0129]命名单元,用于按照预设的命名规则,为所述N个HashTable文件分别命名。[0130]存储单元,用于将已命名的所述N个HashTable文件存储至预置的HDFS目录下。[0131]进一步的,本发明实施例提供的数据倾斜处理装置,还可包括:写入模块。其中,写入模块,用于将所述mapjoin操作产生的结果写入HDFS的中间结果文件目录中。[0132]本发明实施例通过将数据量大于mapjoin操作预置阈值的表拆分为多个满足mapjoin所允许阈值的分表,然后生成并启动多个map任务来执行join操作,以实现进行mapjoin操作的两个数据集也能在map端关联,能有效避免mapreduce的shuffle(置乱)过程以及在单一reduce中处理同一个key(关键字)的大量数据,可在一定程度上解决大部分的数据倾斜问题;换句话说,本发明实施例提供的技术方案是以资源来换取效率,大大提高会发生数据倾斜的hive任务的效率。[0133]本实施例提供的所述装置可实现上述实施例一提供的所述方法,具体的实现原理可参见上述对应的部分的内容,此次不再赘述。[0134]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。[0135]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。[0136]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。【主权项】1.一种数据倾斜处理方法,其特征在于,包括:当进行映射关联mapjoin操作的第一数据集和第二数据集的数据量均大于预置阈值时,将所述第一数据集拆分为N个子数据集,其中,N大于或等于2,所述子数据集的数据量小于或等于所述预置阈值;将所述第二数据集分别与所述N个子数据集进行mapjoin操作。2.根据权利要求1所述的方法,其特征在于,所述将所述第一数据集拆分为N个子数据集,包括:获取所述第一数据集的数据量;根据所述数据量和所述预置阈值,计算出拆分数量N;将所述第一数据集拆分出N个子数据集。3.根据权利要求1或2所述的方法,其特征在于,将所述第二数据集分别与所述N个子数据集进行mapjoin操作,包括:分别对所述N个子数据集进行序列化,得到N个哈希表HashTable文件;将所述第二数据集切分为M个数据块,其中,M大于或等于2;启动M*N个映射map任务,对所述N个HashTable文件和所述M个数据块执行关联join操作。4.根据权利要求3所述的方法,其特征在于,所述分别对所述N个子数据集进行序列化,得到N个HashTabIe文件,具体为:使用java的kryo序列化库,分别对所述N个子数据集进行序列化,得到N个所述HashTable文件。5.根据权利要求3所述的方法,其特征在于,所述将所述第二数据集分别与所述N个子数据集进行mapjoin操作,还包括:按照预设的命名规则,为所述N个HashTable文件分别命名;将已命名的所述N个HashTable文件存储至预置的Hadoop分布式文件系统HDFS目录下。6.一种数据倾斜处理装置,其特征在于,包括:拆分模块,用于当进行mapjoin操作的第一数据集和第二数据集的数据量均大于预置阈值时,将所述第一数据集拆分为N个子数据集,其中,N大于或等于2,所述子数据集的数据量小于或等于所述预置阈值;执行模块,用于将所述第二数据集分别与所述N个子数据集进行mapjoin操作。7.根据权利要求6所述的装置,其特征在于,所述拆分模块,包括:获取单元,用于获取所述第一数据集的数据量;计算单元,用于根据所述数据量和所述预置阈值,计算出拆分数量N;拆分单元,用于将所述第一数据集拆分出N个子数据集。8.根据权利要求6或7所述的装置,其特征在于,所述执行模块,包括:处理单元,用于分别对所述N个子数据集进行序列化,得到N个HashTable文件;切分单元,用于将所述第二数据集切分为M个数据块,其中,M大于或等于2;执行单元,用于启动M*N个映射map任务,对所述N个HashTable文件和所述M个数据块执行join操作。9.根据权利要求8所述的装置,其特征在于,所述处理单元,具体用于使用java的kryo序列化库,分别对所述N个子数据集进行序列化,得到N个所述HashTable文件。10.根据权利要求8所述的装置,其特征在于,所述执行模块,还包括:命名单元,用于按照预设的命名规则,为所述N个HashTable文件分别命名;存储单元,用于将已命名的所述N个HashTable文件存储至预置的HDFS目录下。【文档编号】G06F17/30GK105930479SQ201610279684【公开日】2016年9月7日【申请日】2016年4月28日【发明人】刘光华【申请人】乐视控股(北京)有限公司,乐视网信息技术(北京)股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1