首页 / 专利库 / 电脑零配件 / 外围设备 / 硬盘 / 用于在运行时处理数据倾斜的系统和方法

用于在运行时处理数据倾斜的系统和方法

阅读:405发布:2020-05-11

专利汇可以提供用于在运行时处理数据倾斜的系统和方法专利检索,专利查询,专利分析的服务。并且一种用于处理数据倾斜的系统,包括计算 节点 和处理器的集群。集群包括一个或多个第一节点和一个或多个第二节点,每个第一节点具有存储装置,每个第二节点具有存储装置。各个第二节点的存储装置具有比各个第一节点的存储装置高的存取速度。处理器被配置为将输入数据拆分为输入数据的分区,检测任何分区是否具有数据倾斜,将检测为不具有数据倾斜的分区分配给第一节点,将检测为具有数据倾斜的分区分配给第二节点,以用于并行处理。,下面是用于在运行时处理数据倾斜的系统和方法专利的具体信息内容。

1.一种系统,包括:
计算节点的集群,包括多个第一节点和多个第二节点,其中所述第一节点和所述第二节点中的每个节点具有存储装置,并且各个第二节点的存储装置具有比各个第一节点的存储装置高的存取速度;以及
处理器,被配置为将输入数据拆分为分区,检测任何所述分区是否具有数据倾斜,将不具有数据倾斜的分区分配给所述第一节点,将具有数据倾斜的分区分配给所述第二节点,以用于并行处理。
2.根据权利要求1所述的系统,其中,每个所述第二节点的存储装置在存取速度方面与所述第二节点使用的存储器相当。
3.根据权利要求1所述的系统,其中,每个所述第二节点的存储装置适于作为所述第二节点的计算资源的临时扩展存储器。
4.根据权利要求1所述的系统,其中,各个所述第二节点的存储装置包括非易失性存储器快速NVMe、Optane固态硬盘SSD或永久性存储器中的至少一种。
5.根据权利要求1所述的系统,其中,所述处理器被配置为至少部分地基于所述第二节点的数量与所述第一节点和第二节点的总数量的比值来将一比例分区确定为具有数据倾斜。
6.根据权利要求5所述的系统,其中,所述比例在1%-10%的范围内,并且所述比值在
1%-10%的范围内。
7.根据权利要求5所述的系统,其中,所述处理器被配置为基于所述比例,将以数据量降序排序的分区列表中的顶部分区确定为具有数据倾斜。
8.根据权利要求7所述的系统,其中,所述处理器被配置为基于映射-重排-化简的MapReduce方式来处理所述输入数据,所包括的数据量由包括在所述分区中的键-值对的数量和所述分区的大小中的至少一个来表示。
9.根据权利要求8所述的系统,其中,所述处理器还被配置为在评估所述数据量时应用加权因子。
10.根据权利要求9所述的系统,其中,所述加权因子在5-10的范围内。
11.根据权利要求8所述的系统,其中,所述处理器还被配置为设置所述数据量的下界,并且如果所述分区的数据量不大于所述下界,则将所述分区确定为不具有数据倾斜。
12.根据权利要求11所述的系统,其中,所述处理器还被配置为至少部分地基于由所述键-值对的典型大小划分的预先确定的数据大小来设置所述键-值对的数量的下界,以及至少部分地基于所述预先确定的数据大小来设置所述分区的大小的下界,其中所述预先确定的数据大小指示如果在所述第一节点上进行处理将不使所述第一节点发生显著劣化的数据大小。
13.根据权利要求12所述的系统,其中,所述预先确定的数据大小在2GB-4GB的范围内。
14.一种方法,包括:
处理器将输入数据拆分为分区;
处理器检测任何所述分区是否具有数据倾斜;以及
处理器将不具有数据倾斜的分区分配给计算节点集群的第一节点,将具有数据倾斜的分区分配给所述集群的第二节点,以用于并行处理,
其中,所述第一节点和所述第二节点中的每个节点具有存储装置,并且各个第二节点的存储装置具有比各个第一节点的存储装置高的存取速度。
15.根据权利要求14所述的方法,其中,检测任何所述分区是否具有数据倾斜的步骤包括:至少部分地基于所述第二节点的数量与所述第一节点和所述第二节点的总数量的比值将一比例分区确定为具有数据倾斜。
16.根据权利要求15所述的方法,其中,检测任何所述分区是否具有数据倾斜的步骤包括:基于所述比例,将以数据量降序排序的分区列表中的顶部分区确定为具有数据倾斜。
17.根据权利要求16所述的方法,其中,所述方法是MapReduce方法,并且所述数据量由包括在所述分区中的键-值对的数量和所述分区的大小中的至少一个来表示。
18.根据权利要求17所述的方法,还包括:在评估所述数据量时应用加权因子。
19.根据权利要求17所述的方法,还包括:设置所述数据量的下界,并且如果所述分区的数据量不大于所述下界,则将所述分区确定为不具有数据倾斜。
20.一种存储计算机可执行代码的非暂时性计算机可读介质,其中,当在处理器上执行时,所述计算机可执行代码被配置为:
将输入数据拆分为分区;
检测任何所述分区是否具有数据倾斜;以及
将不具有数据倾斜的分区分配给计算节点集群的第一节点,将具有数据倾斜的分区分配给所述集群的第二节点,以用于并行处理,
其中,所述第一节点和所述第二节点中的每个节点具有存储装置,并且各个第二节点的存储装置具有比各个第一节点的存储装置高的存取速度。

