CN117194002A - 一种应用于分布式计算引擎的处理方法及装置 - Google Patents
一种应用于分布式计算引擎的处理方法及装置 Download PDFInfo
- Publication number
- CN117194002A CN117194002A CN202210618441.2A CN202210618441A CN117194002A CN 117194002 A CN117194002 A CN 117194002A CN 202210618441 A CN202210618441 A CN 202210618441A CN 117194002 A CN117194002 A CN 117194002A
- Authority
- CN
- China
- Prior art keywords
- accumulator
- task
- broadcast variable
- control node
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 17
- 230000002159 abnormal effect Effects 0.000 claims abstract description 94
- 238000012545 processing Methods 0.000 claims abstract description 60
- 238000000034 method Methods 0.000 claims abstract description 50
- 230000008569 process Effects 0.000 claims description 23
- 238000003860 storage Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 11
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 230000005856 abnormality Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
Landscapes
- Hardware Redundancy (AREA)
Abstract
本发明实施例涉及分布式计算技术领域,尤其涉及一种应用于分布式计算引擎的处理方法及装置。该方法包括:控制节点获取各执行节点中各任务对应的第二累加器的指示值;任一第二累加器的指示值用于表征执行节点在基于执行节点中的第一广播变量执行第二累加器对应的任务时是否出现异常;控制节点基于各第二累加器的指示值,确定控制节点中第一累加器的指示值;控制节点在确定第一累加器的指示值为异常时,更新控制节点的第一广播变量为第二广播变量。避免了定时更新广播变量的方式引起的性能损耗以及更新时效性过低问题。节省算力资源,且更新地非常高效和及时。
Description
技术领域
本发明实施例涉及分布式计算技术领域,尤其涉及一种应用于分布式计算引擎的处理方法、装置、计算设备及计算机可读存储介质。
背景技术
在分布式计算引擎进行流数据处理的过程中,时常会遇到由于当前的广播变量不适用于处理当前任务,从而需要动态更新广播变量的需求。但是一些分布式计算引擎提供的广播变量不支持动态更新。例如分布式计算引擎Spark原生提供的广播变量并不支持在各执行节点中进行动态更新,因此只能在控制节点设置一个定时器,强制对控制节点中的广播变量进行固定频率的刷新,如固定每10分钟先删除执行节点中当前的广播变量,然后控制节点从外部重新加载最新的广播变量,从而使得各执行节点可以基于最新的广播变量执行任务。
采用定时方式刷新广播变量的值存在一定的滞后性,难以准确的动态跟踪实际数据内容的变动情况。而且通常来说,广播变量值的更新是一种极其低频的操作需求,使用定时方式不断更新控制节点中的广播变量无疑也会耗费算力,降低运行性能。
基于以上问题,本发明实施例提供一种应用于分布式计算引擎的处理方法,用于高效地进行广播变量的动态更新,且节省算力资源。
发明内容
本发明实施例提供一种应用于分布式计算引擎的处理方法,用于高效地进行广播变量的动态更新,且节省算力资源。
第一方面,本发明实施例提供一种应用于分布式计算引擎的处理方法,包括:
控制节点获取各执行节点中各任务对应的第二累加器的指示值;任一第二累加器的指示值用于表征所述执行节点在基于所述执行节点中的第一广播变量执行所述第二累加器对应的任务时是否出现异常;
所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值;
所述控制节点在确定所述第一累加器的指示值为异常时,更新所述控制节点的第一广播变量为第二广播变量;所述第二广播变量用于提供给各执行节点在后续执行任务时进行调取。
通过在控制节点中设置第一累加器,那么第一累加器就可获取各任务的第二累加器的指示值,当某个第二累加器对应的任务出现执行异常,那么第一累加器的指示值也会更新,基于更新的指示值,将使任务执行出现异常的第一广播变量更新为第二广播变量,那么在各执行节点基于第二广播变量执行后续任务时,不会出错。避免了定时更新广播变量的方式引起的性能损耗以及更新时效性过低问题。节省算力资源,且更新地非常高效和及时。
可选地,所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值,包括:
所述控制节点在确定任一第二累加器的指示值为异常时,将所述第一累加器的指示值设置为异常;
所述控制节点在确定各第二累加器的指示值均为正常时,将所述第一累加器的指示值设置为正常。
当任一第二累加器的指示值为异常,则将第一累加器的指示值设置为异常,那么就可准确及时地确定第一累加器的异常状态,及时更新第二广播变量。
可选地,通过如下方式确定所述第二累加器的指示值,包括:
针对任一执行节点中的任一任务,所述执行节点在基于所述第一广播变量执行所述任务的过程中,若存在异常处理的情况,则在执行预设操作时将所述第二累加器的指示值设置为异常;所述第二累加器的初始值为正常。
由于分布式计算引擎spark是惰性的计算机制,因此只有在执行实际的操作时(如计数、合集,写等)才会执行相应的程序代码。因此在任务执行过程中,若存在异常处理的情况,在执行预设操作时确定第二累加器的指示值。如此,就可用于获取指示值的变化,并基于指示值的变化进行广播变量的更新。
可选地,所述执行节点在基于所述第一广播变量执行所述任务的过程中,若存在异常处理的情况,则在执行预设操作时将所述第二累加器的指示值设置为异常,包括:
所述执行节点在基于所述第一广播变量执行所述任务的过程中,将第一任务执行结果存储至缓存中;
对所述缓存中所述第一任务执行结果执行强制触发操作,若在强制触发操作中确定所述第一任务执行结果中包含异常结果,则将所述第二累加器的指示值设置为异常。
将第一任务执行结果进行缓存,第一任务执行结果中可能存在异常结果,若存在异常结果,则在强制触发操作中会通过第二累加器的值进行反映,那么就可进行第一累加器的指示值得更新,从而更新广播变量。
可选地,确定所述控制节点中第一累加器的指示值之后,还包括:
所述控制节点在确定所述第一累加器的指示值为正常时,基于所述执行节点将所述缓存中的所述第一任务执行结果写入数据库中。
若第一累加器的指示值为正常,则由于缓存中预先存储了第一任务执行结果,则在执行写入操作时,无需重复读取数据处理数据,而是直接将缓存中的第一任务执行结果写入即可,节省了算力资源,提高了写入效率。
可选地,更新所述控制节点的第一广播变量为第二广播变量之后,还包括:
所述执行节点删除所述缓存中的所述第一任务执行结果中的异常结果,并基于所述第二广播变量执行所述异常结果对应的子任务,并在所述缓存中写入所述子任务的任务执行结果,得到第二任务执行结果;
所述执行节点对所述缓存中所述第二任务执行结果执行强制触发操作,若在强制触发操作中确定所述第二任务执行结果中不包含异常结果,则确定所述第二累加器的指示值为正常;
所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值为正常时,基于所述执行节点将所述缓存中的所述第二任务执行结果写入数据库中。
在确定第一累加器的指示值为异常时,将第一广播变量更新为第二广播变量,由于之前缓存中存储有第一任务执行结果,而第一任务执行结果中有异常结果,那么就可基于第二广播变量对该异常结果对应的子任务重新处理,得到第二任务执行结果。如此可以使第一任务执行结果中的异常结果被修正,得到更加准确的数据处理结果。并且在后续强制触发操作中也会由于第二任务执行结果中不包含异常结果而确定第二累加器为正常,从而无需更新广播变量,而是将第二任务执行结果写入数据库中。
可选地,所述控制节点在确定所述第一累加器的指示值为异常时,更新所述控制节点的第一广播变量为第二广播变量,包括:
所述控制节点在确定所述第一累加器的指示值为异常时,获取所述第一广播变量的版本信息;
根据所述第一广播变量的版本信息确定下一个广播变量的版本信息;
根据所述下一个广播变量的版本信息,从数据库中加载下一个广播变量,基于所述下一个广播变量和所述第一广播变量,得到第二广播变量;所述数据库中的广播变量根据分布式计算引擎中的流数据实时更新得到的。
如此,可以保证更新的第二广播变量是正确的,后续执行任务时基于正确的广播变量进行数据处理。
第二方面,本发明实施例还提供一种应用于分布式计算引擎的处理装置,包括:
获取单元,用于获取各执行节点中各任务对应的第二累加器的指示值;任一第二累加器的指示值用于表征所述执行节点在基于所述执行节点中的第一广播变量执行所述第二累加器对应的任务时是否出现异常;
确定单元,用于基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值;
处理单元,用于在确定所述第一累加器的指示值为异常时,更新所述控制节点的第一广播变量为第二广播变量;所述第二广播变量用于提供给各执行节点在后续执行任务时进行调取。
可选地,所述确定单元,具体用于:
所述控制节点在确定任一第二累加器的指示值为异常时,将所述第一累加器的指示值设置为异常;
所述控制节点在确定各第二累加器的指示值均为正常时,将所述第一累加器的指示值设置为正常。
可选地,所述获取单元,具体用于:
针对任一执行节点中的任一任务,所述执行节点在基于所述第一广播变量执行所述任务的过程中,若存在异常处理的情况,则在执行预设操作时将所述第二累加器的指示值设置为异常;所述第二累加器的初始值为正常。
可选地,所述获取单元,具体用于:
所述执行节点在基于所述第一广播变量执行所述任务的过程中,将第一任务执行结果存储至缓存中;
对所述缓存中所述第一任务执行结果执行强制触发操作,若在强制触发操作中确定所述第一任务执行结果中包含异常结果,则将所述第二累加器的指示值设置为异常。
可选地,所述处理单元,还用于:
所述控制节点在确定所述第一累加器的指示值为正常时,基于所述执行节点将所述缓存中的所述第一任务执行结果写入数据库中。
可选地,所述处理单元还用于:
所述执行节点删除所述缓存中的所述第一任务执行结果中的异常结果,并基于所述第二广播变量执行所述异常结果对应的子任务,并在所述缓存中写入所述子任务的任务执行结果,得到第二任务执行结果;
所述执行节点对所述缓存中所述第二任务执行结果执行强制触发操作,若在强制触发操作中确定所述第二任务执行结果中不包含异常结果,则确定所述第二累加器的指示值为正常;
所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值为正常时,基于所述执行节点将所述缓存中的所述第二任务执行结果写入数据库中。
可选地,所述处理单元,具体用于:
所述控制节点在确定所述第一累加器的指示值为异常时,获取所述第一广播变量的版本信息;
根据所述第一广播变量的版本信息确定下一个广播变量的版本信息;
根据所述下一个广播变量的版本信息,从数据库中加载下一个广播变量,基于所述下一个广播变量和所述第一广播变量,得到第二广播变量;所述数据库中的广播变量根据分布式计算引擎中的流数据实时更新得到的。
第三方面,本发明实施例还提供一种计算设备,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行上述任一方式所列的应用于分布式计算引擎的处理方法。
第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行上述任一方式所列的应用于分布式计算引擎的处理方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种Yarn资源调度框架的示意图;
图2为本发明实施例提供的一种可能的动态更新广播变量的方法的流程示意图;
图3为本发明实施例提供的一种具体的更新广播变量的示意图;
图4为本发明实施例提供的一种可能的应用于分布式计算引擎的处理方法的示意图;
图5为本发明实施例提供的一种可能的应用于分布式计算引擎的处理方法的示意图;
图6为本发明实施例提供的一种第一累加器的主要实现方法的示意图;
图7为本发明实施例提供的一种可能的应用于分布式计算引擎的处理方法的示意图;
图8为本发明实施例提供的一种应用于分布式计算引擎的处理装置的结构示意图;
图9为本发明实施例提供的一种计算机设备的结构示意图。
具体实施方式
为使本申请的目的、实施方式和优点更加清楚,下面将结合本申请示例性实施例中的附图,对本申请示例性实施方式进行清楚、完整地描述,显然,所描述的示例性实施例仅是本申请一部分实施例,而不是全部的实施例。
基于本申请描述的示例性实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请所附权利要求保护的范围。此外,虽然本申请中公开内容按照示范性一个或几个实例来介绍,但应理解,可以就这些公开内容的各个方面也可以单独构成一个完整实施方式。
需要说明的是,本申请中对于术语的简要说明,仅是为了方便理解接下来描述的实施方式,而不是意图限定本申请的实施方式。除非另有说明,这些术语应当按照其普通和通常的含义理解。
本申请中说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等是用于区别类似或同类的对象或实体,而不必然意味着限定特定的顺序或先后次序,除非另外注明(Unless otherwise indicated)。应该理解这样使用的用语在适当情况下可以互换,例如能够根据本申请实施例图示或描述中给出那些以外的顺序实施。
此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出的那些组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其它组件。
随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。现有的分布式计算引擎有MapReduce、Flink和Spark等,本发明实施例以Spark为例进行介绍。
Spark作为一种分布式计算框架,其应用进程通常分布式的运行在一系列相互独立的计算节点中。为了对计算资源的统一管理以及分配,通常将各个计算节点组建为一个集群,然后由集群管理员来分配应用程序所需的计算资源,常见的集群资源调度框架有Mesos,YARN or Kubernetes等。
图1示例性的示出了本发明实施例所适用的一种Yarn资源调度框架,该调度框架包括客户端、资源管理器、控制节点和若干执行节点。下面简单介绍如何进行资源的分配调度。
1、用户通过客户端提交作业申请到Yarn集群的资源管理器。
2、资源管理器在收到作业请求后,随机选择一台主机,将作为控制节点的命令和作业发送至这台主机。例如选择主机1,主机1在接收到作为控制节点的命令后,生成一个容器作为控制节点。控制节点仅负责作业的分配与调度,而不执行实际的数据处理任务。
3、控制节点启动应用管理服务进程然后进行Spark Context的初始化操作。初始化操作后,通过DAG scheduler将在步骤2中接收到的作业构建一个DAG图(DirectedAcyclic Graph,有向无环图)。
4、在DAG图创建成功后,Yarn cluster scheduler根据DAG图向资源管理器申请若干的容器作为执行节点。
5、资源管理器收到请求后,随机选择若干主机分配容器作为执行节点。例如,选择了主机2和主机3,主机2中设置两个容器,即两个执行节点,主机3中设置1个容器,即1个执行节点。
6、被选中的主机启动各执行节点,执行节点用于根据控制节点的指示,执行实际的任务。
7、应用管理中的Yarn cluster scheduler根据构建的DAG图分配任务给创建好的执行节点执行,并接收执行节点对任务的执行结果。各执行节点中的任务是并行执行的。
如图1所示,Spark应用程序会将一个作业拆分为若干个相互独立的任务,然后这些任务并行运行在多个相互独立的执行节点中。各执行节点均应基于一致的加工方式对任务进行加工。那么如何对每个执行节点的加工方式进行统一,我们提供采用广播变量的方式。
将在多个执行节点之间需要共享的数据定义为一个广播变量,该广播变量在控制节点生成,每个执行节点均可在控制节点中获取该广播变量,并在执行节点中缓存一个广播变量的数据副本,从而基于该广播变量的数据副本对数据进行加工。为了保证每个任务的执行方式都是统一的,在执行节点中不允许对广播变量的值进行修改,只能在控制节点中修改。
在实际的流数据处理应用过程中,时常会遇到需要动态更新广播变量的需求,而Spark原生提供的广播变量并不支持在执行节点中进行动态更新。图2示出了一种可能的动态更新广播变量的方法,在控制节点中设置一个定时器,强制对广播变量进行固定频率的刷新,如固定每10分钟先删除执行节点中当前的广播变量的数据副本,然后控制节点中从外部重新加载最新的广播变量,之后执行节点在确定无法执行任务时,从控制节点中获取最新的广播变量,从而按照最新的广播变量执行任务。为了节省网络带宽,每个执行节点在确定无法执行任务时,可以先在同主机里的其他执行节点中查看是否具有广播变量,若有,则从同主机的其他执行节点中获取,而无需从控制节点中获取。
举个例子,图3示出了一种具体的更新广播变量的实施例。执行节点1用于将一系列流数据转换为相应的数据格式,广播变量用于指示数据格式。
外部的数据库中存储着随流数据而实时更新的数据格式,例如当流数据为A1、A2、A3、A1、B1、B2、B3、C1时,数据库中的数据格式为s1;当流数据为A4、C2、C3时,数据库中新增数据格式s2;当流数据为C4时,数据库中新增数据格式s3……
在图3中,执行节点1具有3个CPU,可以用于处理3个任务,当前的广播变量为s1:name:String,age:Integer,则执行节点1存储的广播变量的数据副本也为s1。根据该广播变量的数据副本执行任务时,获取到的流数据中包含姓名name,则将其转换为字符串String格式;获取到的流数据中包含年龄age,则将其转换为数值Integer格式。例如,任务1获取到流数据A1和A2,将姓名转换为String格式,将年龄转换为Integer格式;任务2获取到流数据B1,将姓名转换为String格式,将年龄转换为Integer格式;任务3获取到流数据C1,将姓名转换为String格式,将年龄转换为Integer格式。
当任务3处理到流数据C2时,获取的流数据中不仅包含姓名、年龄,还包含性别,由于s1并未对性别的数据格式进行定义,因此流数据C2转换不成功。
若强制对广播变量进行固定频率的刷新,例如每10分钟刷新一次,那么要等到10分钟后,先删除执行节点1中当前的广播变量的数据副本s1,然后控制节点从外部的数据库重新加载最新的广播变量s2,执行节点1在确认无法执行任务时,从控制节点中获取广播变量s2,从而后续执行任务可以基于s2进行执行。
上述的广播变量更新机制存在如下问题:
1、广播变量更新的时效性低。
采用定时方式刷新广播变量存在一定的滞后性,难以准确的动态跟踪实际数据内容的变动情况。
2、资源消耗过大。
通常来说,广播变量的更新是一种极其低频的操作需求,而程序运行绝大多数的时间里并不需要进行广播变量的更新,且又由于数据的广播是一种极其低效耗时的操作,使用定时方式在控制节点中刷新广播变量将一定程度上降低应用程序的运行性能。
为了解决上述问题,本发明实施例提供一种可能的应用于分布式计算引擎的处理方法,如图4所示,包括:
步骤401,控制节点获取各执行节点中各任务对应的第二累加器的指示值;任一第二累加器的指示值用于表征所述执行节点在基于所述执行节点中的第一广播变量执行所述第二累加器对应的任务时是否出现异常。
在各执行节点的各任务中设置累加器,为了方便和下文作区分,这里命名为第二累加器。例如,在图3的例子中,任务1、任务2和任务3各自具有一个第二累加器。
累加器是一种只用于相加操作的变量。它提供了两个函数接口add和merge,在任务中可以通过add操作修改累加器的值,通过调用merge操作可以将所有的任务中的累加器的值进行合并。使用累加器能够实现count计数、sum求和等操作,如统计所有分布式执行节点上的总记录条数以及总处理时间。
累加器还可用于在任务执行时根据任务的执行情况生成指示值。例如,在图3的例子中,执行节点1可以并行执行任务1、任务2和任务3,任务1、任务2和任务3各自具有一个第二累加器。当前的第一广播变量为s1,在执行任务1的A1、A2时,未出现执行异常,因此任务1的第二累加器指示值为“正常”;在执行任务2的B1时,未出现执行异常,因此任务2的第二累加器指示值为“正常”;在执行任务3的C1时,未出现执行异常,因此任务3的第二累加器指示值为“正常”,在执行任务3的C2时,由于无法从第一广播变量中获取性别的数据格式,无法确定将性别转换为何种格式,因而出现执行异常,任务3的第二累加器指示值又更新为“异常”。
控制节点中设置第一累加器,通过调用第一累加器的merge函数,可以获得各第二累加器的指示值。例如,获取任务1的第二累加器指示值为“正常”,任务2的第二累加器指示值为“正常”,任务3的第二累加器指示值为“异常”。
可选地,可以设置一个环节结束后控制节点调用merge函数,也可以设置执行节点处理完一部分数据后调用merge函数,本发明实施例对此不作限制。这里的一个环节是指读取数据、处理数据和写入数据。由于累加器的惰性计算机制,一般为,当实际的触发操作(计数count、合集collect,写write等)时,累加器才会执行相应的程序代码,第二累加器进行指示值的更新,控制节点调用merge函数获取各第二累加器的指示值。
步骤402,所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值。
具体地,控制节点在确定任一第二累加器的指示值为异常时,将所述第一累加器的指示值设置为异常;控制节点在确定各第二累加器的指示值均为正常时,将所述第一累加器的指示值设置为正常。
例如,在上述例子中,由于任务3的第二累加器指示值为“异常”,那么控制节点中第一累加器的指示值也为异常。
步骤403,所述控制节点在确定所述第一累加器的指示值为异常时,更新所述控制节点的第一广播变量为第二广播变量;所述第二广播变量用于提供给各执行节点在后续执行任务时进行调取。
在确定第一累加器的指示值为异常后,说明存在执行节点的任务依据当前的第一广播变量无法进行正常的数据处理,因此将第一广播变量更新为第二广播变量,这样在后续各执行节点执行任务时,就可基于第二广播变量执行任务。
例如,在上述例子中,当控制节点确定第一累加器的指示值为异常后,从数据库中加载随流数据实时更新的数据格式s2,将s2确定为第二广播变量。
可选地,可以将s2和s1合并作为第二广播变量,因为s2和s1可能不完全一样,合并后,得到的第二广播变量更加全面,有利于数据处理的出错率的降低。
可选地,由于数据库中的数据格式是随着流数据实时更新的,而控制节点获取各执行节点中各任务对应的第二累加器的指示值可能不是实时获取的,例如可能是执行节点完成一个环节(读取数据、处理数据、写入数据)后,获取了各第二累加器的指示值,从而确定了第一累加器的指示值,进行广播变量的更新。因此当控制节点确定第一累加器的指示值为异常时,数据库中的数据格式可能已经更新到了s5,而我们实际上是要获取s2,因此在控制节点确定所述第一累加器的指示值为异常时,还可获取第一广播变量的版本信息;根据所述第一广播变量的版本信息确定下一个广播变量的版本信息;根据所述下一个广播变量的版本信息,从数据库中加载下一个广播变量,基于所述下一个广播变量和所述第一广播变量,得到第二广播变量。
例如,获取第一广播变量的版本信息为s1,由此可确定下一个广播变量的版本信息为s2,那么可以直接将s2确定为第二广播变量,或者将s1和s2进行合并,得到第二广播变量。
下面通过具体的实施例对本发明实施例提供的方法做出进一步的介绍。
实施例一
图5示出了一种可能的应用于分布式计算引擎的处理方法,消息生产者将待处理的流数据添加至消息队列,在图5的例子中,消息队列有3个分区,执行节点1中具有3个CPU,可同时处理3个任务。由于spark是惰性的计算机制,当执行节点执行实际的触发操作即写入数据时,执行节点才会从消息队列获取流数据进行处理,以任务1为例,执行节点先读取A1和A2,然后进行数据处理,即将流数据转换为相应的数据格式,然后将数据写入存储组,在此过程中,基于第一广播变量执行任务1并未出现异常处理的情况,因此任务1的第二累加器的指示值为正常。
以任务3为例,执行节点先读取C1和C2,然后进行数据处理,即将流数据转换为相应的数据格式,然后将数据写入存储组,在此过程中,基于第一广播变量执行任务3的C2数据时,确定对于性别的字段没有对应转换的数据格式,出现了异常处理的情况,因此任务3的第二累加器的指示值为异常。执行节点可以将处理结果写入存储组。处理结果可以仅包括处理成功后的C1,也可以包括处理成功后的C1和未处理成功的C2。
值得一提的是,由于spark的惰性计算机制,执行节点只有在执行预设操作时,才会更新第二累计器的指示值,这里的预设操作就是上文中提到的实际的触发操作,在本具体实施例中,预设操作为写入数据的操作。
在本例中,一个环节是指读取数据-处理数据-写入数据,在一个环节结束后,控制节点调用merge函数,获取了各第二累加器的指示值,其中任务1的第二累加器的指示值为正常,任务2的第二累加器的指示值为正常,任务3的第二累加器的指示值为异常,因此第一累加器的指示值为异常,将第一累加器的指示值更新为异常,判断指示值是否变化,在本例中,发生了变化,因此进入步骤4,更新广播变量,获取当前的第一广播变量为s1,根据s1确定下一个广播变量为s2,因此从外部的数据库中加载s2至控制节点的广播变量处作为第二广播变量。如此,后续再进行下一次的数据读取,即步骤5时,会基于第二广播变量进行数据的读取处理等。
在图5中,第一累加器的版本信息根据广播变量的版本信息而定。如广播变量的版本信息为s1,第一累加器的版本信息为1。
下面对第一累加器的主要实现做简单介绍。如图6所示,其中属性1用于标识是否需要更新广播变量,如确定第一累加器的指示值为异常,则属性1为是;属性2用于记录当前广播变量的版本信息,例如在图5的例子中,当前广播变量的版本为s1;第一个方法1用于通过属性2获取当前广播变量的版本信息s1;第二个方法1用于通过属性1获取是否需要更新广播变量;第三个方法1用于更新广播变量的版本信息,在图5的例子中,更新广播变量的版本信息为s2;方法2用于将所有任务的第二累加器的指示值合并。
可以看出,在上述实施例中,通过第一累加器的指示值来指示广播变量的更新,无需定时刷新,减轻了系统的负担的同时,可以更加及时、灵活地对广播变量进行调整,从而保证数据的处理正常有序地进行。
但是,通过上述方法进行广播变量的调整,还不够及时。由于spark是惰性的计算机制,只有在实际的触发操作时第二累加器才会发生指示值的更新,无法做到某一个数据发生处理异常后,马上更新第二累加器,因此会有一定的滞后。且未基于正确的第二广播变量进行处理的数据没有被重新处理,这个数据就没有得到修正。如在上述例子中的C2,由于C2基于第一广播变量进行数据处理,发现了处理异常,更新第二广播变量,但是C2却没有再次基于第二广播变量重新计算,那么这个数据C2就没有被修正。
实施例二
图7示出了一种可能的应用于分布式计算引擎的处理方法,消息生产者将待处理的流数据添加至消息队列,在图7的例子中,消息队列有3个分区,执行节点1中具有3个CPU,可同时处理3个任务。
为了解决实施例一中的问题,我们在写入数据之前添加一个强制触发操作,该强制触发操作可以是计数、合集等其他实际的触发操作。图7中,由于spark是惰性的计算机制,当执行节点执行实际的触发操作即计数操作时,执行节点才会从消息队列获取流数据进行处理,处理数据后将第一任务执行结果存储至缓存中,对缓存中的第一任务执行结果执行计数操作时,触发第二累加器的更新,任务1的第二累加器的指示值更新为正常,任务2的第二累加器的指示值更新为正常,任务3的第二累加器的指示值更新为异常。在本例中,一个环节是指读取数据-处理数据-缓存加工-计数操作,在一个环节结束后,控制节点调用merge函数,将各第二累加器的指示值合并,得到第一累加器的指示值为异常,第一累加器的指示值发生了变化,因此将第一广播变量s1更新为第二广播变量s2,即步骤5.1。更新广播变量的同时,执行步骤5.2,删除缓存中的第一任务执行结果中的异常结果,基于修改后的第二广播变量执行异常结果对应的子任务,将子任务的任务执行结果写入缓存中,得到第二任务执行结果。例如在本例中,任务3的第一执行结果中包括处理成功的C1和未处理成功的C2,那么C2就是异常结果,基于第二广播变量,将C2的任务执行结果写入缓存中,得到第二任务执行结果。第二任务执行结果就包括处理成功的C1和处理成功的C2。在后续执行节点对第二任务执行结果执行计数操作时,可以发现缓存中的第二任务执行结果不包含异常结果,因此第二累加器的指示值为正常,那么第一累加器的指示值为正常,指示值无变化,那么就可执行步骤6,将缓存中的数据写入存储库,并清理缓存。
在本具体实施例中,之所以在步骤4之前设置步骤3,将处理得到的第一任务执行结果进行缓存,是为了在第一累加器的指示值为正常时,执行步骤6的写入操作时可以直接将缓存中的数据写入,而无需再次执行读取数据、处理数据等操作(因为写入数据是实际的触发操作,当执行写入数据时,会再次读取数据),如此大量地节省了算力资源。
基于相同的技术构思,图8示例性的示出了本发明实施例提供的一种应用于分布式计算引擎的处理装置的结构,该结构可以执行应用于分布式计算引擎的处理的流程。
如图8所示,该装置具体包括:
获取单元801,用于获取各执行节点中各任务对应的第二累加器的指示值;任一第二累加器的指示值用于表征所述执行节点在基于所述执行节点中的第一广播变量执行所述第二累加器对应的任务时是否出现异常;
确定单元802,用于基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值;
处理单元803,用于在确定所述第一累加器的指示值为异常时,更新所述控制节点的第一广播变量为第二广播变量;所述第二广播变量用于提供给各执行节点在后续执行任务时进行调取。
可选地,所述确定单元802,具体用于:
所述控制节点在确定任一第二累加器的指示值为异常时,将所述第一累加器的指示值设置为异常;
所述控制节点在确定各第二累加器的指示值均为正常时,将所述第一累加器的指示值设置为正常。
可选地,所述获取单元801,具体用于:
针对任一执行节点中的任一任务,所述执行节点在基于所述第一广播变量执行所述任务的过程中,若存在异常处理的情况,则在执行预设操作时将所述第二累加器的指示值设置为异常;所述第二累加器的初始值为正常。
可选地,所述获取单元801,具体用于:
所述执行节点在基于所述第一广播变量执行所述任务的过程中,将第一任务执行结果存储至缓存中;
对所述缓存中所述第一任务执行结果执行强制触发操作,若在强制触发操作中确定所述第一任务执行结果中包含异常结果,则将所述第二累加器的指示值设置为异常。
可选地,所述处理单元803,还用于:
所述控制节点在确定所述第一累加器的指示值为正常时,基于所述执行节点将所述缓存中的所述第一任务执行结果写入数据库中。
可选地,所述处理单元803还用于:
所述执行节点删除所述缓存中的所述第一任务执行结果中的异常结果,并基于所述第二广播变量执行所述异常结果对应的子任务,并在所述缓存中写入所述子任务的任务执行结果,得到第二任务执行结果;
所述执行节点对所述缓存中所述第二任务执行结果执行强制触发操作,若在强制触发操作中确定所述第二任务执行结果中不包含异常结果,则确定所述第二累加器的指示值为正常;
所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值为正常时,基于所述执行节点将所述缓存中的所述第二任务执行结果写入数据库中。
可选地,所述处理单元803,具体用于:
所述控制节点在确定所述第一累加器的指示值为异常时,获取所述第一广播变量的版本信息;
根据所述第一广播变量的版本信息确定下一个广播变量的版本信息;
根据所述下一个广播变量的版本信息,从数据库中加载下一个广播变量,基于所述下一个广播变量和所述第一广播变量,得到第二广播变量;所述数据库中的广播变量根据分布式计算引擎中的流数据实时更新得到的。
基于相同的技术构思,本申请实施例提供了一种计算机设备,如图9所示,包括至少一个处理器901,以及与至少一个处理器连接的存储器902,本申请实施例中不限定处理器901与存储器902之间的具体连接介质,图9中处理器901和存储器902之间通过总线连接为例。总线可以分为地址总线、数据总线、控制总线等。
在本申请实施例中,存储器902存储有可被至少一个处理器901执行的指令,至少一个处理器901通过执行存储器902存储的指令,可以执行上述应用于分布式计算引擎的处理方法的步骤。
其中,处理器901是计算机设备的控制中心,可以利用各种接口和线路连接计算机设备的各个部分,通过运行或执行存储在存储器902内的指令以及调用存储在存储器902内的数据,从而进行应用于分布式计算引擎的处理。可选的,处理器901可包括一个或多个处理单元,处理器901可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器901中。在一些实施例中,处理器901和存储器902可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器901可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器902作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器902可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器902是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器902还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行程序,计算机可执行程序用于使计算机执行上述任一方式所列的应用于分布式计算引擎的处理的方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种应用于分布式计算引擎的处理方法,其特征在于,包括:
控制节点获取各执行节点中各任务对应的第二累加器的指示值;任一第二累加器的指示值用于表征所述执行节点在基于所述执行节点中的第一广播变量执行所述第二累加器对应的任务时是否出现异常;
所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值;
所述控制节点在确定所述第一累加器的指示值为异常时,更新所述控制节点的第一广播变量为第二广播变量;所述第二广播变量用于提供给各执行节点在后续执行任务时进行调取。
2.如权利要求1所述的方法,其特征在于,所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值,包括:
所述控制节点在确定任一第二累加器的指示值为异常时,将所述第一累加器的指示值设置为异常;
所述控制节点在确定各第二累加器的指示值均为正常时,将所述第一累加器的指示值设置为正常。
3.如权利要求1所述的方法,其特征在于,通过如下方式确定所述第二累加器的指示值,包括:
针对任一执行节点中的任一任务,所述执行节点在基于所述第一广播变量执行所述任务的过程中,若存在异常处理的情况,则在执行预设操作时将所述第二累加器的指示值设置为异常;所述第二累加器的初始值为正常。
4.如权利要求3所述的方法,其特征在于,所述执行节点在基于所述第一广播变量执行所述任务的过程中,若存在异常处理的情况,则在执行预设操作时将所述第二累加器的指示值设置为异常,包括:
所述执行节点在基于所述第一广播变量执行所述任务的过程中,将第一任务执行结果存储至缓存中;
对所述缓存中所述第一任务执行结果执行强制触发操作,若在强制触发操作中确定所述第一任务执行结果中包含异常结果,则将所述第二累加器的指示值设置为异常。
5.如权利要求4所述的方法,其特征在于,确定所述控制节点中第一累加器的指示值之后,还包括:
所述控制节点在确定所述第一累加器的指示值为正常时,基于所述执行节点将所述缓存中的所述第一任务执行结果写入数据库中。
6.如权利要求4所述的方法,其特征在于,更新所述控制节点的第一广播变量为第二广播变量之后,还包括:
所述执行节点删除所述缓存中的所述第一任务执行结果中的异常结果,并基于所述第二广播变量执行所述异常结果对应的子任务,并在所述缓存中写入所述子任务的任务执行结果,得到第二任务执行结果;
所述执行节点对所述缓存中所述第二任务执行结果执行强制触发操作,若在强制触发操作中确定所述第二任务执行结果中不包含异常结果,则确定所述第二累加器的指示值为正常;
所述控制节点基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值为正常时,基于所述执行节点将所述缓存中的所述第二任务执行结果写入数据库中。
7.如权利要求1所述的方法,其特征在于,所述控制节点在确定所述第一累加器的指示值为异常时,更新所述控制节点的第一广播变量为第二广播变量,包括:
所述控制节点在确定所述第一累加器的指示值为异常时,获取所述第一广播变量的版本信息;
根据所述第一广播变量的版本信息确定下一个广播变量的版本信息;
根据所述下一个广播变量的版本信息,从数据库中加载下一个广播变量,基于所述下一个广播变量和所述第一广播变量,得到第二广播变量;所述数据库中的广播变量根据分布式计算引擎中的流数据实时更新得到的。
8.一种应用于分布式计算引擎的处理装置,其特征在于,包括:
获取单元,用于获取各执行节点中各任务对应的第二累加器的指示值;任一第二累加器的指示值用于表征所述执行节点在基于所述执行节点中的第一广播变量执行所述第二累加器对应的任务时是否出现异常;
确定单元,用于基于各第二累加器的指示值,确定所述控制节点中第一累加器的指示值;
处理单元,用于在确定所述第一累加器的指示值为异常时,更新所述控制节点的第一广播变量为第二广播变量;所述第二广播变量用于提供给各执行节点在后续执行任务时进行调取。
9.一种计算设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210618441.2A CN117194002A (zh) | 2022-06-01 | 2022-06-01 | 一种应用于分布式计算引擎的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210618441.2A CN117194002A (zh) | 2022-06-01 | 2022-06-01 | 一种应用于分布式计算引擎的处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117194002A true CN117194002A (zh) | 2023-12-08 |
Family
ID=89004037
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210618441.2A Pending CN117194002A (zh) | 2022-06-01 | 2022-06-01 | 一种应用于分布式计算引擎的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117194002A (zh) |
-
2022
- 2022-06-01 CN CN202210618441.2A patent/CN117194002A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10579364B2 (en) | Upgrading bundled applications in a distributed computing system | |
US11099937B2 (en) | Implementing clone snapshots in a distributed storage system | |
US20190213085A1 (en) | Implementing Fault Domain And Latency Requirements In A Virtualized Distributed Storage System | |
CN110941481A (zh) | 资源调度方法、装置及系统 | |
JP2016129056A (ja) | フォールトトレラントバッチ処理 | |
CN107016016B (zh) | 一种数据处理的方法及装置 | |
US10817380B2 (en) | Implementing affinity and anti-affinity constraints in a bundled application | |
CN111324427B (zh) | 一种基于dsp的任务调度方法及装置 | |
CN112799606B (zh) | Io请求的调度方法及装置 | |
CN110427258B (zh) | 基于云平台的资源调度控制方法及装置 | |
US8954969B2 (en) | File system object node management | |
CN111488323A (zh) | 一种数据处理方法、装置及电子设备 | |
CN114253713A (zh) | 一种基于reactor的异步批处理方法及系统 | |
CN113157411B (zh) | 一种基于Celery的可靠可配置任务系统及装置 | |
CN112631994A (zh) | 数据迁移方法及系统 | |
CN116881003A (zh) | 资源分配方法、装置、服务设备及存储介质 | |
CN117194002A (zh) | 一种应用于分布式计算引擎的处理方法及装置 | |
CN115878910A (zh) | 线路查询方法、装置和存储介质 | |
CN113302593A (zh) | 任务处理方法、装置、系统、电子设备及存储介质 | |
CN114237891A (zh) | 资源调度方法、装置、电子设备及存储介质 | |
CN114692585A (zh) | 表服务处理方法及系统 | |
CN114153574A (zh) | 一种应用于分布式流数据流引擎的资源设置方法及装置 | |
CN114116790A (zh) | 数据处理的方法及装置 | |
US11748203B2 (en) | Multi-role application orchestration in a distributed storage system | |
CN114661432A (zh) | 任务调度方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |