一种分布式数据处理方法及装置与流程

文档序号:12463669阅读:178来源:国知局
一种分布式数据处理方法及装置与流程

本发明涉及数据处理技术领域,具体涉及一种分布式数据处理方法及装置。



背景技术:

分布式数据处理也可以称为分布式计算、分布式处理或分布式事务处理。分布式数据处理是指在计算或处理时,发起者将需要计算的数据或需要处理的事务分成多个子计算、子处理或子事务,然后把这些子计算、子处理或子事务分配给多个参与者进行计算或处理,最后发起者把各参与者的处理结果综合起来得到最终的结果。

随着大数据时代的到来,各行各业需要处理的数据量越来越大,而分布式数据处理技术的引入,极大地提高了数据处理效率,促进了各行各业的发展。

但是,发明人在实现本发明的过程中,发现在现有技术中至少存在如下问题:在分布式数据处理过程中,通常根据数据的键将需要处理的数据分发到参与处理的各个服务器上,因此,键相同的数据将被分发到同一台服务器上,若某一个键对应的数据量非常大,则会出现数据分发不均匀的情况。此时,个别服务器被分发的数据量特别多,而其他服务器被分发数据量比较少,这种情况下,数据多的服务器运算负荷大,处理花费的时间长,拉低了整体的数据处理效率;而数据少的服务器运算负荷小,部分运算能力被闲置,利用率不高,导致了资源的浪费。同时,当一台服务器上处理的数据量过大时还常常出现处理失败的情况。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的分布式数据处理方法和相应的分布式数据处理装置。

根据本发明的一个方面,提供了一种分布式数据处理方法,该方法包括:将在同一数据集中的出现次数大于预设次数的键对应的数据确定为倾斜数据,将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集;根据预设的键标记集合,为倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的倾斜数据集;其中,键标记集合中包含N个不同的键标记,N为自然数;将非倾斜数据集中的每个数据复制为N个,得到扩容后的非倾斜数据集,根据键标记集合,为扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的非倾斜数据集;按照预设的数据分配规则,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

可选的,处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据的键为该数据的原始键与该数据的键标记的组合;则按照预设的数据分配规则,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理的步骤具体包括:根据各个数据的键,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

可选的,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理的步骤之后,进一步包括:从处理后的各个数据的键中删除键标记,得到各个数据的原始键。

可选的,为倾斜数据集中的每个数据的原始值分别添加一个键标记的步骤具体包括:将键标记集合中的各个键标记依次添加到倾斜数据集中的各个数据的原始键中;或者,将键标记集合中的各个键标记随机添加到倾斜数据集中的各个数据的原始键中。

可选的,为扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记的步骤具体包括:将键标记集合中的各个键标记依次添加到扩容后的非倾斜数据集中的各个数据的原始键中;或者,将键标记集合中的各个键标记随机添加到扩容后的非倾斜数据集中的各个数据的原始键中。

可选的,键标记包括:用于添加在原始键的起始位置的前缀型键标记,和/或,用于添加在原始键的末尾位置的后缀型键标记;并且,键标记包括以下中的至少一种:单字符类键标记、字符串类键标记、以及数字类键标记。

可选的,当键标记为数字类键标记时,数据分配规则包括:对每个数据的键进行模运算,根据运算结果为该数据分配服务器;和/或,当键标记为单字符类键标记和/或字符串类键标记时,数据分配规则包括:根据各个数据的键中包含的相同字符的个数,对各个数据的键进行聚类处理,根据聚类处理的结果为各个数据分配服务器。

根据本发明的另一方面,提供了一种分布式数据处理装置,该装置包括:确定模块,用于将在同一数据集中的出现次数大于预设次数的键对应的数据确定为倾斜数据,将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集;倾斜数据集标记模块,用于根据预设的键标记集合,为倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的倾斜数据集;其中,键标记集合中包含N个不同的键标记,N为自然数;非倾斜数据集标记模块,用于将非倾斜数据集中的每个数据复制为N个,得到扩容后的非倾斜数据集,根据键标记集合,为扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的非倾斜数据集;分配模块,用于按照预设的数据分配规则,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

可选的,处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据的键为该数据的原始键与该数据的键标记的组合;则分配模块具体用于:根据各个数据的键,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

可选的,装置进一步包括:删除模块,用于从处理后的各个数据的键中删除键标记,得到各个数据的原始键。

