首页 / 专利库 / 人工智能 / 决策逻辑 / 一种用于倾斜数据的流式计算引擎运行方法及系统

一种用于倾斜数据的流式计算引擎运行方法及系统

阅读:581发布:2020-05-13

专利汇可以提供一种用于倾斜数据的流式计算引擎运行方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 提出一种用于倾斜数据的流式计算引擎运行方法及系统,包括:获取包含倾斜数据的用户作业,并将该用户作业转换为表示该用户作业的有向无环图,根据该有向无环图中算子的业务处理逻辑,将该有向无环图中 节点 划分为有状态算子和无状态算子;将全部状态算子 包装 为有状态任务后输入有状态数据流,将全部无状态算子包装为无状态任务后输入无状态数据流;将该无状态数据流中无状态任务复制发送至任意计算节点,得到无状态处理结果;将该有状态数据流中有状态任务转换为包含键和值的数据记录,将包含相同键的数据记录分配至相同计算节点,得到有状态处理结果,集合该无状态处理结果和有状态处理结果作为该用户作业的运行结果。,下面是一种用于倾斜数据的流式计算引擎运行方法及系统专利的具体信息内容。

1.一种用于倾斜数据的流式计算引擎运行方法,其特征在于,包括:
步骤1、获取包含倾斜数据的用户作业,并将该用户作业转换为表示该用户作业的有向无环图,根据该有向无环图中算子的业务处理逻辑,将该有向无环图中节点划分为有状态算子和无状态算子;
步骤2、将全部状态算子包装为有状态任务后输入有状态数据流,将全部无状态算子包装为无状态任务后输入无状态数据流;
步骤3、将该无状态数据流中无状态任务复制发送至任意计算节点,得到无状态处理结果;
步骤4、将该有状态数据流中有状态任务转换为包含键和值的数据记录,将包含相同键的数据记录分配至相同计算节点,得到有状态处理结果,集合该无状态处理结果和有状态处理结果作为该用户作业的运行结果。
2.如权利要求1所述的用于倾斜数据的流式计算引擎运行方法,其特征在于,该步骤4包括:将状态数据流划分为固定数量的数据片,该数据片可被计算节点并行处理,或根据调度器的决策调度至其他计算节点处理。
3.如权利要求1所述的用于倾斜数据的流式计算引擎运行方法,其特征在于,该步骤2中将状态算子包装为有状态任务和将无状态算子包装为无状态任务的过程中均包括使用OP融合规则将相关联的算子合并。
4.如权利要求1所述的用于倾斜数据的流式计算引擎运行方法,其特征在于,该步骤4包括:
步骤41、计算节点每隔固定时间间隔挑选负荷最重的有状态任务,并将其按照如下公式重新分配CPU资源:
其中,pnext代表任务新分配的CPU线程数量,pnow为任务当前线程数量,clast为当前任务上次调度时线程增加数量,Ncpu为CPU核心数量。
5.如权利要求1所述的用于倾斜数据的流式计算引擎运行方法,其特征在于,该步骤4包括:每隔固定时间间隔从负载最高的计算节点选择一个有状态任务迁移至负载最低的计算节点。
6.一种用于倾斜数据的流式计算引擎运行系统,其特征在于,包括:
1、获取包含倾斜数据的用户作业,并将该用户作业转换为表示该用户作业的有向无环图,根据该有向无环图中算子的业务处理逻辑,将该有向无环图中节点划分为有状态算子和无状态算子;
模块2、将全部状态算子包装为有状态任务后输入有状态数据流,将全部无状态算子包装为无状态任务后输入无状态数据流;
模块3、将该无状态数据流中无状态任务复制发送至任意计算节点,得到无状态处理结果;
模块4、将该有状态数据流中有状态任务转换为包含键和值的数据记录,将包含相同键的数据记录分配至相同计算节点,得到有状态处理结果,集合该无状态处理结果和有状态处理结果作为该用户作业的运行结果。
7.如权利要求6所述的用于倾斜数据的流式计算引擎运行系统,其特征在于,该模块4包括:将状态数据流划分为固定数量的数据片,该数据片可被计算节点并行处理,或根据调度器的决策调度至其他计算节点处理。
8.如权利要求6所述的用于倾斜数据的流式计算引擎运行系统,其特征在于,该模块2中将状态算子包装为有状态任务和将无状态算子包装为无状态任务的过程中均包括使用OP融合规则将相关联的算子合并。
9.如权利要求6所述的用于倾斜数据的流式计算引擎运行系统,其特征在于,该模块4包括:
模块41、计算节点每隔固定时间间隔挑选负荷最重的有状态任务,并将其按照如下公式重新分配CPU资源:
其中,pnext代表任务新分配的CPU线程数量,pnow为任务当前线程数量,clast为当前任务上次调度时线程增加数量,Ncpu为CPU核心数量。
10.如权利要求6所述的用于倾斜数据的流式计算引擎运行系统,其特征在于,该模块4包括:每隔固定时间间隔从负载最高的计算节点选择一个有状态任务迁移至负载最低的计算节点。