说明书全文

用于在运行时处理数据倾斜的系统和方法

[0001] 交叉引用
[0002] 在本公开的描述中引用和讨论了可能包括专利、专利申请和各种出版物的一些参考文献。提供这种参考文献的引用和/或讨论仅是为了阐明对本公开的描述,而不是承认任何这种参考文献是本文中所描述的公开的“现有技术”。本说明书中引用和讨论的所有参考文献通过引用整体并入本文中,其程度与每个参考文献通过引用单独并入本文中的程度相同。

技术领域

[0003] 本公开大体上涉及大数据领域,更具体地,涉及在运行时处理大数据框架中的数据倾斜的系统和方法。

背景技术

[0004] 本文中所提供的背景技术描述是出于大体上呈现本公开的背景的目的。目前署名的发明人在本背景技术部分中所描述范围内的工作,以及在递交时可能无法被另外视为现有技术的描述的各方面,均未明确或暗含为针对本公开的现有技术。
[0005] 随着数据量的增加和数据的高复杂性,数据倾斜常见于大规模大数据处理中。由于大多数大数据框架利用同步分布式计算模型,因此数据倾斜将显著增加大数据应用的执行时间。在一些严重的情况下,应用甚至由于数据倾斜而无法完成。此外,公司中的数据分布每天都在发生变化,而大多数现有解决方案无法在运行时解决数据倾斜的问题。
[0006] 因此,在本领域中存在解决上述缺陷和不足的未解决的需求。

发明内容