可选的,倾斜数据集标记模块具体用于:将键标记集合中的各个键标记依次添加到倾斜数据集中的各个数据的原始键中;或者,将键标记集合中的各个键标记随机添加到倾斜数据集中的各个数据的原始键中。

可选的,非倾斜数据集标记模块具体用于:将键标记集合中的各个键标记依次添加到扩容后的非倾斜数据集中的各个数据的原始键中;或者,将键标记集合中的各个键标记随机添加到扩容后的非倾斜数据集中的各个数据的原始键中。

可选的,键标记包括:用于添加在原始键的起始位置的前缀型键标记,和/或,用于添加在原始键的末尾位置的后缀型键标记;并且,键标记包括以下中的至少一种:单字符类键标记、字符串类键标记、以及数字类键标记。

可选的,当键标记为数字类键标记时,数据分配规则包括:对每个数据的键进行模运算,根据运算结果为该数据分配服务器;和/或,当键标记为单字符类键标记和/或字符串类键标记时,数据分配规则包括:根据各个数据的键中包含的相同字符的个数,对各个数据的键进行聚类处理,根据聚类处理的结果为各个数据分配服务器。

在本发明提供的一种分布式数据处理方法及装置中,能够预先根据键的出现次数确定倾斜数据,并将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集,进而为倾斜数据集中的每个数据的原始键分别添加一个键标记,并对非倾斜数据集中的数据进行扩容后添加键标记。由于数据分配过程是根据键执行的,因此,通过对数据的原始键添加键标记,能够使数据更加均匀地分配到各台服务器上,能够充分利用每台服务器的运算能力,同时也解决了现有技术中存在的一台服务器上处理的数据量过大时常常导致处理失败的问题,保证了分布式计算系统的稳定性,进一步提高了分布式计算的效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了本发明实施例一提供的一种分布式数据处理方法的流程示意图;

图2示出了本发明实施例二提供的一种分布式数据处理方法的流程示意图;

图3示出了本发明实施例三提供的一种分布式数据处理装置的结构示意图;

图4示出了本发明实施例四提供的一种分布式数据处理装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

实施例一

图1示出了本发明实施例一提供的一种分布式数据处理方法的流程示意图,该方法包括:

步骤S110:将在同一数据集中的出现次数大于预设次数的键对应的数据确定为倾斜数据,将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集。

在分布式数据处理过程中,待处理的数据是根据与其对应的键的键值来分配到不同服务器上的。如果一台服务器上分布的数据太多,会导致该台服务器处理时间太长,而其它服务器上分布的数据少,处理时间也比较少,导致整个分布式数据处理过程的运算瓶颈集中在一台服务器上,从而降低了分布式数据处理的效率。这种因为数据分布不均,导致一次分布式数据处理过程中的某个服务器完成作业的时间远远高于其它服务器,从而造成总体作业的资源消耗高和效率低下的情况就叫做“数据倾斜”,而集中分布在某台服务器上导致出现该情况的数据就是倾斜数据。

为了解决上述的数据倾斜问题,本发明实施例提出了一种分布式数据处理方法。首先,分别对每个数据集中出现的各个键进行抽样计算,得出每个数据集中的每个键的出现次数。当某个键的出现次数大于预设次数时,预示该键对应的数据将集中分配在某台服务器上,因此需要将该键对应的数据确定为倾斜数据,将包含该倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集。

步骤S120:根据预设的键标记集合,为倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的倾斜数据集;其中,键标记集合中包含N个不同的键标记,N为自然数。

因为数据倾斜情况往往出现在数据集进行聚合运算的情况下。为了避免出现数据倾斜情况,需要尽可能地将数据均匀的分布到所有服务器上。因为待处理数据是根据与其对应的键的键值分配到不同服务器上,所以本发明实施例通过对待处理数据对应的键进行修改,以尽可能达到平均分配数据的目的。

键标记集合中预存有N个不同的键标记,N为自然数,将上述键标记添加到倾斜数据集中的每个数据的原始键上,由此处理后的倾斜数据集中各个数据的键为该数据的原始键与该数据的键标记的组合。添加方式可以是将键标记作为前缀添加到原始键上,也可以将键标记作为后缀添加到原始键上,本发明对此不作具体限定,本领域技术人员可以根据具体情况灵活设定。