说明书全文

一种用于倾斜数据的流式计算引擎运行方法及系统

技术领域

[0001] 该发明创造属于分布式计算领域,具体应用在分布式流式数据计算领域。

背景技术

[0002] 流式计算引擎中,由于输入数据是在用户作业启动后源源不断到来的,导致数据源的分布具有未知性。真实场景中,数据往往是倾斜的,例如社交网络中,名人会有更多的粉丝,热点事件会有更多的评论。且倾斜数据的分布也会动态变化,如社交网络中,热点事件在随时间推移而改变,这使得数据分布具有不确定性。
[0003] 流式计算引擎中,计算算子分为状态(stateful)算子和无状态(stateless)算子两类。无状态算子计算时,只考虑当前的输入数据,不需要考虑上下文及历史计算信息,相同的输入数据总会有相同的计算输出;状态算子在计算过程中需保存计算状态,以进行更复杂的操作,可以在诸如机器学习模型训练及数据聚合等场景中使用,状态算子中,由于流计算系统的延迟敏感性,计算状态只能本地访问,这意味着相同键值的数据需要被发送至相同节点计算。倾斜数据场景下,无状态算子可处理任意数据或被调度至任意节点,不会造成系统负载不均衡。状态算子中,由于相同键值的输入数据只能被发送至相同节点,在倾斜数据场景下可能会造成系统负载不均衡。
[0004] 流式计算引擎将状态算子的输入数据进行切分,以保证相同键值的数据被分配至相同节点。传统的流式计算引擎,如Flink、Spark Streaming等,均使用静态数据切分策略,数据源的未知性及分布不确定性导致了静态切分策略难以在分布改变时作出动态调整,造成系统负载不均衡,无法达到最优计算性能。
[0005] 现有流计算引擎使用静态数据划分策略,数据划分后,每个分区都必须对应一个物理计算节点,而倾斜场景会导致数据分区大小不均匀,较大分区对应的物理节点会有较高的负载,造成了集群负载不均衡,不能充分利用计算资源。且静态分区策略无法应对动态的数据分布改变,当倾斜数据分布改变时,为了提高计算资源利用率,系统需要重新分区,而重新分区操作需要暂停整个集群的计算任务,对系统性能影响较大。因此如何解决作业在倾斜数据集下的负载不均衡问题是本技术领域需要解决的技术问题。

发明内容