[0007] 在一个方面,本公开涉及用于在运行时处理数据倾斜的系统。在某些实施例中,系统包括多个计算设备,该多个计算设备定义计算节点和处理器的集群。该集群包括多个第一节点和多个第二节点,多个第一节点中的每个第一节点具有存储装置,多个第二节点中的每个第二节点具有存储装置。各个第二节点的存储装置具有比各个第一节点的存储装置高的存取速度。处理器被配置为将输入数据拆分为输入数据的分区,检测任何分区是否具有数据倾斜,并将不具有数据倾斜的分区分配给第一节点,将具有数据倾斜的分区分配给第二节点,以用于并行处理。
[0008] 在某些实施例中,第二节点的数量与第一节点和第二节点的总数量的比值小于10%,优选小于5%。在某些实施例中,比值大约为1%。
[0009] 在某些实施例中,每个第二节点的存储装置在存取速度方面与第二节点使用的存储器相当。
[0010] 在某些实施例中,每个第二节点的存储装置适于作为第二节点的计算资源的临时扩展存储器。
[0011] 在某些实施例中,各个第二节点的存储装置包括非易失性存储器快速(NVMe)、Optane固态盘(SSD)或永久性存储器中的至少一种。
[0012] 在某些实施例中,处理器被配置为至少部分地基于第二节点的数量与第一节点和第二节点的总数量的比值来将一比例分区确定为具有数据倾斜。在某些实施例中,处理器是集群内节点中的主进程,其被配置为管理第一节点和第二节点。
[0013] 在某些实施例中,处理器被配置为基于该比例将以数据量降序排序的分区列表中的顶部分区确定为具有数据倾斜。在某些实施例中,该比例在1%-10%的范围内,并且该比值在1%-10%的范围内。
[0014] 在某些实施例中,处理器被配置为基于映射-重排-化简(MapReduce)的方式来处理输入数据,并且数据量由包括在分区中的键-值对的数量和分区大小中的至少一个来表示。
[0015] 在某些实施例中,处理器还被配置为在评估数据量时应用加权因子。在某些实施例中,加权因子在2-20的范围内。在某些实施例中,加权因子在5-10的范围内。
[0016] 在某些实施例中,处理器还被配置为设置数据量的下界,并且如果分区的数据量不大于该下界,则将该分区确定为不具有数据倾斜。
[0017] 在某些实施例中,处理器还被配置为至少部分地基于由键-值对的典型大小划分的预先确定的数据大小来设置键-值对数量的下界,和/或至少部分地基于该预先确定的数据大小来设置分区大小的下界,其中预先确定的数据大小指示如果在第一节点上进行处理将不使第一节点发生显著劣化的数据大小。例如,预先确定的数据大小在2GB-4GB的范围内。
[0018] 在某些实施例中,处理器被配置为使用以下公式来检查数据倾斜:max(N_factor*N_percentile(percentage),lower_bound)。N_factor是基于作业和集群而预先确定的因子,并且可以在5-10的范围内。N_percentile(percentage)是在百分比排列处的键-值对的数量,其中百分比排列是基于键-值对的数量从高到低的分区序列。在某些实施例中,该百分比大约为90%-95%或更高。在某些实施例中,该百分比大约为99%。lower_bound是预先确定的键-值对的数量,其可以通过将没有明显性能下降的预先确定的分区大小(例如2GB或4GB)除以平均键-值大小(例如20个字节)来估计,并且可以在大约1000万至2000万的范围内。一旦得到max(N_factor*N_percentile(percentage),lower_bound)的值,就将数据大小等于或大于该值的分区确定为具有数据倾斜的分区(或可能具有数据倾斜的分区)。
[0019] 在某些实施例中,处理器被配置为使用以下公式来检查数据倾斜:max(S_factor*S_percentile(percentage),lower_bound)。S_factor是基于作业和集群的预先确定的因子,可以在大约5-10的范围内。S_percentile(percentage)是百分比排列处的分区大小,其中该百分比排列是基于数据大小从高到低的分区序列。在某些实施例中,该百分比大约为90%-95%或更高。在某些实施例中,该百分比大约为99%。lower_bound是预先确定的数据大小,其可以基于集群和输入数据的特征来估计,并且可以在大约2GB-4GB的范围内。一旦得到max(S_factor*S_percentile(percentage),lower_bound)的值,就将数据大小等于或大于该值的分区确定为具有数据倾斜的分区(或可能具有数据倾斜的分区)。
[0020] 在某些实施例中,处理器还将使用上面两个公式中的任何一个公式确定为具有数据倾斜的分区分配给第二节点,将确定为不具有数据倾斜的分区分配给第一节点。此外,在并行处理之后,处理器(可以是集群中主进程节点的处理器)化简并行处理的结果,以获得作业的最终结果。
[0021] 另一方面,本公开涉及一种在运行时处理数据倾斜的方法。该方法包括:
[0022] 处理器将输入数据拆分为输入数据的分区;
[0023] 处理器检测任何分区是否具有数据倾斜;以及
[0024] 处理器将不具有数据倾斜的分区分配给计算节点集群的第一节点,将具有数据倾斜的分区分配给集群的第二节点,以用于并行处理,其中每个第一节点具有存储装置,每个第二节点具有存储装置,并且各个第二节点的存储装置具有比各个第一节点的存储装置高的存取速度。
[0025] 在某些实施例中,检测任何分区是否具有数据倾斜的步骤包括至少部分地基于第二节点的数量与第一节点和第二节点的总数量的比值来将一比例分区确定为具有数据倾斜。
[0026] 在某些实施例中,检测任何分区是否具有数据倾斜的步骤包括基于该比例将以数据量降序排序的分区列表中的顶部分区确定为具有数据倾斜。
[0027] 在某些实施例中,方法基于MapReduce方法,并且数据量由包括在分区中的键-值对的数量或分区大小中的至少一个来表示。
[0028] 在某些实施例中,方法还包括在评估数据量时应用加权因子。
[0029] 在某些实施例中,方法还包括设置数据量的下界,并且如果分区的数据量不大于该下界,则将该分区确定为不具有数据倾斜。
[0030] 在某些实施例中,方法还包括通过使用第二节点的存储装置来扩展用于至少一个第二节点的存储器空间。
[0031] 在另一方面,本公开涉及存储计算机可执行代码的非暂时性计算机可读介质。当在处理器上执行时,该计算机可执行代码被配置为:
[0032] 将输入数据拆分为输入数据的分区;
[0033] 检测任何分区是否具有数据倾斜;以及
[0034] 将不具有数据倾斜的分区分配给计算节点集群的第一节点,将具有数据倾斜的分区分配给集群的第二节点,以用于并行处理,其中每个第一节点具有存储装置,每个第二节点具有存储装置,并且各个第二节点的存储装置具有比各个第一节点的存储装置高的存取速度。
[0035] 根据以下结合附图以及附图标识对优选实施例的详细描述,本公开的这些以及其他方面将变得更显而易见,尽管可以在不脱离本公开新颖构思的精神和范围的情况下进行多种变化和修改

附图说明

[0036] 通过具体实施方式和附图,将更加全面地理解本公开,在附图中:
[0037] 图1示意性地描绘了根据本公开某些实施例的大数据框架中的任务调度。
[0038] 图2示意性地描绘了根据本公开某些实施例的系统基础设施。
[0039] 图3示意性地描绘了根据本公开某些实施例的基于倾斜的任务调度。
[0040] 图4示意性地描绘了根据本公开某些实施例的数据倾斜检测的原理。
[0041] 图5示意性地描绘了根据另一实施例的分区的数据量的分布。
[0042] 图6示意性地描绘了根据本公开某些实施例的数据倾斜检测器的配置。
[0043] 图7示意性地描绘了根据本公开某些实施例的计算节点。
[0044] 图8示意性地描绘了根据本公开某些实施例的用于处理大数据框架中的数据倾斜的方法。
[0045] 图9示意性地示出了在Spark SQL环境下使用根据本公开某些实施例的系统的示例。

具体实施方式