步骤S130:将非倾斜数据集中的每个数据复制为N个,得到扩容后的非倾斜数据集,根据键标记集合,为扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的非倾斜数据集。

为了能够保证数据集的聚合运算不出错误,需要对非倾斜数据集进行扩容处理,即将非倾斜数据集中的每个数据复制为N个(N的取值与上述键标记集合中包含的键标记个数相同),并将上述键标记集合中的键标记添加到扩容后的非倾斜数据集中的每个数据的原始键上。添加方式与倾斜数据集中的添加方式一致。

步骤S140:按照预设的数据分配规则,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

具体地,根据预设的数据分配规则,将经过上述步骤处理后的倾斜数据集和非倾斜数据集中的各个数据分配给多台服务器进行分布式处理,由于数据分配规则是根据数据的键进行分配的,因此,通过对数据的原始键进行改变,能够实现待处理数据在多台服务器上的平均分布,避免出现数据倾斜的情况。

由此可见,本发明提供的一种分布式数据处理方法可以通过对数据对应的键进行特殊处理,实现对待处理数据进行合理分配,使数据更加均匀地分配到服务器上,能够充分利用每台服务器的运算能力,进一步提高了分布式计算的效率。

实施例二

图2示出了本发明实施例二提供的一种分布式数据处理方法的流程示意图,该方法包括:

步骤S210:将在同一数据集中的出现次数大于预设次数的键对应的数据确定为倾斜数据,将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集。

在分布式数据处理过程中,待处理的数据是根据与其对应的键的键值来分配到不同服务器上的。如果一台服务器上分布的数据太多,会导致该台服务器处理时间太长,而其它服务器上分布的数据少,处理时间也比较少,导致整个分布式数据处理过程的运算瓶颈集中在一台服务器上,从而降低了分布式数据处理的效率。这种因为数据分布不均,导致一次分布式数据处理过程中的某个服务器完成作业的时间远远高于其它服务器,从而造成总体作业的资源消耗高和效率低下的情况就叫做“数据倾斜”,而集中分布在某台服务器上导致出现该情况的数据就是倾斜数据。

为了解决上述的数据倾斜问题,本发明实施例提出了一种分布式数据处理方法。首先,分别对每个数据集中出现的各个键进行抽样计算,得出每个数据集中的每个键的出现次数。当某个键的出现次数大于预设次数时,说明该键对应的数据过于集中在某台服务器上,因此需要将该键对应的数据确定为倾斜数据,将包含该倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集。其中,预设次数的具体取值可根据经验或根据分布式服务器的数量确定。

步骤S220:根据预设的键标记集合,为倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的倾斜数据集;其中,键标记集合中包含N个不同的键标记,N为自然数。

因为数据倾斜情况往往出现在数据集进行聚合运算的情况下,为了避免出现数据倾斜情况,需要尽可能地将数据均匀的分布到所有服务器上。因为待处理数据是根据与其对应的键的键值分配到不同服务器上,所以本发明实施例通过对待处理数据对应的键进行修改,以尽可能达到平均分配数据的目的。

键标记集合中预存有N个不同的键标记,N为自然数,将上述键标记添加到倾斜数据集中的每个数据的原始键上,由此处理后的倾斜数据集中各个数据的键为该数据的原始键与该数据的键标记的组合。上述键标记可以是作为前缀添加到原始键起始位置的前缀型键标记,也可以是作为后缀添加到原始键的末尾位置的后缀型键标记。该键标记的类型可以是单字符类键标记,也可以是字符串类键标记,还可以是数字类键标记。本发明对此不作具体限定,本领域技术人员可以根据具体情况灵活设定。

关于键标记的具体添加方式,在本发明实施例中,可以将键标记集合中的各个键标记依次添加到倾斜数据集中的各个数据的原始键中。假设,倾斜数据集中的数据的原始键为key1、key2、key3、key4、key5,预设的键标记集合中的键标记为0、1、2、3、4,则处理后的键为0_key1、1_key2、2_key3、3_key4、4_key5。

在其他实施例中,键标记的具体添加方式也可以是将键标记集合中的各个键标记随机添加到倾斜数据集中的各个数据的原始键中。假设,倾斜数据集中的数据的原始键为key1、key2、key3、key4、key5,预设的键标记集合中的键标记为0、1、2、3、4,则处理后的键为1_key1、0_key2、2_key3、3_key4、4_key5。至于在实际应用中,具体选择上述哪一种添加方式,本发明对此不作具体限定,本领域技术人员可以根据实际情况设定。

