技术领域
[0001] 本
发明涉及大
数据处理技术领域,具体涉及一种Gaia系统中的多作业合并与优化系统及方法。
背景技术
[0002] 近年来,随着信息化技术的迅猛发展,需要收集、存储、处理和分析的数据量越来越大。衍生出了各种各样的分布式
大数据处理系统,其中有以批处理为主的Hadoop、以流计算为主的Storm和批流混合计算模型的Spark、Flink等,其中Spark和Flink作为主流的大
数据处理系统,在系统优化方面做出了很大的贡献。为了减少作业的执行时间和作业对集群内存、带宽等其他资源的使用,Spark和Flink在批处理作业方面,采用了相似的DAG优化方法。其使用的DAG优化方法主要是从作业的内部根据算子的不同类型,将算子拆分分成不同的类别,然后对作业执行
流程图中相邻的算子做出不同的处理,根据算子的类别和依赖关系,将相同类别的算子链接到一起执行,这样做减少了数据在算子之间和集群中不同
节点之间的传输。采用DAG优化从作业的内部降低了作业对内存和带宽的使用,而在作业的总的资源分配方面,则是根据用户自己设定的作业并行度等其他条件对作业进行资源的分配。
[0003] 常规的大数据处理系统(例如:Spark和Flink),在对批处理作业的资源分配过程中,很少考虑到作业与其被分配到的资源量是否相符,都是通过用户
指定的分配方式,为作业分配资源,这样通常需要用户自己计算每个作业的资源需求。但是很多情况下,用户对集群资源和作业要处理的业务量并不能准确把握,这样用户就会为每个作业尽量分配多的资源,于是,就出现了许多资源浪费的现象。在作业层的优化方面,这些系统都是从作业内部算子的类别和算子之间的关系进行优化,而没有考虑作业与其分配到的资源是否相符,Gaia系统中考虑到了这一情况,并做出了相应的优化。
[0004] Gaia系统作为最新的大数据处理引擎,是一种基于内存的开源计算
框架,为了细化内存资源的管理采用了内存隔离的方式,Gaia按Slot来划分每个节点的内存资源,并以Slot为单位进行内存资源的分配,这样方便了内存资源的分配与回收。在Gaia系统中集群中Slot的集群并行度是一一映射的,集群中Slot的最大值就是集群能执行作业的最大的并行度。
[0005] 如何利用通过多作业的合并与优化处理解决Gaia系统中用户作业和用户指定的资源大小方面的不匹配问题流程是目前亟待解决的问题。
发明内容
[0006] 有鉴于此,本发明提供了一种Gaia系统中的多作业合并与优化系统及方法,能够利用通过作业的合并与优化处理,解决了Gaia系统中用户作业和用户指定的资源大小方面的不匹配问题。
[0007] 为达到上述目的,本发明的技术方案为:一种Gaia系统中的多作业合并与优化系统,包括代理层、作业优化层和集群交互层。
[0008] 集群由至少一个节点组成,节点上部署Hadoop系统和gaia系统,分别组成Hadoop集群和Gaia集群;作业要处理的数据存放在Hadoop集群上;
[0009] 代理层通过集群交互层与集群进行数据交互。
[0010] 代理层,包括作业信息采集模
块、作业分类模块、作业合并模块以及作业优化模块和作业缓冲池。
[0011] 作业信息采集模块,用于收集用户提交的作业,解析获得作业信息;
[0012] 作业分类模块,用于根据作业信息将作业分类为可合并型作业和不可合并型作业并送入作业缓冲池进行缓冲存储。
[0013] 作业合并模块,用于提取作业缓冲池中的可合并型作业进行合并,得到合并后的作业送入作业优化模块。
[0014] 作业优化模块,用于对合并后的作业进行优化,以协调合并后的作业的任务量和合并前被合并的带合并型作业所分配的总的内存资源之间的平衡,得到优化后的作业送入作业缓冲池进行缓冲存储。
[0015] 集群通过集群交互层从作业缓冲池中读取优化后的作业并执行。
[0016] 进一步地,作业信息采集模块,用于收集用户提交的作业,解析获得作业信息,具体为:
[0017] 作业信息采集模块,用于收集用户提交的作业,包括作业jar文件、作业来源信息、作业提交时间和作业的执行参数。
[0018] 作业信息采集模块用于解析作业jar文件,获得作业执行流程图、作业处理文件的路径信息、作业复杂度以及作业并行度;并从作业执行流程图中提取出作业信息,包括作业所处理文件的大小及存放地址、作业分配的内存资源大小、作业执行流程图的深度、作业执行流程图中每个算子的类型、每个算子的算子并行度大小、不同类型的算子个数以及作业类型。
[0019] 其中算子的类型包括本地算子和全局算子,本地算子中又包含source类型算子。
[0020] 作业类型包括批处理作业和流处理作业;其中批处理作业中又包含
迭代类型的批处理作业和非迭代类型的批处理作业;流处理作业中又包含迭代类型的流处理作业和非迭代类型的流处理作业。
[0021] 进一步地,作业分类模块,用于根据作业信息将作业分类为可合并型作业和不可合并型作业并送入作业缓冲池进行缓冲存储,具体为:
[0022] 作业分类模块,用于根据作业信息采集模块采集到的作业信息,依据作业所处理文件大小和作业分配的内存资源大小的比值A和作业类型,将作业分成不同的类别并放入不同的作业缓冲池中;具体为:若作业类型为非迭代类型的批处理作业且比值A小于0.5,则分类为可合并型作业,否则分类为不可合并型作业;将分类后的作业依照对应的类型送入作业缓冲池中。
[0023] 作业缓冲池包括可合并型作业缓冲池和不可合并型作业缓冲池,分别用于存储可合并型作业和不可合并型作业。
[0024] 作业分类模块遍历可合并型作业缓冲池,获取所有可合并型作业的作业流程图的复杂度,取中位数作为复杂度分类
阈值对可合并型作业进行再次分类,将作业流程图的复杂度高于复杂度分类阈值的可合并型作业分类为高复杂度作业,其他可合并型作业分类为低复杂度作业,可合并型作业缓冲池又分为复杂度作业缓冲池和低复杂度作业缓冲池,分别用于存储高复杂度作业和低复杂度作业。
[0025] 作业缓冲池中还包括作业预提交缓冲池。
[0026] 进一步地,作业合并模块,用于提取作业缓冲池中的可合并型作业进行合并,得到合并后的作业送入作业优化模块,具体为:
[0027] 作业合并模块从作业缓冲池中检索出可合并型作业,根据设定的合并策略进行合并,合并后的作业送入作业优化模块。
[0028] 设定的合并策略包括:
[0029] 第一合并策略:将作业并行度相同的作业进行合并。
[0030] 第二合并策略:按照复杂度从高到低顺次从高复杂度缓冲池选取高复杂度作业,对于当前选取的高复杂度作业,从低复杂度缓冲池中选取与当前选取的高复杂度作业并行度差别最小的低复杂度作业,将当前选取的高复杂度作业和低复杂度作业进行合并;继续选取下一高复杂度作业重复执行第二合并策略直至高复杂度作业缓冲池和低复杂度作业缓冲池至少一个为空为止。
[0031] 进一步地,作业优化模块,用于对合并后的作业进行优化,以协调合并后的作业的任务量和合并前被合并的带合并型作业所分配的总的内存资源之间的平衡,得到优化后的作业送入作业缓冲池进行缓冲存储,具体为:
[0032] 作业优化模块对每个合并后的作业进行优化,优化后的作业送入作业预提交缓冲池中。
[0033] 作业优化模块对每个合并后的作业进行优化,具体为:
[0034] 若合并后的作业是根据第一合并策略进行合并的,则不更改其作业并行度。
[0035] 若合并后的作业是依据第二合并策略进行合并的,遍历其作业执行流程图,计算每个Source算子读取文件的大小,并计算所有Source算子之间读取文件大小的比例,依照比例以及作业并行度为每个Source算子分配并行度,和source算子直接相连以及递归相连的本地算子的算子并行度均设置为该相连的source节点的算子并行度;全局算子的算子并行度设置为与其直接相连的上游算子中并行度最大的算子并行度。
[0036] 集群通过集群交互层从作业预提交缓冲池中读取优化后的作业并执行。
[0037] 本发明
实施例还提供了一种Gaia系统中的多作业合并与优化系统的方法,包括如下步骤:
[0038] 步骤1:获取用户提交的作业,解析作业jar文件获得作业执行流程图、作业处理文件的路径信息、作业复杂度以及作业并行度;并从作业执行流程图中提取出作业信息,包括作业所处理文件的大小及存放地址、作业分配的内存资源大小、作业执行流程图的深度、作业执行流程图中每个算子的类型、每个算子的算子并行度大小、不同类型的算子个数以及作业类型。
[0039] 步骤2:根据作业信息将作业分类为可合并型作业和不可合并型作业并送入作业缓冲池进行缓冲存储;具体包括如下步骤:
[0040] 步骤2-1:依据作业所处理文件大小和作业分配的内存资源大小的比值A和作业类型,将作业分成不同的类别并放入不同的作业缓冲池中;具体为:若作业类型为非迭代类型的批处理作业且比值A小于0.5,则分类为可合并型作业,否则分类为不可合并型作业;将分类后的作业依照对应的类型送入作业缓冲池中。
[0041] 作业缓冲池包括可合并型作业缓冲池和不可合并型作业缓冲池,分别用于存储可合并型作业和不可合并型作业。
[0042] 步骤2-2:作业分类模块遍历可合并型作业缓冲池,获取所有可合并型作业的作业流程图的复杂度,取中位数作为复杂度分类阈值对可合并型作业进行再次分类,将作业流程图的复杂度高于复杂度分类阈值的可合并型作业分类为高复杂度作业,其他可合并型作业分类为低复杂度作业,可合并型作业缓冲池又分为复杂度作业缓冲池和低复杂度作业缓冲池,分别用于存储高复杂度作业和低复杂度作业。
[0043] 作业缓冲池中还包括作业预提交缓冲池。
[0044] 步骤3:作业合并模块从作业缓冲池中检索出可合并型作业,根据设定的合并策略进行合并。
[0045] 步骤3-1:将作业并行度相同的作业进行合并;具体为:
[0046] 先从高复杂度作业缓冲池中选择一个高复杂度作业B,然后遍历低复杂度作业缓冲池,从中查找出与B作业并行度相同的低复杂度作业C,调用合并
算法从B和C中读取作业执行流程图,合并B和C的作业执行流程图为一个作业执行流程图,得到B和C合并后的作业。
[0047] 重复步骤3-1直到高复杂度作业缓冲池和低复杂度作业缓冲池中不存在并行度相同的作业为止。
[0048] 步骤3-2:按照复杂度从高到低顺次从高复杂度缓冲池选取高复杂度作业,对于当前选取的高复杂度作业,从低复杂度缓冲池中选取与当前选取的高复杂度作业并行度差别最小的低复杂度作业,将当前选取的高复杂度作业和低复杂度作业进行合并;继续选取下一高复杂度作业重复执行第二合并策略直至高复杂度作业缓冲池和低复杂度作业缓冲池至少一个为空为止。
[0049] 步骤4:对每个合并后的作业进行优化,优化后的作业送入作业预提交缓冲池中,优化过程具体为:
[0050] 若合并后的作业是根据第一合并策略进行合并的,则不更改其作业并行度。
[0051] 若合并后的作业是依据第二合并策略进行合并的,遍历其作业执行流程图,计算每个Source算子读取文件的大小,并计算所有Source算子之间读取文件大小的比例,依照比例以及作业并行度为每个Source算子分配并行度,和source算子直接相连以及递归相连的本地算子的算子并行度均设置为该相连的source节点的算子并行度;全局算子的算子并行度设置为与其直接相连的上游算子中并行度最大的算子并行度。
[0052] 集群通过集群交互层从作业预提交缓冲池中读取优化后的作业并执行。
[0053] 有益效果:
[0054] 本发明提供的Gaia系统中的多作业合并与优化系统及方法,在批处理方面,为了解决用户作业和用户指定的资源大小方面的不匹配问题,Gaia系统提出和采用了作业合并的方法,该方法主要是通过分析用户提交的作业,通过作业分类模块对作业进行分类,选出可合并型作业,可将大量浪费内存的作业归类为可合并型作业,之后采用作业合并模块,通过启发式的作业合并方法对这些作业进行合并,并对合并后的作业采用作业优化模块进行优化,优化后的作业共同使用合并的作业中拥有内存资源数最大的那个作业的内存资源,而释放其他作业被分配的Slot资源。以此来降低过多Slot的分配,进而提高了集群内存资源的利用率和集群的吞吐量。
附图说明
[0055] 图1为本发明提供的一种Gaia系统中的多作业合并与优化系统组成
框图;
[0056] 图2为本发明实施例中获取的作业执行流程图;
[0057] 图3为本发明实施提供的信息采集模块与集群交互模块交互过程图;
[0058] 图4为本发明实施提供的的初次分类过程图;
[0059] 图5为本发明实施提供的二次分类过程图;
[0060] 图6为本发明实施提供的并行度相同作业合并流程图;
[0061] 图7为本发明实施提供的并行度不同的作业合并流程图。
具体实施方式
[0062] 下面结合附图并举实施例,对本发明进行详细描述。
[0063] 本发明提供了一种Gaia系统中的多作业合并与优化系统,其结构框架如图1所示,包括代理层、作业优化层和集群交互层。
[0064] 集群由至少一个节点组成,节点上部署Hadoop系统和gaia系统,分别组成Hadoop集群和Gaia集群;作业要处理的数据存放在Hadoop集群上;
[0065] 代理层通过集群交互层与集群进行数据交互。
[0066] 代理层,包括作业信息采集模块、作业分类模块、作业合并模块以及作业优化模块和作业缓冲池。
[0067] 作业信息采集模块,用于收集用户提交的作业,解析获得作业信息;
[0068] 作业分类模块,用于根据作业信息将作业分类为可合并型作业和不可合并型作业并送入作业缓冲池进行缓冲存储。
[0069] 作业合并模块,用于提取作业缓冲池中的可合并型作业进行合并,得到合并后的作业送入作业优化模块。
[0070] 作业优化模块,用于对合并后的作业进行优化,以协调合并后的作业的任务量和合并前被合并的带合并型作业所分配的总的内存资源之间的平衡,得到优化后的作业送入作业缓冲池进行缓冲存储。
[0071] 集群通过集群交互层从作业缓冲池中读取优化后的作业并执行。
[0072] 本发明实施例中,作业信息采集模块,用于收集用户提交的作业,解析获得作业信息,具体为:
[0073] 作业信息采集模块,用于收集用户提交的作业,包括作业jar文件、作业来源信息、作业提交时间和作业的执行参数。
[0074] 作业信息采集模块用于解析作业jar文件,获得作业执行流程图、作业处理文件的路径信息、作业复杂度以及作业并行度;并从作业执行流程图中提取出作业信息,包括作业所处理文件的大小及存放地址、作业分配的内存资源大小、作业执行流程图的深度、作业执行流程图中每个算子的类型、每个算子的算子并行度大小、不同类型的算子个数以及作业类型。
[0075] 其中算子的类型包括本地算子和全局算子,本地算子中又包含source类型算子。
[0076] 作业类型包括批处理作业和流处理作业;其中批处理作业中又包含迭代类型的批处理作业和非迭代类型的批处理作业;流处理作业中又包含迭代类型的流处理作业和非迭代类型的流处理作业。
[0077] 本发明实施例中,作业分类模块,用于根据作业信息将作业分类为可合并型作业和不可合并型作业并送入作业缓冲池进行缓冲存储,具体为:
[0078] 作业分类模块,用于根据作业信息采集模块采集到的作业信息,依据作业所处理文件大小和作业分配的内存资源大小的比值A和作业类型,将作业分成不同的类别并放入不同的作业缓冲池中;具体为:若作业类型为非迭代类型的批处理作业且比值A小于0.5,则分类为可合并型作业,否则分类为不可合并型作业;将分类后的作业依照对应的类型送入作业缓冲池中。
[0079] 作业缓冲池包括可合并型作业缓冲池和不可合并型作业缓冲池,分别用于存储可合并型作业和不可合并型作业。
[0080] 作业分类模块遍历可合并型作业缓冲池,获取所有可合并型作业的作业流程图的复杂度,取中位数作为复杂度分类阈值对可合并型作业进行再次分类,将作业流程图的复杂度高于复杂度分类阈值的可合并型作业分类为高复杂度作业,其他可合并型作业分类为低复杂度作业,可合并型作业缓冲池又分为复杂度作业缓冲池和低复杂度作业缓冲池,分别用于存储高复杂度作业和低复杂度作业。
[0081] 作业缓冲池中还包括作业预提交缓冲池。
[0082] 本发明实施例中,作业合并模块,用于提取作业缓冲池中的可合并型作业进行合并,得到合并后的作业送入作业优化模块,具体为:
[0083] 作业合并模块从作业缓冲池中检索出可合并型作业,根据设定的合并策略进行合并,合并后的作业送入作业优化模块。
[0084] 设定的合并策略包括:
[0085] 第一合并策略:将作业并行度相同的作业进行合并。
[0086] 第二合并策略:按照复杂度从高到低顺次从高复杂度缓冲池选取高复杂度作业,对于当前选取的高复杂度作业,从低复杂度缓冲池中选取与当前选取的高复杂度作业并行度差别最小的低复杂度作业,将当前选取的高复杂度作业和低复杂度作业进行合并;继续选取下一高复杂度作业重复执行第二合并策略直至高复杂度作业缓冲池和低复杂度作业缓冲池至少一个为空为止。
[0087] 本发明实施例中,作业优化模块,用于对合并后的作业进行优化,以协调合并后的作业的任务量和合并前被合并的带合并型作业所分配的总的内存资源之间的平衡,得到优化后的作业送入作业缓冲池进行缓冲存储,具体为:
[0088] 作业优化模块对每个合并后的作业进行优化,优化后的作业送入作业预提交缓冲池中。
[0089] 作业优化模块对每个合并后的作业进行优化,具体为:
[0090] 若合并后的作业是根据第一合并策略进行合并的,则不更改其作业并行度;
[0091] 若合并后的作业是依据第二合并策略进行合并的,遍历其作业执行流程图,计算每个Source算子读取文件的大小,并计算所有Source算子之间读取文件大小的比例,依照比例以及作业并行度为每个Source算子分配并行度,和source算子直接相连以及递归相连的本地算子的算子并行度均设置为该相连的source节点的算子并行度;全局算子的算子并行度设置为与其直接相连的上游算子中并行度最大的算子并行度。
[0092] 集群通过集群交互层从作业预提交缓冲池中读取优化后的作业并执行。
[0093] 以上实施例提供的一种Gaia系统中的多作业合并与优化系统,提出的在作业层合并作业的方案,分析了多个作业与其所分配的资源之间的关系,通过作业合并的方法使得某些作业共同使用同一个作业的资源,释放另一个作业的资源,从根源上减少了Gaia集群中Slot的分配,常规大数据处理系统中作业层的优化方法是从作业中的算子层面进行优化的,对于资源分配采取的是用户指定的方式,是固定的资源分配方式,并没有合理的调控集群资源在作业间的分配。
[0094] 本发明实施例还提供了一种应用上述Gaia系统中的多作业合并与优化系统进行多作业合并与优化的方法,包括以下详细步骤:
[0095] 步骤1:采集作业信息:采集作业信息用于解析代理层从用户jar文件中提取的作业执行流程计划,作业执行流程计划主要包含作业执行流程图和用户设置的作业执行总并行度。
[0096] 步骤1-1:解析作业执行流程图:从作业执行流程计划中获取作业执行流程图,遍历作业执行流程图,得到算子的并行度、不同种类算子出现的次数和作业执行流程图的最大深度,在遍历过程中从Source类型算子中获取作业处理的文件的地址集合。
[0097] 从作业执行流程计划中获取作业执行流程图,作业执行流程图是一个无环路的
有向图,如图2所示,图中的每个节点是Gaia提供的一种算子类型,该节点中存储着算子的执行逻辑、算子的并行度,算子的前驱节点和算子的后继节点,相同类型的算子可以在图中多次出现。利用图的深度遍历算法,对作业执行流程图进行深度遍历,在遍历过程中获取并统计每种算子的最大并行度、每种算子出现的次数,并统计作业执行流程图的最大深度,如表1所示(表1是对图2的一个统计结果展示),作业执行流程图的最大深度指的是作业流程图中所有Source节点到Sink节点的路径中最长路径的长度。另外,因为作业处理的文件路径信息以URL的形式保存在Source类型的算子中,所以在对图的遍历过程中,需要从Source算子中收集作业要处理的所有文件的路径信息。
[0098] 表1
[0099]算子类型 算子出现次数 算子并行度
Source 3 3
map 2 3
flatmap 1 3
reduce 3 3
filter 1 3
join 2 3
sink 1 3
图的深度 图的复杂度 图中算子个数
6 5 13
[0100] 步骤1-2:计算作业复杂度和作业的并行度:在作业优化器中,作业的复杂度用全局算子在所有算子中出现的次数来表示,作业实际执行时的并行度,以作业中出现的最大并行度(可以从流程图中每个算子进行相关并行度的提取)为执行时的并行度。
[0101] 全局算子是指在作业执行过程中需要通过网络传输获取其他节点的数据并计算的算子,例如:join算子、reduce算子等。作业的复杂度也是作业中全局算子的个数,需要从步骤1-1中进行统计,然后根据算子最大并行度和作业最大并行度计算作业实际的并行度大小。
[0102] 本地算子只在本地节点处理数据,不需要获取其他节点数据进行处理的算子。
[0103] 步骤1-3:获取作业要处理的文件大小和作业分配的内存资源大小:在对作业执行流程图进行解析的过程中,已经从中获取了作业要处理文件的存放地址集合,在这里,会对文件地址信息进行检查对文件路径进行识别,判断该作业要处理的所有文件是否存在于所提供的HDFS集群中,如果有文件不存在于HDFS集群中,则把该作业类型设置为不参与合并的作业类型,如果所有文件都处于HDFS集群中,如果文件存放在HDFS集群中,如图3所示,则通过集群交互模块与HDFS集群进行交互,获取该作业要处理的文件信息,从中获取文件大小;获取作业分配的内存资源的大小需要读取用户配置文件,Gaia系统在用户配置文件中提供了槽(用于执行算子)Slot大小值的配置,作业优化层提供了读取配置文件的功能,在这里通过读取单个Slot的大小并乘以作业的并行度就可以得到作业分配的内存资源的总的大小。
[0104] 步骤2:作业分类:根据作业的任务量、所分配的内存大小、作业的类别和作业的复杂度,将作业分成不同的作业类型,并放入不同的作业缓冲池中。
[0105] 步骤2-1:根据作业任务量大小分类:通过对比作业要处理的文件大小和作业被分配的内存资源的大小将作业分为两种类型,直接执行型作业,待合并型作业。
[0106] 判断作业的类型,如图4所示,如果作业所处理的文件大小与其所预分配的内存资源大小的比值小于某个阈值,将该作业放入待合并型作业队列中,否则将该作业放入非合并型作业队列中,这里设置的阈值大小为0.5。设置0.5为过滤条件是考虑到任意两个可合并型作业合并后的文件大小总量,总是会小于合并之前的两个作业中分配的内存资源最大的那个作业所分配的内存资源的大小。
[0107] 步骤2-2:根据作业流程图的复杂度对待合并型作业进行分类:对比作业复杂度,把作业分为高复杂度和低复杂度作业,并将它们分别放入高复杂度作业缓冲池和低复杂度作业缓冲池中。
[0108] 遍历待合并作业缓冲池,从中获取所有待合并作业复杂度的中位数,如图5所示,然后将作业分为两种类型,如果作业的复杂度高于该中位数则把作业放入高复杂度作业缓冲池中,如果作业的复杂度低于复杂度中位数,则把作业放入低复杂度作业缓冲池中。
[0109] 步骤3:作业的合并:分析高复杂度和低复杂度作业缓冲池中的作业,判断作业是否满足不同的合并策略,按照不同的作业合并策略合并满足策略的作业;
[0110] 步骤3-1:合并并行度相同的作业:从高复杂度和低复杂度作业缓冲池中查询每个作业的并行度,合并并行度相同的两个作业,使用作业优化模块对合并后的作业进行优化,然后将合并后的作业放入作业预执行缓冲池中。
[0111] 在合并并行度相同的作业的过程中,先从复杂度高的作业缓冲池中选择一个作业,如图6所示,然后遍历复杂度比较低的作业缓冲池,从中查找出与该作业并行度相同的作业,调用合并算法从这两个作业中读取作业执行流程图,合并这两个作业的作业执行流程图为一个作业执行流程图,之后把合并后的作业执行图交给作业优化模块,重复以上步骤3-1直到不存在并行度相同的作业为止。
[0112] 步骤3-2:合并低复杂度的作业和高复杂度的作业:从高复杂度缓冲池选出复杂度最高的作业,然后从低复杂度缓冲池中选择与其并行度最接近的复杂度低的作业,设置作业执行流程图中每个算子的并行度(遍历作业执行流程图,为每个算子设置其原始的算子并行度),合并以上的两个作业,将合并后的作业放入作业预执行缓冲池中。
[0113] 合并低复杂度和高复杂度的作业,在合并并行度相同的作业步骤之后,如图7所示,先从高复杂度作业缓冲池中选择一个复杂度最高的作业,然后,从复杂度低的作业缓冲中选择一个并行度与其大小最接近的作业,完成这两个作业的作业执行流程图的合并,并把合并后的作业执行图交给作业优化模块,重复以上步骤3-2直到其中一个作业缓冲池为空为止。
[0114] 步骤4:作业的优化:对合并后的作业进行优化,作业的优化主要是对合并后作业的资源分配进行调优,作业优化模块用于协调合并后作业的任务量和合并前被合并作业所分配的总的内存资源之间的一个平衡,以及两个作业在所配置的作业内部资源中所占的比重,主要分为
修改作业的并行度和修改作业中算子的并行度两个部分。
[0115] 步骤4-1:修改作业的并行度:根据合并的策略对合并后作业的并行度进行重新设置,主要应用于并行度不同的作业的合并。
[0116] 对采用并行度相同策略合并的作业,不更改其作业的并行度,对采用并行度不同的作业合并策略合并的作业,设置其每个算子的并行度大小为其作业原本的并行度大小。
[0117] 步骤4-2:设置Source算子的并行度:根据作业中Source算子读取文件大小的比例,对作业中的每个Source算子设置不同的并行度。
[0118] 遍历作业的执行流程图,计算每个Source算子读取文件的大小,并计算Source算子之间读取文件大小的比例,然后根据该比例为每个算子分配并行度,例如,有三个Source算子,这三个算子读取的文件大小的比例为3:2:1,作业总的并行度为9,那么算子1,算子2,算子3,所分配的并行度分别为9、6、3。
[0119] 集群交互层主要用于提供与集群进行交互的功能,方便其他层中的模块调用这些功能与集群进行交互,这些功能包括如何获取作业的处理文件大小信息、集群的各种资源信息以及作业的提交、结果的收集等。
[0120] 以上就是一种Gaia系统中的多作业合并器及方法的具体实施方案。
[0121] 综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。