[0006] 本发明的目的是提高现有系统在数据倾斜场景下的资源利用率,提出了一种支持倾斜数据的流式计算引擎。
[0007] 针对现有技术的不足,本发明提出一种用于倾斜数据的流式计算引擎运行方法,其中包括:
[0008] 步骤1、获取包含倾斜数据的用户作业,并将该用户作业转换为表示该用户作业的有向无环图,根据该有向无环图中算子的业务处理逻辑,将该有向无环图中节点划分为有状态算子和无状态算子;
[0009] 步骤2、将全部状态算子包装为有状态任务后输入有状态数据流,将全部无状态算子包装为无状态任务后输入无状态数据流;
[0010] 步骤3、将该无状态数据流中无状态任务复制发送至任意计算节点,得到无状态处理结果;
[0011] 步骤4、将该有状态数据流中有状态任务转换为包含键和值的数据记录,将包含相同键的数据记录分配至相同计算节点,得到有状态处理结果,集合该无状态处理结果和有状态处理结果作为该用户作业的运行结果。
[0012] 所述的用于倾斜数据的流式计算引擎运行方法,其中该步骤4包括:将状态数据流划分为固定数量的数据片,该数据片可被计算节点并行处理,或根据调度器的决策调度至其他计算节点处理。
[0013] 所述的用于倾斜数据的流式计算引擎运行方法,其中该步骤2中将状态算子包装为有状态任务和将无状态算子包装为无状态任务的过程中均包括使用OP融合规则将相关联的算子合并。
[0014] 所述的用于倾斜数据的流式计算引擎运行方法,其中该步骤4包括:
[0015] 步骤41、计算节点每隔固定时间间隔挑选负荷最重的有状态任务,并将其按照如下公式重新分配CPU资源:
[0016]
[0017] 其中,pnext代表任务新分配的CPU线程数量,pnow为任务当前线程数量,clast为当前任务上次调度时线程增加数量,Ncpu为CPU核心数量。
[0018] 所述的用于倾斜数据的流式计算引擎运行方法,其中该步骤4包括:每隔固定时间间隔从负载最高的计算节点选择一个有状态任务迁移至负载最低的计算节点。
[0019] 本发明还提出了一种用于倾斜数据的流式计算引擎运行系统,其中包括:
[0020] 模1、获取包含倾斜数据的用户作业,并将该用户作业转换为表示该用户作业的有向无环图,根据该有向无环图中算子的业务处理逻辑,将该有向无环图中节点划分为有状态算子和无状态算子;
[0021] 模块2、将全部状态算子包装为有状态任务后输入有状态数据流,将全部无状态算子包装为无状态任务后输入无状态数据流;
[0022] 模块3、将该无状态数据流中无状态任务复制发送至任意计算节点,得到无状态处理结果;
[0023] 模块4、将该有状态数据流中有状态任务转换为包含键和值的数据记录,将包含相同键的数据记录分配至相同计算节点,得到有状态处理结果,集合该无状态处理结果和有状态处理结果作为该用户作业的运行结果。
[0024] 所述的用于倾斜数据的流式计算引擎运行系统,其中该模块4包括:将状态数据流划分为固定数量的数据片,该数据片可被计算节点并行处理,或根据调度器的决策调度至其他计算节点处理。
[0025] 所述的用于倾斜数据的流式计算引擎运行系统,其中该模块2中将状态算子包装为有状态任务和将无状态算子包装为无状态任务的过程中均包括使用OP融合规则将相关联的算子合并。
[0026] 所述的用于倾斜数据的流式计算引擎运行系统,其中该模块4包括:
[0027] 模块41、计算节点每隔固定时间间隔挑选负荷最重的有状态任务,并将其按照如下公式重新分配CPU资源:
[0028]
[0029] 其中,pnext代表任务新分配的CPU线程数量,pnow为任务当前线程数量,clast为当前任务上次调度时线程增加数量,Ncpu为CPU核心数量。
[0030] 所述的用于倾斜数据的流式计算引擎运行系统,其中该模块4包括:每隔固定时间间隔从负载最高的计算节点选择一个有状态任务迁移至负载最低的计算节点。
[0031] 由以上方案可知,本发明的优点在于:
[0032] 该发明提出了一个支持倾斜数据的流式计算引擎。与现有技术相比,该引擎可在倾斜场景下负载均衡,并可及时响应数据分布动态改变,该系统在极端倾斜场景(zipf skew=2.0)中,8节点吞吐量达到Flink的78.5倍。附图说明
[0033] 图1为本发明系统架构图;
[0034] 图2为本发明状态数据流切分示意图;
[0035] 图3为本发明OP融合规则示意图;
[0036] 图4为本发明任务平迁移示意图;
[0037] 图5为本发明方法流程图

具体实施方式