步骤S230:将非倾斜数据集中的每个数据复制为N个,得到扩容后的非倾斜数据集,根据键标记集合,为扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的非倾斜数据集。

为了能够保证数据集的聚合运算不出错误,需要对非倾斜数据集进行扩容处理,即:将非倾斜数据集中的每个数据复制为N个(N的取值与上述键标记集合中包含的键标记个数相同),并将上述键标记集合中的键标记添加到非倾斜数据集中的每个数据的原始键上,处理后的键为该数据的原始键与该数据的键标记的组合。上述键标记可以是作为前缀添加到原始键起始位置的前缀型键标记,也可以是作为后缀添加到原始键的末尾位置的后缀型键标记。该键标记的类型可以是单字符类键标记,也可以是字符串类键标记,还可以是数字类键标记。本发明对此不作具体限定,本领域技术人员可以根据具体情况灵活设定。

在实现本发明的过程中,发明人发现:为了提高数据处理的准确性,有必要对非倾斜数据集进行扩容。下面以一个具体例子来阐述:假设,确定的倾斜数据集中各个数据的原始键分别为key1、key2、key3、key4、key5,确定的非倾斜数据集中的数据的原始键为key7,预设的键标记集合中的键标记为0、1、2、3、4。

当倾斜数据集中的各个数据与非倾斜数据集中的数据进行聚合运算时:

当处理后的倾斜数据集中的各个数据与未经扩容直接处理的非倾斜数据集中的数据进行聚合运算时:

由此可见,在未经扩容的情况下,可能出现1_key(1,())、2_key(3,())、3_key(4,())、4_key(5,())这四个错误的计算结果。

当处理后的倾斜数据集中的各个数据与扩容后的非倾斜数据集中的数据进行聚合运算时:

由此可见,与扩容后的非倾斜数据集进行聚合运算所得到的结果均为正确结果,在后续处理时,只需将添加的键标记去除即可。因此,在本实施例中,为了进一步提高数据处理的正确性,需要对非倾斜数据集进行扩容操作。

关于键标记的具体添加方式,在本发明实施例中,可以将键标记集合中的各个键标记依次添加到扩容后的非倾斜数据集中的各个数据的原始键中。假设,N为5,预设的键标记集合中的键标记为0、1、2、3、4,扩容前的非倾斜数据集中的数据的原始键为key7,则扩容后的非倾斜数据集中的数据的原始键为5个key7,处理后的键为0_key7、1_key7、2_key7、3_key7、4_key7。

在其他实施例中,键标记的具体添加方式也可以是将键标记集合中的各个键标记随机添加到扩容后的非倾斜数据集中的各个数据的原始键中。假设,N为5,预设的键标记集合中的键标记为0、1、2、3、4,扩容前的非倾斜数据集中的数据的原始键为key7,则扩容后的非倾斜数据集中的数据的原始键为5个key7,处理后的键为0_key7、4_key7、1_key7、3_key7、2_key7。

步骤S240:按照预设的数据分配规则,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

具体而言,步骤S240是根据各个数据的键,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器,从而进行分布式处理。其中,当键标记类型不同时,预设的分配规则也可能不同,本领域技术人员可以根据分配规则来确定键标记的设置方式:例如,当键标记为数字类键标记时,数据分配规则为对每个数据的键进行模运算之后,根据运算结果为该数据分配服务器,由此可见,数字类键标记尤其适用于按照模运算结果进行分配的场景中。又如,当键标记为单字符类键标记或者字符串类键标记时,数据分配的规则为根据各个数据的键中包含的相同字符的个数,对各个数据的键进行聚类处理,根据聚类处理的结果为各个数据分配服务器,由此可见,单字符类键标记或者字符串类键标记尤其适用于根据键的聚类结果进行分配的场景中。具体地,在本实施例中,假设分配规则为:从键的首字母开始进行动态匹配,从而将键的起始部分相同的数据分配到同一服务器上,则优选地将单字符类键标记或者字符串类键标记以前缀方式添加到各个数据的原始键中,从而能够尽可能地实现数据分配的均衡化。对于键标记类型的选择和预设分配规则的设定,本发明不作具体限定,本领域技术人员可以根据实际情况灵活设定。

步骤S250:从处理后的各个数据的键中删除键标记,得到各个数据的原始键。