[0046] 在以下示例中更具体地描述了本公开,由于这些示例中的众多修改和变化对于本领域技术人员而言将是显而易见的,因此这些示例旨在说明。现在详细描述本公开的各种实施例。参考附图,相似的附图标记(如果有的话)贯穿附图指示相似的组件。如在本文描述中和贯穿之后的权利要求书所使用的,除非上下文另外明确指出,否则“一”、“一个”和“所述”的含义包括复数引用。此外,如在本文描述中和贯穿之后的权利要求书所使用的,除非上下文另外明确指出,否则“在...中”的含义包括“在...中”和“在...上”。此外,为了方便读者,在说明书中可以使用标题或副标题,这将不影响本公开的范围。另外,下面更具体地定义了本说明书中所使用的一些术语。
[0047] 本说明书中所使用的术语在本公开的上下文中以及在使用了每个术语的具体上下文中,大体上具有本领域的一般含义。下面或说明书中的其他地方讨论了用于描述本公开的某些术语,以向从业人员提供关于本公开描述的附加指导。为了方便起见,可以突出显示某些术语,例如使用斜体和/或引号。使用突出显示不影响术语的范围和含义;无论是否突出显示,术语的范围和含义在相同的上下文中相同。应当认识到,可以以一种以上的方式叙述同一事物。因此,可以将替代的语言和同义词用于本文中所讨论的任何一个或多个术语,也不会对本文是否阐述或讨论产生任何特殊意义。提供了某些术语的同义词。提及一个或多个同义词不排除使用其他同义词。本说明书中任何地方所使用的示例(包括本文中所讨论的任何术语的示例)仅是说明性的,并且绝不限制本公开或任何举例说明的术语的范围和含义。同样地,本公开不限于本说明书中给出的各种实施例。
[0048] 除非另外定义,否则本文中使用的所有技术和科学术语具有与本公开所属领域的普通技术人员通常理解的含义相同的含义。在发生冲突的情况下,以本文件及其定义为准。
[0049] 如本文中所使用的,“约”、“大约”或“近似”应大体上意指给定值或范围的百分之二十以内,优选地百分之十以内,更优选地百分之五以内。本文中给出的数值是近似的,意指如果没有明确说明,则可以推断出术语“约”、“大约”或“近似”。
[0050] 如本文中所使用的,“多个”意指两个或更多个。
[0051] 如本文中所使用的,术语“包含”、“包括”、“携带”、“具有”、“含有”,“涉及”等应理解为开放式的,即意指包括但不限于。
[0052] 如本文中所使用的,短语A、B和C中的至少一个应解释为意指使用非排他性逻辑“或(OR)”的逻辑(A或B或C)。应当理解,在不更改本公开的原理的情况下,方法中的一个或多个步骤可以按不同的顺序(或同时)执行。
[0053] 如本文中所使用的,术语“模”可以指代以下中的一部分或包括:专用集成电路(ASIC);电子电路;组合逻辑电路;现场可编程阵列(FPGA);执行代码的处理器(共享处理器、专用处理器或处理器组);提供所述功能的其他合适的硬件组件;或以上中的一些或所有的组合,例如片上系统。术语“模块”可以包括存储由处理器执行的代码的存储器(共享存储器、专用存储器或存储器组)。
[0054] 如本文中所使用的,术语“代码”可以包括软件固件和/或微代码,并且可以指代程序、例程、功能、类和/或对象。如上面所使用的,术语“共享”意指可以使用单个处理器(共享处理器)来执行来自多个模块的一些或所有代码。另外,来自多个模块的一些或所有代码可以由单个存储器(共享存储器)来存储。如上面所使用的,术语“组”意指可以使用一组处理器来执行来自单个模块的一些或所有代码。另外,来自单个模块的一些或所有代码可以使用一组存储器来存储。
[0055] 如本文中所使用的,术语“接口”一般指代组件之间交互点处的通信工具或手段,用于执行组件之间的数据通信。一般地,接口可以适用于硬件级和软件级两者,并且可以是单向接口或双向接口。物理硬件接口的示例可以包括电连接器、总线、端口、电缆端子和其他I/O设备或组件。与接口通信的组件可以是例如计算机系统的多个组件或外围设备
[0056] 本公开涉及计算机系统。如附图中所描绘的,计算机组件可以包括物理硬件组件和虚拟软件组件,物理硬件组件示出为实线框,虚拟软件组件示出为虚线框。本领域普通技术人员应认识到,除非另外指出,否则这些计算机组件可以以但不限于软件、固件或硬件组件或其组合的形式来实现。
[0057] 本文中所描述的装置、系统和方法可以由一个或多个处理器执行的一个或多个计算机程序来实现。计算机程序包括存储在非暂时性有形计算机可读介质上的处理器可执行指令。计算机程序还可以包括存储的数据。非暂时性有形计算机可读介质的非限制性示例是非易失性存储器、磁存储装置和光存储装置。
[0058] 在一个方面,本公开涉及大数据框架。在该框架中,将输入数据拆分为输入数据的分区,并将输入数据的分区分配给计算节点的集群,以用于并行处理。集群包括一个或多个第一节点和一个或多个第二节点,其中第二节点的存储装置具有比第一节点的存储装置高的存取速度。该框架还包括数据倾斜检测机制。该机制可以检测可能发生数据倾斜的任何分区。作为检测的结果,可以将被确定为具有数据倾斜的那些分区分配给第二节点。因此,可以以相对快的速度处理倾斜的分区,由此可以抑制由数据倾斜引起的影响。
[0059] 图1示意性地描绘了根据本公开某些实施例的大数据框架中的任务调度。如图1所示,框架100被配置为处理输入数据,包括主进程101和多个工作进程103_1、103_2、…、103_n(统称为“103”)。在某些实施例中,主进程101和工作进程103中的每个进程是集群或网格节点中的进程,并且主进程101和工作进程103使用MapReduce模型来处理或生成大数据集。在某些实施例中,主进程101和工作进程103中的每个进程可以是计算设备或在计算设备上运行的服务。在某些实施例中,基于计算资源(例如,计算设备包括的中央处理单元(CPU)和存储器),一个计算设备可以具有一个或多个工作进程103。在某些实施例中,MapReduce模型包括映射(map)阶段、重排(shuffle)阶段和化简(reduce)阶段。在映射阶段中,主进程
101将作业或文件划分为工作进程103;在重排阶段中,主进程101基于键/值对对结果进行排序;在化简阶段中,主进程101归并(merge)来自工作进程103的结果,并将具体结果存储在一个工作进程103中。
[0060] 主进程101协调框架100中的操作,例如,在工作进程103之间调度任务。具体地,可以请求主进程101执行作业并接收与该作业相关联的输入数据。例如,作业可以是机器学习,输入数据可以是历史数据。通过机器学习,可以从历史数据中学习到一些知识。在线上购物的情况下,历史数据可以是过去时段的历史销售数据,从中学习到的知识可以用于销售预测、智能推荐等。
[0061] 为了进行并行处理,主进程101将请求的作业划分为可以并行执行的多个任务(任务_1、任务_2、…、任务_n),并且还将输入数据拆分为与各个任务相关联的多个分区(分区_1、分区_2、…、分区_n)。主进程101将各个任务和与各个任务相关联的各个分区分配给各个工作进程103,使得可以在各个工作进程103处并行地执行这些任务,以加速作业的执行。
[0062] 尽管未示出,工作进程103可以将执行各个任务的结果返回给主进程101,并且主进程101可以将来自工作进程103的各个结果汇总为执行作业的结果。
[0063] 主进程101和工作进程103可以是在同步分布式计算环境(例如,)中运行的进程。分布式计算环境包括多个计算节点,主进程101和工作进程103可以在环境中的独立节点上运行。例如,每个工作进程103可以在对应的一个节点上运行,并且不同的工作进程可以在不同的节点上运行。在某些实施例中,一个节点可以包括一个以上的工作进程103。
[0064] 在上述框架100中,作业的执行时间主要取决于各个任务在各个工作进程103上的最长执行时间。这是因为除非完成所有任务,否则无法得出作业的执行结果。
[0065] 相比于其余任务,如果任务中的一个特定任务具有相对大的与其相关联的数据分区,则对应的工作进程一般将花费更多的时间来执行该任务。这种现象称为“数据倾斜”。数据倾斜显著影响作业的执行时间。在某些实施例中,主进程101可以基于是否存在数据倾斜而将各个任务适应性地调度到各个工作进程103。
[0066] 图2示意性地描绘了根据本公开的某些实施例的系统基础设施。如图2所示,基础设施200包括计算节点或节点的集群。
[0067] 每个节点是诸如计算机、服务器、工作站等的计算平台。每个节点具有其自己的计算资源(例如中央处理单元(CPU)),以进行各种计算来执行分配给该节点的任务。此外,每个节点具有其自己的存储设备,以存储例如分配的任务、分配给该节点的数据分区以及执行所分配的任务的结果。此外,每个节点具有其自己的存储器(例如只读存储器(ROM)或随机存取存储器(RAM)),以加载分配的任务并存储例如执行该任务的中间结果。一般地,存储器具有比存储设备高的存取速度。
[0068] 节点可以以有线方式或无线方式彼此互连。优选地,节点经由例如有线局域网相互连接以实现高速通信。在一些实施例中,节点之间的互连可以包括有线或无线通信链路、光纤、电缆等。在一些实施例中,互连可以包括互联网、局域网(LAN)、广域网(WAN)或蜂窝电信网络中的至少一种。
[0069] 在某些实施例中,可以至少基于各个节点的存储设备的性能来将节点分类为常规节点202和高性能节点204。例如,高性能节点204具有比常规节点202高的存取速度。在一些实施例中,常规节点202的存储设备包括常规存储设备,例如硬盘驱动器(HDD)、固态驱动器(SSD)等,高性能节点204的存储设备包括高性能存储设备,例如非易失性存储器快速(NVMe)、Optane SSD或永久性存储器。在某些实施例中,高性能节点204的存取速度(例如,以每秒兆比特表征)是常规节点202的存取速度的5倍。在某些实施例中,高性能节点204的存取速度是常规节点202的存取速度的100倍。在某些实施例中,高性能节点204的存取速度是常规节点202的存取速度的1000倍以上。
[0070] 在某些实施例中,第二节点204的存储设备在存取速度方面与第二节点204的存储器相当。这里,表述“与…相当”可以指代处于基本相同的数量级。由于具有较高的存取速度,高性能节点204可以通过虚拟存储设备来临时扩展其存储器空间。通过包括高性能存储设备,可以提高高性能节点204的计算能
[0071] 在某些实施例中,高性能节点204在所有节点中的比值相对较低,以保持基础设施200的成本尽可能低。在其他实施例中,高性能节点204的比值可以在0.1%-20%的范围内,以适应某些任务的要求。在某些实施例中,该比值大约为5%-10%。在某些实施例中,该比值为1%或更小。
[0072] 在某些实施例中,将具有相对大的数据量并因此更可能具有数据倾斜的数据分区调度到高性能节点204。因此,可以通过高性能节点204的提高的计算能力来加速数据分区的处理。
[0073] 图3示意性地描绘了根据本公开的某些实施例的基于倾斜的任务调度。在图3中,框311和框313可以是包括在节点中的硬件模块(例如,主进程在其上驻留的硬件模块),或者在节点上运行的软件组件,又或者硬件和软件的组合。
[0074] 数据倾斜检测器311接收输入数据,具体地,接收输入数据的分区,并响应于接收输入数据的分区,检测任何数据分区是否具有数据倾斜。在下文中,将详细描述检测数据倾斜的原理。数据倾斜检测器311将各个分区以及其各个检测结果传递给任务调度器313。例如,数据倾斜检测器311可以向每个分区添加标志或标签,其中标志或标签指示分区是否具有数据倾斜。
[0075] 响应于接收分区和检测结果,任务调度器313分别将由数据倾斜检测器311检测的不具有数据倾斜的那些分区分配给常规节点302,将由数据倾斜检测器311检测的具有数据倾斜的那些分区分配给高性能节点304。对于节点302和304的细节,可以参考上面结合图2的描述。
[0076] 图4示意性地描绘了根据本公开的某些实施例的数据倾斜检测的原理。如图4所示,可以根据分区各自的数据量对分区进行排序。在图4所示的示例中,分区1具有最低的数据量,分区2具有次低的数据量,…,分区n具有最高的数据量。可以基于一个或多个度量来评估数据量。在一些实施例中,可以基于各个分区的大小来评估数据量。在一些实施例中,基于MapReduce方法来处理输入数据,并且以键-值对的形式进行处理。在这种情况下,可以基于各个分区中的键-值对的数量来评估数据量。
[0077] 原则上,因为存在比值,例如10%的节点是高性能节点,所以可以将不大于该比值的一比例分区分配给高性能节点,以用于快速处理。在该示例中,可以将分区的顶部10%分配给高性能节点。
[0078] 更具体地,如图4中所示,可以确定排列在比值处的分区(这里是分区k),因此可以将所确定的分区的数据量设置为阈值。这里,表述“在所有的n个分区中排列在比值处的分区k”意指从分区k到分区n的数量与节点的总数量n的比值基本上与比值相同,或者换言之,k=[n*(1-比值)],其中“[]”表示近似运算。在一些实施例中,可以将数据量大于阈值的分区确定为具有数据倾斜。
[0079] 此外,数据倾斜取决于分区之间的数据量的差异,而不取决于数据量本身。大数据量意味着数据倾斜的可能性相对高,但并非必然。图5示意性地描绘了根据另一实施例的各个分区的数据量的分布。如图5所示,各个分区之间的数据量不存在显著差异。这意味着不存在数据倾斜或不存在显著的数据倾斜。在这种情况下,因为高性能一般意味着高成本(例如,高功耗等),所以不需要基于比值将一比例分区分配给高性能节点。
[0080] 为了集中在数据量的差异而不是数据量本身,在某些实施例中,系统在评估数据量时应用了加权因子。在一些实施例中,加权因子大于1,以使差异更加明显。因此,上面的阈值可以更新为阈值*加权因子,因此可以将数据量大于阈值*加权因子的分区确定为具有数据倾斜。
[0081] 此外,当所有分区的数据量相对较小时,即使各个分区之间的数据量存在显著差异,也不存在数据倾斜或不存在显著的数据倾斜。在一些实施例中,可以设置下界,并且只有其数据量大于下界(且同时满足阈值*加权因子的规则)的分区可以被确定为具有数据倾斜。
[0082] 图6示意性地描绘了根据本公开某些实施例的数据倾斜检测器的配置。如图6所示,数据倾斜检测器600包括一个或多个框621和框623。框621和框623可以是包括在节点中的硬件模块(例如,主进程在其上驻留的硬件模块),或者在节点上运行的软件组件,又或者硬件和软件的组合。
[0083] 框621被配置为依据键-值对的数量来评估数据量。框621包括键-值对检测器6211和阈值检查器6213。键-值对检测器6211检测每个分区中的键-值对的数量。阈值检查器6213检查每个分区中的键-值对的数量是否超过阈值。阈值可以如上所述地确定。在某些实施例中,阈值检查器6213将阈值设置为max(N_factor*N_percentile(percentage),lower_bound),即N_factor*N_percentile(percentage)和lower_bound中的较大者。N_factor指示用于键-值对数量的加权因子,例如在大约1-100的范围内,优选地在2-20的范围内,更优选地在5-10的范围内。N_percentile(percentage)指示排列在百分比percentage处的分区中包括的键-值对的数量。例如,N_percentile(90%)意指基于每个分区中的键-值对的数量从高到低排列分区;对于90%百分比(在90%处或最接近于90%),大约10%的分区具有比在90%百分比处的分区多的键-值对,大约90%的分区具有比在90%百分比处的分区少的键-值对。在某些实施例中,该百分比由下式确定:常规工作进程(或节点)的数量/工作进程的总数量。在某些实施例中,将该百分比确定为小于常规工作进程的数量/工作进程的总数量。lower_bound(键-值对lower_bound)指示预设的下界。在一些实施例中,该下界可以至少部分地基于由键-值对的典型大小划分的预先确定的数据大小来设置。该预先确定的数据大小指示如果在常规节点上进行处理(例如2GB-4GB),将不会使常规节点发生显著劣化。在某些实施例中,键-值对可以占用40个字节的大小,并且lower_bound可以处于1000万至2000万个键-值对的范围内,通过下式来计算:2GB-4GB/40个字节。
[0084] 以下是确定阈值的示例。设百分比为0.7。在表1所示的分布中,存在5个分区,这5个分区基于它们包括的键-值对的数量从高到低排列。排列是分区5(3000万,80%-100%)、分区4(400万,60%-80%)、分区3(300万,40%-60%)、分区2(200万,20%-40%)、分区1(100万,0%-20%)。N_percentile(0.7)将是排列在0.7(在60%-80%的范围内)处的分区4中包括的键-值对的数量,即400万。如果N_factor=5且lower_bound=1000万,则阈值将为max(5*400万,1000万)=2000万。因此,分区5将被检测为超过阈值(并因此具有数据倾斜)。
[0085] 表1
[0086]
[0087] 框623被配置为依据分区大小来评估数据量。框623包括大小检测器6231和阈值检查器6233。大小检测器6231检测每个分区的大小。阈值检查器6233检查每个分区的大小是否超过阈值。阈值可以如上所述地确定。在某些实施例中,阈值检查器6233将阈值设置为max(S_factor*S_percentile(percentage),lower_bound),即S_factor*S_percentile(percentage)和lower_bound中的较大者。S_factor指示用于分区大小的加权因子,例如在大约1-100的范围内,优选地在2-20的范围内,更优选地在5-10的范围内。S_percentile(percentage)指示排列在百分比percentage处的分区的大小。例如,S_percentile(90%)意指基于每个分区的数据大小从高到低排列分区;对于90%百分比(在90%处或最接近于90%),大约10%的分区具有比在90%百分比处的分区大的数据大小,大约90%的分区具有比在90%百分比处的分区小的数据大小。在某些实施例中,该百分比由下式确定:常规工作进程(或节点)的数量/工作进程的总数量。在某些实施例中,将该百分比确定为小于常规工作进程的数量/工作进程的总数量。lower_bound(数据大小lower_bound)指示预设的下界。
在一些实施例中,该下界可以至少部分地基于预先确定的数据大小来设置。该预先确定的数据大小指示如果在常规节点上进行处理(例如2GB-4GB),将不会使常规节点发生显著劣化。因此,lower_bound可以在例如2GB-4GB的范围内。
[0088] 以下是确定阈值的示例。设百分比为0.7。在表2所示的分布中,存在5个分区,这5个分区基于数据大小从高到低排列。排列是分区5(50GB,80%-100%)、分区4(1.8GB,60%-80%)、分区3(1.7GB,40%-60%)、分区2(1.5GB,20%-40%)、分区1(1GB,0%-20%)。S_percentile(0.7)将是排列在0.7(在60%-80%的范围内)处的分区4的大小,即1.8GB。如果S_factor=5且lower_bound=4GB,那么阈值将为max(5*1.8GB,4GB)=9GB。因此,分区5将被检测为超过阈值(并因此具有数据倾斜)。
[0089] 表2
[0090] 分区# 1 2 3 4 5大小 1GB 1.5GB 1.7GB 1.8GB 50GB
[0091] 数据倾斜检测器600还包括倾斜判定器625。如果阈值检查器6213和阈值检查器6233都指示没有超过阈值,则倾斜判定器625指示“无数据倾斜”,如果阈值检查器6213和阈值检查器6233中的至少一个指示超过阈值,则倾斜判定器625指示“数据倾斜”。当倾斜判定器625判定存在具有数据倾斜的分区时,其接下来将这些分区分配给高性能节点204。
[0092] 图7示意性地描绘了根据本公开的某些实施例的计算节点。如图7所示,计算节点700包括中央处理单元(CPU)701。CPU 701被配置为根据存储在只读存储器(ROM)702中或从存储装置708加载到随机存取存储器(RAM)703中的程序执行各种动作和进程。RAM 703具有计算节点700的操作所需的各种程序和数据。CPU 701、ROM 702和RAM 703经由总线704彼此互连。此外,I/O接口705连接到总线704。
[0093] 在某些实施例中,计算节点700还包括以下中的至少一个或多个:诸如键盘鼠标之类的输入设备706、诸如液晶显示器(LCD)、发光二极管(LED)、有机发光二极管(OLED)或扬声器之类的输出设备707、诸如硬盘驱动器(HDD)之类的存储装置708以及连接到I/O接口的诸如(LAN)卡或调制解调器之类的通信接口709。通信接口709通过诸如互连网之类的网络执行通信。在某些实施例中,驱动器710也连接到I/O接口705。诸如HDD、光盘或半导体存储器之类的可移除的介质711可以安装在驱动器710上,使得存储在其上的程序可以安装到存储装置708中。
[0094] 在某些实施例中,本文中所描述的处理流程可以以软件来实现。这种软件可以经由通信接口709从网络下载或从可移除介质711读取,然后安装在计算节点中。当运行该软件时,计算设备700将执行处理流程。
[0095] 图8示意性地示出了根据本公开的某些实施例的用于处理大数据框架中的数据倾斜的方法。在某些实施例中,该方法由图7中所示的计算节点700来实现。应当特别注意,除非在本公开中另外说明,否则方法的步骤可以以不同的顺序布置,因此不限于图8所示的顺序。
[0096] 如图8所示,在过程802处,将作业提供给集群基础设施。集群包括主进程101节点和多个工作进程103节点,工作进程103节点包括常规节点202和高性能节点204。作业是大数据业务,可以通过工作进程103分发大数据。
[0097] 在过程804处,主进程101节点的分区模块将作业分割为任务或分区,并将分区或分区信息分别发送给键-值对检测器6211和大小检测器6231。
[0098] 在过程806处,在接收到分区后,键-值对检测器6211检测每个分区中的键-值对的数量,并将键-值对的数量发送给阈值检查器6213。
[0099] 在过程808处,在接收到键-值对的数量后,阈值检查器6213计算键-值对阈值,将键-值对的数量与键-值对阈值进行比较,并将比较结果发送给倾斜判定器625。在某些实施例中,阈值检查器6213使用公式max(N_factor*N_percentile(percentage),lower_bound)来计算键-值对阈值,即N_factor*N_percentile(percentage)和lower_bound中的最大值。
[0100] 在过程810处,在接收到分区后,大小检测器6231检测分区的数据大小,并将数据大小发送给阈值检查器6233。
[0101] 在过程812处,在接收到数据大小之后,阈值检查器6233计算数据大小阈值,将分区的数据大小与数据大小阈值进行比较,并将比较结果发送给倾斜判定器625。在某些实施例中,阈值检查器6233使用公式max(S_factor*S_percentile(percentage),lower_bound size)来计算数据大小阈值,即S_factor*S_percentile(percentage)和lower_bound size中的最大值。
[0102] 在过程814处,在从阈值检查器6213和阈值检查器6233接收到比较结果后,倾斜判定器625针对每个分区确定键-值对的数量是否等于或大于数量阈值,或者确定分区的大小是否等于或大于大小阈值。如果分区的键-值对数量或大小中的任何一个等于或大于数量阈值或大小阈值,则倾斜判定器625确定该分区可能具有数据倾斜。如果键-值对数量和分区大小分别小于数量阈值或大小阈值,则倾斜判定器625确定分区不太可能具有数据倾斜。
[0103] 在过程816处,主进程101节点将可能具有数据倾斜的分区分配给高性能节点204,并将不太可能具有数据倾斜的分区分配给常规节点202。
[0104] 在某些实施例中,方法800还可以包括从工作进程103接收结果,并将结果组合以得到作业的最终结果。
[0105] 图9示意性地示出了使用根据本公开的某些实施例的系统的示例。如图9所示,该系统在Spark SQL环境下使用。
[0106] 在又一方面,本公开涉及存储计算机可执行代码的非暂时性计算机可读介质。当在该系统的一个或多个处理器上执行该代码时,可以执行如上所述的方法。在某些实施例中,非暂时性计算机可读介质可以包括但不限于任何物理或虚拟存储介质。
[0107] 总之,本公开的某些实施例尤其具有以下优点:(1)系统可以在运行时解决大数据的数据倾斜问题,事先防止可能的数据倾斜;(2)系统可以加快大数据应用,而无需升级数据中心中的所有节点;(3)与存储器相比,系统可以使用更便宜的高性能存储设备来加速大数据应用;(4)系统可以支持大多数大数据框架,例如Apache Apache 和Apache 等;(5)系统可以解决预期外的改变的问题,例如大数据处理中的数据大小
的改变;(6)系统无需删除任何数据即可解决数据倾斜问题;(7)系统无需了解应用逻辑和数据倾斜的原因即可解决数据倾斜问题。
[0108] 前面已呈现了对本公开的示例性实施例的描述,这仅出于说明和描述的目的而不旨在穷举或限制本公开所公开的确切形式。可以鉴于上述教导进行许多修改和变化。
[0109] 选择和描述实施例是为了解释本公开的原理及其实际应用,从而使本领域的其他技术人员能够利用本公开和各种实施例,以及对其进行各种修改以适合于预期的特定用途。在不脱离本公开的精神和范围的情况下,备选实施例对于本公开所属领域的技术人员将变得显而易见。因此,本公开的范围由所附权利要求而不是前面的描述和其中描述的示例性实施来限定。
[0110] 参考文献:
[0111] 1、Gufler,B.,Augsten,N.,Reiser,A.and Kemper,A.,Handling Data Skew in MapReduce,Closer’11,2011,pp.574-583.
[0112] 2、Xu,Y and Kostamaa,P,A new algorithm for small-large table outer joins in parallel DBMS,IEEE 26th Int.Conf.Data Engineering,2010,pp.1018–1024.[0113] 3.Cheng,L.,and Kotoulas,S,Efficient skew handling for outer joins in a cloud computing environment,IEEE Transactions on Cloud Computing,2015.
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