[0038] 现有技术中作业在倾斜数据集下的负载不均衡问题,是由流式计算引擎所使用的静态划分策略导致的,一方面静态划分策略难以使系统在倾斜场景达到负载均衡,另一方面静态划分策略难以快速应对数据分布改变。本发明提出了虚拟数据划分及两级动态调度技术。虚拟数据划分技术减少了传统系统中数据重新分区带来的性能影响,为两级动态调度策略提供支持;两级动态调度技术分为垂直伸缩及水平迁移两部分,垂直伸缩开销小,可在毫秒级完成。水平伸缩可解决机器间负载不均衡问题,开销较垂直伸缩大,但无需频繁触发。较传统单级调度方式,两级调度方式的开销更小,可加大调度频率以更好的适应任务负载动态变化。
[0039] 本发明关键技术点包括:
[0040] 关键点1、使用虚拟数据切分的流式计算引擎;技术效果:系统按照虚拟块对数据流进行切分,数据分布改变时无需重新切分,只需对数据流进行调度即可。
[0041] 关键点2、使用两级动态调度技术的流式计算引擎;技术效果:系统使用垂直及水平两级调度调度策略,垂直调度开销小,系统无需暂停,可频繁使用以使系统资源利用率达到最优,水平调度开销较大,但由于其在机器之间迁移任务,可最大化整个集群资源利用率。两级调度策略相比传统单级调度策略,减少了调度开销,增加了调度响应速度。
[0042] 为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。
[0043] 由于主从架构相比无主架构,具有高吞吐、低延迟等特性,且本系统中主节点不会成为性能瓶颈,主节点只负责任务调度,不负责任务计算。而调度任务不会有很大的计算开销,所以不会成为性能瓶颈。因此本系统采用主从架构(“主”为JobManager;“从”为TaskManager)设计,其架构如图1所示,包含作业管理器JobManager、任务管理器TaskManager以及状态管理器State Service三个部分。JobManager负责集群计算资源及用户作业管理;TaskManager负责计算任务执行及统计信息收集;State Service负责计算状态管理,包含提供计算状态存取接口,计算状态备份、迁移以及恢复。请参考图5(图5中状态数据流切分的目的是配合水平及垂直调度,调度时会自动调度对应的数据片)本发明方法流程包括:
[0044] 过程一:系统中,数据流中的每个数据会被转换为包含“key”和“value”字段的数据记录。“key”字段用作数据记录分区使用,由用户作业指定。“value”字段记录了数据流的原始信息。用户作业没有分区需求时,“key”字段可以为空,系统会自动将包含相同“key”的记录分配至相同的节点。作业和任务之间的关系为用户视叫作业,从系统视角叫任务。
[0045] 过程二:数据流进入系统后,被分为状态数据流和无状态数据流两类:
[0046] 无状态数据流中,数据为无状态数据,不需要考虑上下文及历史计算信息,没有分区要求,相同的数据流输入总会产生相同的数据流输出,因此可以被系统调度至任何节点处理,易于系统弹性伸缩和负载均衡,因此,系统调度时优先调度无状态数据流。无状态作业不使用key字段。
[0047] 状态数据流中,数据包含分区需求,具有相同“key”的数据必须被调度至同一节点处理,对系统调度器要求较高,因此,本系统将状态数据流划分为固定数量的data slice切片(数据片),如图2所示。Data slice是系统中的基本调度和处理单位,data slice可被系统并行处理,或根据调度器的决策调度至其他机器处理。数据流划分为Data slice可以简化系统设计,减轻系统调度器的负担。此外,在系统故障恢复时,批量传输及处理数据效率更高,从而减少了系统停机时间。
[0048] 其中“无状态任务”调度根据“状态任务”调度情况决定。系统优先决策状态任务如何部署,最后使用无状态任务填充剩余计算资源。(负载变化时,优先调度无状态任务,给有状态任务空出计算资源)。系统预先将无状态数据流处理任务部署在所有节点,需要调度数据流时,无需再次构建任务。带来的好处是无状态数据流切换成本低。
[0049] 过程三:系统将用户作业转换为表示用户作业的有向无环图DAG。算子(Operator)为DAG中的节点,表示了用户作业中的一个业务处理逻辑。其中,算子分为状态算子和无状态算子两类,状态算子用以处理状态数据流,无状态算子用以处理无状态数据流。用户作业提交后,系统会将用户作业代码解析,将需要使用计算状态的UDF(用户自定义函数,用户作业由UDF以及定义UDF之间关系的连边组成)转换为“状态算子”,其输入为“状态数据流”;将不需要使用计算状态的算子转换为“无状态算子”,其输入流为“无状态数据流”。例如:用户提交word count作业,作业包含UDF如下:
[0050] UDF-1.解析json日志,提取word;
[0051] UDF-2.统计word出现次数。
[0052] UDF-1的业务处理逻辑为无需计算状态,系统将其转换为无状态算子,对应输入流为无状态数据流;UDF-2的业务处理逻辑由于需要记录word出现次数,所以需要计算状态,将其为状态算子,对应输入流为状态输入流。
[0053] 过程四:系统将状态算子和无状态算子分别包装为状态任务(Stateful StreamTask)及无状态任务(Stateless StreamTask),在封装时,会自动将相关联的算子使用OP融合规则合并,如图3所示。
[0054] 过程五:系统将封装好的任务发送至计算节点,由于无状态任务可以被发送并在任意节点执行,为了减少系统调度开销,系统将每个无状态任务复制发送至所有计算节点,将每个状态任务随机并均匀的发送至任一计算节点。“无状态数据流”切换时,对应目标节点必须存在其对应的“无状态任务”。由于系统优先调度无状态任务(由于其调度开销小),无状态数据流切换频繁,所以预先将“无状态任务”部署至所有节点,这样切换的时候就省掉了任务构建这一流程,加快了切换速度。
[0055] 过程六:计算节点收到任务后,为了最大化计算资源利用率,会自动对任务进行垂直伸缩调整,调整每个计算任务的CPU资源占用量。计算节点统计每个任务的输入数据流消息堆积程度,堆积越严重说明计算任务负荷越重。计算节点每隔固定时间间隔挑选负荷最重的计算任务,并将其按照如下公式重新分配CPU资源。其中,pnext代表任务新分配的CPU线程数量,pnow为任务当前线程数量,clast为当前任务上次调度时线程增加数量,Ncpu为CPU核心数量。
[0056]
[0057] 过程七:系统JobManager会统计每个计算节点的计算资源使用率,当计算资源使用率不均衡时,系统执行水平调度策略,JobManager会从负载最高的计算节点选择一个任务迁移至负载最低的节点,选择任务时,会优先选择计算状态最少的任务,以减少迁移耗时。迁移过程如图4所示,当任务T1需要从节点1迁移至节点2时,首先JobManager通知T1上游节点暂停工作,随后在节点2上重构任务T1,此过程中,T1的计算状态DB1会自动迁移至节点2。迁移完成后,节点2发送迁移完成消息至JobManager,最后JobManager重写T1上游路由表并恢复其工作。
[0058] 以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
[0059] 本发明还提出了一种用于倾斜数据的流式计算引擎运行系统,其中包括:
[0060] 模块1、获取包含倾斜数据的用户作业,并将该用户作业转换为表示该用户作业的有向无环图,根据该有向无环图中算子的业务处理逻辑,将该有向无环图中节点划分为有状态算子和无状态算子;
[0061] 模块2、将全部状态算子包装为有状态任务后输入有状态数据流,将全部无状态算子包装为无状态任务后输入无状态数据流;
[0062] 模块3、将该无状态数据流中无状态任务复制发送至任意计算节点,得到无状态处理结果;
[0063] 模块4、将该有状态数据流中有状态任务转换为包含键和值的数据记录,将包含相同键的数据记录分配至相同计算节点,得到有状态处理结果,集合该无状态处理结果和有状态处理结果作为该用户作业的运行结果。
[0064] 所述的用于倾斜数据的流式计算引擎运行系统,其中该模块4包括:将状态数据流划分为固定数量的数据片,该数据片可被计算节点并行处理,或根据调度器的决策调度至其他计算节点处理。
[0065] 所述的用于倾斜数据的流式计算引擎运行系统,其中该模块2中将状态算子包装为有状态任务和将无状态算子包装为无状态任务的过程中均包括使用OP融合规则将相关联的算子合并。
[0066] 所述的用于倾斜数据的流式计算引擎运行系统,其中该模块4包括:
[0067] 模块41、计算节点每隔固定时间间隔挑选负荷最重的有状态任务,并将其按照如下公式重新分配CPU资源:
[0068]
[0069] 其中,pnext代表任务新分配的CPU线程数量,pnow为任务当前线程数量,clast为当前任务上次调度时线程增加数量,Ncpu为CPU核心数量。
[0070] 所述的用于倾斜数据的流式计算引擎运行系统,其中该模块4包括:每隔固定时间间隔从负载最高的计算节点选择一个有状态任务迁移至负载最低的计算节点。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