因为键标记是本发明添加到各个数据的键中的标识,并非各个数据的键自带的部分,所以在经过本发明的分布式数据处理方法处理之后,需要将处理后的各个数据的键中的键标记删除,从而得到各个数据的原始键,以便运算结果用于之后的实际应用中。

由此可见,本发明提供的一种分布式数据处理方法可以通过对数据对应的键进行特殊处理,实现对待处理数据进行合理分配,使数据更加均匀地分配到服务器上,能够充分利用每台服务器的运算能力,同时也解决了现有技术中存在的一台服务器上处理的数据量过大时常常导致处理失败的问题,保证了分布式计算系统的稳定性,进一步提高了分布式计算的效率。

实施例三

图3示出了本发明实施例三提供的一种分布式数据处理装置的结构示意图,该装置包括:确定模块310、倾斜数据集标记模块320、非倾斜数据集标记模块330和分配模块340。

确定模块310:将在同一数据集中的出现次数大于预设次数的键对应的数据确定为倾斜数据,将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集。

在分布式数据处理过程中,待处理的数据是根据与其对应的键的键值来分配到不同服务器上的。如果一台服务器上分布的数据太多,会导致该台服务器处理时间太长,而其它服务器上分布的数据少,处理时间也比较少,导致整个分布式数据处理过程的运算瓶颈集中在一台服务器上,从而降低了分布式数据处理的效率。这种因为数据分布不均,导致一次分布式数据处理过程中的某个服务器完成作业的时间远远高于其它服务器,从而造成总体作业的资源消耗高和效率低下的情况就叫做“数据倾斜”,而集中分布在某台服务器上导致出现该情况的数据就是倾斜数据。

为了解决上述的数据倾斜问题,本发明实施例提出了一种分布式数据处理装置。首先,确定模块310分别对每个数据集中出现的各个键进行抽样计算,得出每个数据集中的每个键的出现次数。当某个键的出现次数大于预设次数时,预示该键对应的数据将集中分配在某台服务器上,因此确定模块310需要将该键对应的数据确定为倾斜数据,将包含该倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集。

倾斜数据集标记模块320:根据预设的键标记集合,为倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的倾斜数据集;其中,键标记集合中包含N个不同的键标记,N为自然数。

因为数据倾斜情况往往出现在数据集进行聚合运算的情况下。为了避免出现数据倾斜情况,需要尽可能地将数据均匀的分布到所有服务器上。因为待处理数据是根据与其对应的键的键值分配到不同服务器上,所以本发明实施例通过对待处理数据对应的键进行修改,以尽可能达到平均分配数据的目的。

键标记集合中预存有N个不同的键标记,N为自然数,倾斜数据集标记模块320将上述键标记添加到倾斜数据集中的每个数据的原始键上,由此处理后的倾斜数据集中各个数据的键为该数据的原始键与该数据的键标记的组合。添加方式可以是将键标记作为前缀添加到原始键上,也可以将键标记作为后缀添加到原始键上,本发明对此不作具体限定,本领域技术人员可以根据具体情况灵活设定。

非倾斜数据集标记模块330:将非倾斜数据集中的每个数据复制为N个,得到扩容后的非倾斜数据集,根据键标记集合,为扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的非倾斜数据集。

为了能够保证数据集的聚合运算不出错误,非倾斜数据集标记模块330需要对非倾斜数据集进行扩容处理,即将非倾斜数据集中的每个数据复制为N个(N的取值与上述键标记集合中包含的键标记个数相同),并将上述键标记集合中的键标记添加到扩容后的非倾斜数据集中的每个数据的原始键上。添加方式与倾斜数据集中的添加方式一致。

分配模块340:按照预设的数据分配规则,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

具体地,分配模块340根据预设的数据分配规则,将经过上述步骤处理后的倾斜数据集和非倾斜数据集中的各个数据分配给多台服务器进行分布式处理,由于数据分配规则是根据数据的键进行分配的,因此,通过对数据的原始键进行改变,能够实现待处理数据在多台服务器上的平均分布,避免出现数据倾斜的情况。

关于上述各个模块的具体结构和工作原理可参照方法实施例中相应部分的描述,此处不再赘述。

由此可见,本发明提供的一种分布式数据处理装置可以通过对数据对应的键进行特殊处理,实现对待处理数据进行合理分配,使数据更加均匀地分配到服务器上,能够充分利用每台服务器的运算能力,进一步提高了分布式计算的效率。

实施例四

图4示出了本发明实施例四提供的一种分布式数据处理装置的结构示意图,该装置包括:确定模块410、倾斜数据集标记模块420、非倾斜数据集标记模块430、分配模块440和删除模块450。

确定模块410,用于将在同一数据集中的出现次数大于预设次数的键对应的数据确定为倾斜数据,将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集。

在分布式数据处理过程中,待处理的数据是根据与其对应的键的键值来分配到不同服务器上的。如果一台服务器上分布的数据太多,会导致该台服务器处理时间太长,而其它服务器上分布的数据少,处理时间也比较少,导致整个分布式数据处理过程的运算瓶颈集中在一台服务器上,从而降低了分布式数据处理的效率。这种因为数据分布不均,导致一次分布式数据处理过程中的某个服务器完成作业的时间远远高于其它服务器,从而造成总体作业的资源消耗高和效率低下的情况就叫做“数据倾斜”,而集中分布在某台服务器上导致出现该情况的数据就是倾斜数据。

为了解决上述的数据倾斜问题,首先,确定模块410分别对每个数据集中出现的各个键进行抽样计算,得出每个数据集中的每个键的出现次数。当某个键的出现次数大于预设次数时,说明该键对应的数据过于集中在某台服务器上,因此需要将该键对应的数据确定为倾斜数据,将包含该倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集。其中,预设次数的具体取值可以根据经验或根据分布式服务器的数量确定。

倾斜数据集标记模块420,用于根据预设的键标记集合,为倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的倾斜数据集;其中,键标记集合中包含N个不同的键标记,N为自然数。

因为数据倾斜情况往往出现在数据集进行聚合运算的情况下,为了避免出现数据倾斜情况,需要尽可能地将数据均匀的分布到所有服务器上。因为待处理数据是根据与其对应的键的键值分配到不同服务器上,所以本发明实施例通过对待处理数据对应的键进行修改,以尽可能达到平均分配数据的目的。

键标记集合中预存有N个不同的键标记,N为自然数,倾斜数据集标记模块420将上述键标记添加到倾斜数据集中的每个数据的原始键上,由此处理后的倾斜数据集中各个数据的键为该数据的原始键与该数据的键标记的组合。上述键标记可以是作为前缀添加到原始键起始位置的前缀型键标记,也可以是作为后缀添加到原始键的末尾位置的后缀型键标记。该键标记的类型可以是单字符类键标记,也可以是字符串类键标记,还可以是数字类键标记。本发明对此不作具体限定,本领域技术人员可以根据具体情况灵活设定。

关于键标记的具体添加方式,在本发明实施例中,可以将键标记集合中的各个键标记依次添加到倾斜数据集中的各个数据的原始键中。假设,倾斜数据集中的数据的原始键为key1、key2、key3、key4、key5,预设的键标记集合中的键标记为0、1、2、3、4,则处理后的键为0_key1、1_key2、2_key3、3_key4、4_key5。

在其他实施例中,键标记的具体添加方式也可以是将键标记集合中的各个键标记随机添加到倾斜数据集中的各个数据的原始键中。假设,倾斜数据集中的数据的原始键为key1、key2、key3、key4、key5,预设的键标记集合中的键标记为0、1、2、3、4,则处理后的键为1_key1、0_key2、2_key3、3_key4、4_key5。至于在实际应用中,具体选择上述哪一种添加方式,本发明对此不作具体限定,本领域技术人员可以根据实际情况设定。

非倾斜数据集标记模块430,用于将非倾斜数据集中的每个数据复制为N个,得到扩容后的非倾斜数据集,根据键标记集合,为扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的非倾斜数据集。

为了能够保证数据集的聚合运算不出错误,非倾斜数据集标记模块430需要对非倾斜数据集进行扩容处理,即:将非倾斜数据集中的每个数据复制为N个(N的取值与上述键标记集合中包含的键标记个数相同),并将上述键标记集合中的键标记添加到非倾斜数据集中的每个数据的原始键上,处理后的键为该数据的原始键与该数据的键标记的组合。上述键标记可以是作为前缀添加到原始键起始位置的前缀型键标记,也可以是作为后缀添加到原始键的末尾位置的后缀型键标记。该键标记的类型可以是单字符类键标记,也可以是字符串类键标记,还可以是数字类键标记。本发明对此不作具体限定,本领域技术人员可以根据具体情况灵活设定。

关于键标记的具体添加方式,在本发明实施例中,可以将键标记集合中的各个键标记依次添加到扩容后的非倾斜数据集中的各个数据的原始键中。假设,N为5,预设的键标记集合中的键标记为0、1、2、3、4,扩容前的非倾斜数据集中的数据的原始键为key7,则扩容后的非倾斜数据集中的数据的原始键为5个key7,处理后的键为0_key7、1_key7、2_key7、3_key7、4_key7。

在其他实施例中,键标记的具体添加方式也可以是将键标记集合中的各个键标记随机添加到扩容后的非倾斜数据集中的各个数据的原始键中。假设,N为5,预设的键标记集合中的键标记为0、1、2、3、4,扩容前的非倾斜数据集中的数据的原始键为key7,则扩容后的非倾斜数据集中的数据的原始键为5个key7,处理后的键为0_key7、4_key7、1_key7、3_key7、2_key7。

分配模块440:按照预设的数据分配规则,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

具体而言,分配模块440是根据各个数据的键,将处理后的倾斜数据集以及处理后的非倾斜数据集中的各个数据分配给多台服务器,从而进行分布式处理。其中,当键标记类型不同时,预设的分配规则也可能不同,本领域技术人员可以根据分配规则来确定键标记的设置方式:例如,当键标记为数字类键标记时,数据分配规则为对每个数据的键进行模运算之后,根据运算结果为该数据分配服务器,由此可见,数字类键标记尤其适用于按照模运算结果进行分配的场景中。又如,当键标记为单字符类键标记或者字符串类键标记时,数据分配的规则为根据各个数据的键中包含的相同字符的个数,对各个数据的键进行聚类处理,根据聚类处理的结果为各个数据分配服务器,由此可见,单字符类键标记或者字符串类键标记尤其适用于根据键的聚类结果进行分配的场景中。具体地,在本实施例中,假设分配规则为:从键的首字母开始进行动态匹配,从而将键的起始部分相同的数据分配到同一服务器上,则优选地将单字符类键标记或者字符串类键标记以前缀方式添加到各个数据的原始键中,从而能够尽可能地实现数据分配的均衡化。对于键标记类型的选择和预设分配规则的设定,本发明不作具体限定,本领域技术人员可以根据实际情况灵活设定。

删除模块450:从处理后的各个数据的键中删除键标记,得到各个数据的原始键。

因为键标记是本发明添加到各个数据的键中的标识,并非各个数据的键自带的部分,所以在经过本发明的分布式数据处理方法处理之后,删除模块450需要将处理后的各个数据的键中的键标记删除,从而得到各个数据的原始键,以便运算结果用于之后的实际应用中。

关于上述各个模块的具体结构和工作原理可参照方法实施例中相应部分的描述,此处不再赘述。

由此可见,本发明提供的一种分布式数据处理方法可以通过对数据对应的键进行特殊处理,实现对待处理数据进行合理分配,使数据更加均匀地分配到服务器上,能够充分利用每台服务器的运算能力,同时也解决了现有技术中存在的一台服务器上处理的数据量过大时常常导致处理失败的问题,保证了分布式计算系统的稳定性,进一步提高了分布式计算的效率。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的分布式数据处理装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了:A1、一种分布式数据处理方法,包括:

将在同一数据集中的出现次数大于预设次数的键对应的数据确定为倾斜数据,将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集;

根据预设的键标记集合,为所述倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的倾斜数据集;其中,所述键标记集合中包含N个不同的键标记,N为自然数;

将所述非倾斜数据集中的每个数据复制为N个,得到扩容后的非倾斜数据集,根据所述键标记集合,为所述扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的非倾斜数据集;

按照预设的数据分配规则,将所述处理后的倾斜数据集以及所述处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

A2、根据A1所述的方法,其中,所述处理后的倾斜数据集以及所述处理后的非倾斜数据集中的各个数据的键为该数据的原始键与该数据的键标记的组合;

则所述按照预设的数据分配规则,将所述处理后的倾斜数据集以及所述处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理的步骤具体包括:根据各个数据的键,将所述处理后的倾斜数据集以及所述处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

A3、根据A1或A2所述的方法,其中,所述将所述处理后的倾斜数据集以及所述处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理的步骤之后,进一步包括:

从处理后的各个数据的键中删除所述键标记,得到各个数据的原始键。

A4、根据A1-A3任一所述的方法,其中,所述为所述倾斜数据集中的每个数据的原始值分别添加一个键标记的步骤具体包括:

将所述键标记集合中的各个键标记依次添加到所述倾斜数据集中的各个数据的原始键中;或者,

将所述键标记集合中的各个键标记随机添加到所述倾斜数据集中的各个数据的原始键中。

A5、根据A1-A4任一所述的方法,其中,所述为所述扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记的步骤具体包括:

将所述键标记集合中的各个键标记依次添加到所述扩容后的非倾斜数据集中的各个数据的原始键中;或者,

将所述键标记集合中的各个键标记随机添加到所述扩容后的非倾斜数据集中的各个数据的原始键中。

A6、根据A1-A5任一所述的方法,其中,所述键标记包括:用于添加在原始键的起始位置的前缀型键标记,和/或,用于添加在原始键的末尾位置的后缀型键标记;

并且,所述键标记包括以下中的至少一种:单字符类键标记、字符串类键标记、以及数字类键标记。

A7、根据A1-A6任一所述的方法,其中,当所述键标记为数字类键标记时,所述数据分配规则包括:对每个数据的键进行模运算,根据运算结果为该数据分配服务器;和/或,

当所述键标记为单字符类键标记和/或字符串类键标记时,所述数据分配规则包括:根据各个数据的键中包含的相同字符的个数,对各个数据的键进行聚类处理,根据聚类处理的结果为各个数据分配服务器。

B8、一种分布式数据处理装置,包括:

确定模块,用于将在同一数据集中的出现次数大于预设次数的键对应的数据确定为倾斜数据,将包含倾斜数据的数据集确定为倾斜数据集,将未包含倾斜数据的数据集确定为非倾斜数据集;

倾斜数据集标记模块,用于根据预设的键标记集合,为所述倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的倾斜数据集;其中,所述键标记集合中包含N个不同的键标记,N为自然数;

非倾斜数据集标记模块,用于将所述非倾斜数据集中的每个数据复制为N个,得到扩容后的非倾斜数据集,根据所述键标记集合,为所述扩容后的非倾斜数据集中的每个数据的原始键分别添加一个键标记,得到处理后的非倾斜数据集;

分配模块,用于按照预设的数据分配规则,将所述处理后的倾斜数据集以及所述处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

B9、根据B8所述的装置,其中,所述处理后的倾斜数据集以及所述处理后的非倾斜数据集中的各个数据的键为该数据的原始键与该数据的键标记的组合;

则分配模块具体用于:根据各个数据的键,将所述处理后的倾斜数据集以及所述处理后的非倾斜数据集中的各个数据分配给多台服务器进行分布式处理。

B10、根据B8或B9所述的装置,其中,所述装置进一步包括:

删除模块,用于从处理后的各个数据的键中删除所述键标记,得到各个数据的原始键。

B11、根据B8-B10任一所述的装置,其中,所述倾斜数据集标记模块具体用于:

将所述键标记集合中的各个键标记依次添加到所述倾斜数据集中的各个数据的原始键中;或者,

将所述键标记集合中的各个键标记随机添加到所述倾斜数据集中的各个数据的原始键中。

B12、根据B8-B11任一所述的装置,其中,所述非倾斜数据集标记模块具体用于:

将所述键标记集合中的各个键标记依次添加到所述扩容后的非倾斜数据集中的各个数据的原始键中;或者,

将所述键标记集合中的各个键标记随机添加到所述扩容后的非倾斜数据集中的各个数据的原始键中。

B13、根据B8-B12任一所述的装置,其中,所述键标记包括:用于添加在原始键的起始位置的前缀型键标记,和/或,用于添加在原始键的末尾位置的后缀型键标记;

并且,所述键标记包括以下中的至少一种:单字符类键标记、字符串类键标记、以及数字类键标记。

B14、根据B8-B13任一所述的装置,其中,当所述键标记为数字类键标记时,所述数据分配规则包括:对每个数据的键进行模运算,根据运算结果为该数据分配服务器;和/或,

当所述键标记为单字符类键标记和/或字符串类键标记时,所述数据分配规则包括:根据各个数据的键中包含的相同字符的个数,对各个数据的键进行聚类处理,根据聚类处理的结果为各个数据分配服务器。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1