CN104360903A - Spark作业调度系统中实现任务数据解耦的方法 - Google Patents
Spark作业调度系统中实现任务数据解耦的方法 Download PDFInfo
- Publication number
- CN104360903A CN104360903A CN201410658665.1A CN201410658665A CN104360903A CN 104360903 A CN104360903 A CN 104360903A CN 201410658665 A CN201410658665 A CN 201410658665A CN 104360903 A CN104360903 A CN 104360903A
- Authority
- CN
- China
- Prior art keywords
- task
- scheduling system
- spark
- job scheduling
- rdd
- 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.)
- Granted
Links
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种Spark作业调度系统中实现任务数据解耦的方法,其中包括:在一个迭代周期中系统通过任务上下文对象实例读取迭代状态对象的迭代RDD信息,并将迭代RDD信息保存至任务上下文对象中;系统通过Spark任务对象实例在任务上下文对象中查找到对应的RDD信息,并将所对应的RDD信息保存至任务结果对象中;系统通过任务状态对象实例分析任务结果对象中的RDD信息,并将所对应的RDD信息分别保存至对应的状态对象中。采用本发明的Spark作业调度系统中实现任务数据解耦的方法,使RDD可以在各个任务之间传递,或者在任务的前一个周期和下一个周期之间进行,使其以模块化的方式来编写各个任务,具有更广泛的应用范围。
Description
技术领域
本发明涉及分布式大数据处理领域,尤其涉及Spark作业调度设计领域,具体是指一种Spark作业调度系统中实现任务数据解耦的方法。
背景技术
Spark是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。Spark是一个类MapReduce(一种编程模型)的通用的并行计算框架,但不同于MapReduce的是中间结果可以保存在内存中,带来更高的效率和更好的交互性(低延迟)。此外Spark还提供了更为广泛的数据集操作类型,支持内存计算、多迭代批量处理、即席查询、流处理和图计算等多种范式。
Spark还引进了名为弹性分布式数据集(Resilient Distributed Datasets,RDD)的抽象。RDD是分布在一组节点中的只读对象集合。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依赖于Spark维护的RDD“血统”关系(即允许基于数据衍生过程重建部分数据集的信息)。
作业中的任务依赖最终还是数据之间的依赖,即前一个任务的数据计算完后的输出结果要被下一个任务用到,我们就说这两个任务有依赖关系。在Spark计算模型中,即RDD要能在任务之间传递。
随着Spark成为Apache基金会的顶级开源项目,以及Spark在国内的普及和流行,Spark在大数据计算中会占有越来越重要的作用。但是Spark在作业调度还有些问题。
Spark可以在Standalone、Yarn、Mesos等模式下运行,这些资源调度系统提供作业调度功能,主要是根据作业的CPU(Central Processing Unit,中央处理器)、内存等的需求来选择可以可用Worker(工作)节点来进行计算,一般都有FIFO(First Input First Output,先进先出)、FAIR(平均)等调度算法,并且是可配置的。它假定作业是没有依赖关系的,可以互相独立运行的。
Spark的DAG(directed acyclic graph有向无环图)调度程序也会进行调度,但是它针对的是Spark的Action操作(Spark的驱动程序可以在数据集上执行两种类型的操作:Action(动作)和Transformation(转换)),并根据RDD之间的依赖关系来产生不同的阶段(stage)。在这里,需要明确任务和Spark的Action操作之间的区别,任务是与业务相关的,是能够产生某种业务价值的操作。而Action则是Spark计算模型中的一个方法(例如count(计算),take(获得),reduce(推理)等)。通过该方法,Sparker的驱动程序可以将计算任务提交到Spark的各个Worker节点中完成实际的计算工作。
我们可以这样理解:一个作业有多个任务,一个任务有多个Spark Action算子。Spark在作业调度和Action调度中都提供了实现,但是缺少对任务调度的实现。即任务之间的RDD如何传递。本技术就是为了解决Spark这方面的一个缺失。
发明内容
本发明的目的是克服上述现有技术的缺点,提供了一种以可配置的方式来描述任务之间的依赖关系,使RDD可以在各个任务之间传递,或者在任务的前一个周期和下一个周期之间进行,使其以模块化的方式来编写各个业务计算任务,从而在Spark作业调度系统中实现任务数据解耦的方法。
为了实现上述目的,本发明的Spark作业调度系统中实现任务数据解耦的方法具有如下构成:
该Spark作业调度系统中实现任务数据解耦的方法,其主要特点是,所述的方法包括以下步骤:
(1)所述的Spark作业调度系统开始一个迭代周期,并创建该迭代周期的迭代状态对象;
(2)所述的Spark作业调度系统创建任务上下文对象实例、Spark任务对象实例和任务状态对象实例;
(3)所述的Spark作业调度系统通过所述的任务上下文对象实例读取所述的迭代状态对象的迭代RDD信息,并将所述的迭代RDD信息保存至任务上下文对象中;
(4)所述的Spark作业调度系统通过所述的Spark任务对象实例在所述的任务上下文对象中查找到对应的RDD信息,并将所对应的RDD信息保存至任务结果对象中;
(5)所述的Spark作业调度系统通过所述的任务状态对象实例分析所述的任务结果对象中的RDD信息,并将所对应的RDD信息分别保存至对应的状态对象中。
进一步地,所述的步骤(1)和(2)之间,包括以下步骤:
(1.1)所述的Spark作业调度系统判断该迭代周期内的各个任务是否为没有前序任务依赖的任务或者是否为所有依赖任务都已经执行完成的任务;
(1.2)如果该任务为没有前序任务依赖的任务或者为所有依赖任务都已经执行完成的任务,则执行该任务,否则不执行该任务。
进一步地,所述的将所对应的RDD信息分别保存至对应的状态对象中,具体为:
所述的Spark作业调度系统根据所述的配置信息中的RDD范围将所述的RDD信息分别保存至对应的状态对象中。
进一步地,所述的步骤(1)之前,还包括以下步骤:
(0.1)所述的Spark作业调度系统创建全局上下文对象,并读取各个任务的配置信息;
(0.2)所述的Spark作业调度系统根据所述的各个任务的配置信息来构建有向无环图;
(0.3)所述的Spark作业调度系统创建全局状态对象实例。
更进一步地,所述的步骤(1)和(2)之间,包括以下步骤:
(1.a)所述的Spark作业调度系统将该迭代周期的迭代状态对象保存至所述的全局状态对象实例中。
更进一步地,所述的Spark作业调度系统通过所述的任务上下文对象实例读取所述的迭代状态对象的迭代RDD信息,具体为:
所述的Spark作业调度系统通过所述的任务上下文对象实例从所述的全局状态对象实例中读取所述的迭代状态对象的迭代RDD信息。
更进一步地,所述的创建Spark任务对象实例,具体为:
所述的Spark作业调度系统根据所述的配置信息中的类名以及Java反射机制创建所述的Spark任务对象实例。
进一步地,所述的步骤(5)之后,还包括以下步骤:
(6)所述的Spark作业调度系统判断该迭代周期内的所有任务是否均已执行完成,如果是则返回上述步骤(1),否则返回上述步骤(2)。
采用了本发明的Spark作业调度系统中实现任务数据解耦的方法,使用该技术使得任务之间的依赖关系配置大为简化,大家只需要关注自己的业务实现,协同开发能力大为增强。同时,系统的可维护性也得到大幅提高本架构运用到公司的msa等多个项目,取得了较好的效果。
此外,由于状态和任务分离,架构本身和业务之间可以相互平行地开发,互不干扰,还可以很方便地扩展很多功能。例如我们每一个任务的执行结果和执行时长写入到数据库中,以便对作业进行监控和恢复。也可以对外提供REST服务,实时查询保存在状态中的RDD数据。
本发明以可配置的方式来描述任务之间的依赖关系,使得RDD可以在各个任务之间传递,或者在任务的前一个周期(迭代)和下一个周期之间进行,使其可以以模块化的方式来编写各个任务,可以充分利用面向对象语言的特性,提高软件开发的协同性和可维护性,具有更广泛的应用范围。
附图说明
图1为本发明的Spark作业调度系统中实现任务数据解耦的方法的流程图。
图2为本发明的Spark作业调度系统中实现任务数据解耦的方法的具体实施例的流程图。
图3为本发明的Spark作业调度系统中实现任务数据解耦的方法的具体实施例的流程图。
具体实施方式
为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
本技术主要就是为了解决作业中业务复杂的依赖关系,以可配置的方法来描述任务之间的依赖关系,以及在任务之间传递RDD,从而可以帮助开发者更高效地进行业务开发、维护、部署等工作。
在实际业务开发中,数据之间是互相依赖的,存在着极为复杂的关系,形成一个数据流,导致处理数据的任务之间也存在着错综复杂的依赖关系。
首先任务和任务之间有着依赖关系,例如在移动通讯中需要对通讯数据的分析。我们首先需要对抓取的信令进行补全(有些信令的关键数据是缺失的,要通过相关后续信令信息来填充这些缺失数据),然后对补全后的信令进行匹配;同时将补全信令数据和用户流量数据进行关联,进行KPI分析。
其次,相同任务之间也有依赖关系,即后一个时间段的任务会依赖前一个时间段该任务的数据(这有点类似于Spark流处理模块中的State)。例如我们会每五分钟对接受的信令数据进行处理,这其中也包括信令补全。但是因为时间的关系,最后一段时间内到达的信令可能没法补全,必须要将这些数据留存到下一个周期来处理。
传统模式下,对于这类复杂的作业调度,一般有以下三种解决方案
1、在一个类或一个方法中完成该作业的所有任务的代码实现,通过在程序中定义一个个非常具体的RDD变量名称,将这些RDD变量名传递到后续任务中。这样就导致一个类代码特别冗长,难以阅读理解。从本质上来讲这是面向过程的软件开发方法,没法充分利用java、scala等语言的面向对象的特性和优点。前期不利于团队成员之间的协作,后期也不利于进行维护。例如,因为业务的变化,需要在两个任务之间插入另外一个任务,这样就需要改动大量的代码,也非常容易出错。
2、将RDD数据写入到一个中间文件中,文件名按照一定规则来命名。后续任务通过加载指定文件来获取RDD数据。这样虽然将业务任务解耦合了,但是这种写文件的模式是MapReduce计算模型的用法,不能充分发挥Spark的基于内存计算的优势,对性能影响还是挺大的。尤其是在资源受限的Hadoop(海杜普,一个由Apache基金会所开发的分布式系统基础架构)集群下进行大数据计算所不能容忍的。
3、考虑使用已有的作业调度系统。例如,在Hadoop中有一个Oozie(一种Java Web应用程序)的作业调度系统,用于运行Hadoop Map/Reduce和Pig任务。Oozie工作流中拥有多个Action,如Hadoop Map/Reudce job,Hadoop Pig job等,所有的Action以有向无环图(DirectAcyclic Graph,DAG)的模式部署运行.所以在Action的运行步骤上是有方向的,只能上一个Action运行完成后才能运行下一个Action。Oozie工作流中包含控制工作流节点(control flownode)和Action节点(action node)。
但是Oozie只适用于MapReduce模型,如果想用于Spark的计算模型,需要进行大量的改造。另外Oozie比较复杂,学习曲线比较高。
基于上述情况,我们开发了Spark的作业调度系统,其采用如图1所示的Spark作业调度系统中实现任务数据解耦的方法,包括以下步骤:
(1)所述的Spark作业调度系统开始一个迭代周期,并创建该迭代周期的迭代状态对象;
(2)所述的Spark作业调度系统创建任务上下文对象实例、Spark任务对象实例和任务状态对象实例;
(3)所述的Spark作业调度系统通过所述的任务上下文对象实例读取所述的迭代状态对象的迭代RDD信息,并将所述的迭代RDD信息保存至任务上下文对象中;
(4)所述的Spark作业调度系统通过所述的Spark任务对象实例在所述的任务上下文对象中查找到对应的RDD信息,并将所对应的RDD信息保存至任务结果对象中;
(5)所述的Spark作业调度系统通过所述的任务状态对象实例分析所述的任务结果对象中的RDD信息,并将所对应的RDD信息分别保存至对应的状态对象中。
在一种优选的实施方式中,所述的步骤(1)和(2)之间,包括以下步骤:
(1.1)所述的Spark作业调度系统判断该迭代周期内的各个任务是否为没有前序任务依赖的任务或者是否为所有依赖任务都已经执行完成的任务;
(1.2)如果该任务为没有前序任务依赖的任务或者为所有依赖任务都已经执行完成的任务,则执行该任务,否则不执行该任务。
在一种优选的实施方式中,所述的将所对应的RDD信息分别保存至对应的状态对象中,具体为:
所述的Spark作业调度系统根据所述的配置信息中的RDD范围将所述的RDD信息分别保存至对应的状态对象中。
在一种优选的实施方式中,所述的步骤(1)之前,还包括以下步骤:
(0.1)所述的Spark作业调度系统创建全局上下文对象,并读取各个任务的配置信息;
(0.2)所述的Spark作业调度系统根据所述的各个任务的配置信息来构建有向无环图;
(0.3)所述的Spark作业调度系统创建全局状态对象实例。
在一种更优选的实施方式中,所述的步骤(1)和(2)之间,包括以下步骤:
(1.a)所述的Spark作业调度系统将该迭代周期的迭代状态对象保存至所述的全局状态对象实例中。
在一种更优选的实施方式中,所述的Spark作业调度系统通过所述的任务上下文对象实例读取所述的迭代状态对象的迭代RDD信息,具体为:
所述的Spark作业调度系统通过所述的任务上下文对象实例从所述的全局状态对象实例中读取所述的迭代状态对象的迭代RDD信息。
在一种更优选的实施方式中,所述的创建Spark任务对象实例,具体为:
所述的Spark作业调度系统根据所述的配置信息中的类名以及Java反射机制创建所述的Spark任务对象实例。
在一种优选的实施方式中,所述的步骤(5)之后,还包括以下步骤:
(6)所述的Spark作业调度系统判断该迭代周期内的所有任务是否均已执行完成,如果是则返回上述步骤(1),否则返回上述步骤(2)。
在实际运用中,如图2所示,为本发明的一个具体实施例,具体流程如下:
1:首先创建全局上下文对象,该对象会保存Spark运行时状态的上下文信息以及全局属性信息。这些属性信息可以由开发人员指定。
2:读取各个任务的配置信息
3:会根据这些任务配置信息来构建有向无环图,通过有向无环图可以分析出任务的依赖关系。
4:创建全局状态对象实例,该全局对象实例保存全局范围的RDD信息以及每个迭代周期的迭代状态对象。从而通过该对象实例可以遍历所有的状态对象,获取必要的RDD信息。
5:开始一个迭代周期,根据有向无环图的信息依次执行该周期内的任务。在该周期中,会顺序执行步骤6-步骤11
6:创建该迭代周期的迭代状态对象,该对象保存本迭代周期范围(scope)内迭代的RDD信息以及每个任务的任务状态对象。
7:选择可以执行的任务。选择的标准是没有前序任务依赖的任务或者是所有依赖任务都已经执行完成的任务。可以同时选择多个任务,框架可以控制个数。
8:创建任务上下文对象实例。将该任务所需的RDD信息从对应的状态对象中取出,并填充到哈希映射表中。
9:根据配置信息中指定的类名以及Java反射机制创建Spark任务对象实例
10:执行Spark任务对象实例中的“运行任务”方法,该方法是由开发人员来提供的,执行实际的业务逻辑,同时将生成的RDD保存到“任务结果”对象中,并且返回给框架
11:创建任务状态对象实例,分析“任务结果”对象中的RDD信息,将RDD信息保存到对应的状态对象中(由配置信息中的RDD范围来决定)
12:判断该迭代周期的所有任务是否都已经执行完成,如果都已经完成,则转到步骤5,开始一个新的迭代周期;否则,转到步骤7,继续本轮迭代周期的任务。
以下结合图3做进一步地说明:
作业调度系统充分地利用Spark的内存计算和迭代计算的优势,将单个的批处理组成一个连续的运行模式,使之支持7*24小时运行。这是一种类似于Spark stream的准实时处理,Spark stream处理的是秒级之间的连续的数据迭代处理,要保证很低的延迟。而我们的处理模型是以5分钟或者10分钟为一个计算周期,可以允许更长的延迟。在5分钟数据完毕以后(通常是以HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)形式保存的),对这5分钟的数据进行处理,处理完成后,会进行下一批次的5分钟数据的处理。
这样任务依赖可以分为两类,一种是不同任务之间的依赖,另外一种相同任务的不同周期的依赖,可以依赖前一个周期甚至是几个周期之前的数据。
这些依赖关系是可以配置的。配置是模块化的,即每个任务都可以有自己的配置文件,除了可配置框架特定的属性信息外,还可以从中定义该任务所需要的其它属性信息。配置信息是以Json(JavaScript Object Notation,javaScript对象表示法)形式表达的,直观自由灵活,易于理解。可以加入任何你想要的属性配置。
为了解决RDD在任务之间的传递,我们设计了上下文对象类—Context,根据任务的不同,分为TaskContext和JobContext两类。JobContext(即全局上下文对象类)是全局的,保存着全局的属性,只是在整个作业提交时创建一次,每个SparkTask任务都可以进行存取JobContext中的属性。TaskContext(即任务上下文对象类)是特定于某种任务,在执行任务时,框架会自动生成TaskContext对象,根据任务配置信息,将该任务所需要的RDD信息装载进生成的TaskContext对象中。
RDD对象也是分范围的,分为以下三种
1)Task:该范围表示RDD只能在本周期内传递。到了下一个处理周期,这些RDD信息不再有效;
2)Iteration:迭代周期,可以指定依赖的是前几个周期内的RDD;
3)Job:全局的,SparkTask可以在任何时间内获取该全局RDD;
为了提升Spark的处理性能,我们可以在配置RDD是否需要缓存以及缓存的等级,当这些RDD不再需要时,框架会自动将这些RDD从内存中释放出来。
为了实现最大的可扩展性,我们将状态和任务进行分离。状态也分为全局(job)、迭代周期(Iteration)、任务(Task),这些状态对象分别保存任务的依赖关系、RDD、任务当前状态、任务优先级、执行开始时间、结束时间、执行结果、是否有异常、当前正在执行的任务、一些特定的属性等。Spark任务本身是无状态的,但是它所需要的数据信息可以通过传递给它的TaskContext对象(即任务上下文对象)和Config对象(即配置对象)来获得,TaskContext提供的是动态数据,而Config提供的则是静态属性数据。任务由开发者来实现业务逻辑,状态则由框架自动维护。每个任务都有想对应的任务状态。这样可以不需要考虑多线程并发问题,同时也简化了编程模型。
在框架开始执行时,首先根据配置信息中的任务依赖关系,来创建有向无环图(DAG)。每个任务都会对应DAG的一个点。如果某个任务没有任何依赖关系,则该任务是DAG图中的顶点;如果该任务需要依赖上一个任务产生的RDD,就会在这两个点之间创建一条边,表示这两者之间有依赖关系。这条边是有方向的,该方向也是任务流动的方向,也即上个任务执行完后,才可以执行下一个任务。
有向无环图创建完后,框架首先选择图中的顶点来作为起始任务执行。框架通过配置信息中提供的任务类名,使用Java反射机制来创建“Spark任务”对象实例。框架还会创建对应的任务上下文对象。在构建任务上下文对象时,框架会根据有向无环图、配置信息以及状态对象,将特定的信息填充到上下文对象中,最重要的是RDD信息。例如如果这个任务依赖任务A的名为“taska”的RDD信息,则会根据全局“状态”对象遍历到对应任务A的“状态”对象。从该对象中取出名为“taska”的RDD信息,将其以键值对的形式保存到任务上下文对象中的一个哈希映射表(hashMap)中;如果是迭代周期范围的RDD信息,则会从对应“迭代状态”对象中获取RDD信息进行填充。框架还将全局上下文对象的引用赋值给任务上下文对象,从而可以获取全局的属性信息。“任务上下文”对象提供了一个“获取RDD”的方法,通过指定的名称就可以在哈希映射表中找到对应的RDD信息。
Spark任务接口中有“运行任务”(runTask)的方法,这个方法是要由开发者来进行代码开发的,完成具体的业务需求和大数据计算。框架在创建完“任务上下文”对象后,会执行“Spark任务”对象的“运行任务”方法,在执行时,会将任务上下文对象以及配置对象信息作为参数传递给该方法。因此,开发人员在进行业务代码开发时,可以先通过“任务上下文”对象的“获取RDD”来获取本任务所需要的RDD信息。在对这些RDD进行一系列复杂的转换操作后,会生成新的RDD。如果这些生成的RDD对象要被后续任务所用到,就可以将这些RDD保存到“任务结果”(TaskResult)对象中。“任务结果”对象中有一个哈希映射表(HashMap),以键值对形式来保存RDD信息。当任务运行完成后,框架会分析“任务结果”对象中的数据,将其中的RDD信息保存到不同范围内的“状态”对象中(例如如果指定的RDD范围为迭代周期,那么就将该RDD保存到“迭代状态”对象中)。这样任务和任务之间是解耦合的,我们不需要关心这些RDD是如何存储的,以及后续任务是如何获取这些RDD,这些都交给框架来处理。
当一个任务结束后,框架会根据有向无环图来决定是否可以启动下一个任务。如果有向无环图中该任务点所有边对应的任务都已经执行完,就表示这个任务可以启动了,否则的话,会继续等待,直到满足条件。如果任务可以启动,框架会创建“Spark任务”对象实例,从而执行另外一个业务任务。
如果该有向无环图中的所有点都被执行完,就表示该轮迭代已经完成,框架会继续进行下一轮任务的执行。
框架实现了流量控制机制。因为如果单位时间内处理的数据量过大,可能会造成CPU过载、IO(输入输出)等待、GC(垃圾回收)频率过快等问题,反而会影响任务的稳定性。同时我们还会根据数据流量大小调整运算速率,保证数据整体上都能得到处理,而不至于造成数据丢失。以五分钟为周期来迭代地进行数据处理,在数据高峰期因为数据量太大(或者某段时间内数据爆发是增长),这样无法在5分钟内完成,这时可以允许有一定的延迟。而在数据量不大时候,框架可以加快数据处理速度,从而把之前丢失的时间赶回来。为了加快任务的处理效率,框架可以支持多个周期任务同时运行,前提是前一个周期的任务没有同周期的任务和下一个周期任务的依赖。
实现上述功能的代码如下:
1)作业配置信息
2)作业基本信息配置
3)读取信令数据的任务配置
4)信令补全任务配置信息
5)KPI计算任务配置信息
6)信令补全任务代码
采用了本发明的Spark作业调度系统中实现任务数据解耦的方法,使用该技术使得任务之间的依赖关系配置大为简化,大家只需要关注自己的业务实现,协同开发能力大为增强。同时,系统的可维护性也得到大幅提高。本架构运用到公司的msa等多个项目,取得了较好的效果。
此外,由于状态和任务分离,架构本身和业务之间可以相互平行地开发,互不干扰,还可以很方便地扩展很多功能。例如我们可以把每一个任务的执行结果和执行时长写入到数据库中,以便对作业进行监控和恢复。也可以对外提供REST服务,实时查询保存在状态中的RDD数据。
本发明以可配置的方式来描述任务之间的依赖关系,使得RDD可以在各个任务之间传递,或者在任务的前一个周期(迭代)和下一个周期之间进行,使其可以以模块化的方式来编写各个任务,可以充分利用面向对象语言的特性,提高软件开发的协同性和可维护性,具有更广泛的应用范围。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
Claims (8)
1.一种Spark作业调度系统中实现任务数据解耦的方法,其特征在于,所述的方法包括以下步骤:
(1)所述的Spark作业调度系统开始一个迭代周期,并创建该迭代周期的迭代状态对象;
(2)所述的Spark作业调度系统创建任务上下文对象实例、Spark任务对象实例和任务状态对象实例;
(3)所述的Spark作业调度系统通过所述的任务上下文对象实例读取所述的迭代状态对象的迭代RDD信息,并将所述的迭代RDD信息保存至任务上下文对象中;
(4)所述的Spark作业调度系统通过所述的Spark任务对象实例在所述的任务上下文对象中查找到对应的RDD信息,并将所对应的RDD信息保存至任务结果对象中;
(5)所述的Spark作业调度系统通过所述的任务状态对象实例分析所述的任务结果对象中的RDD信息,并将所对应的RDD信息分别保存至对应的状态对象中。
2.根据权利要求1所述的Spark作业调度系统中实现任务数据解耦的方法,其特征在于,所述的步骤(1)和(2)之间,包括以下步骤:
(1.1)所述的Spark作业调度系统判断该迭代周期内的各个任务是否为没有前序任务依赖的任务或者是否为所有依赖任务都已经执行完成的任务;
(1.2)如果该任务为没有前序任务依赖的任务或者为所有依赖任务都已经执行完成的任务,则执行该任务,否则不执行该任务。
3.根据权利要求1所述的Spark作业调度系统中实现任务数据解耦的方法,其特征在于,所述的将所对应的RDD信息分别保存至对应的状态对象中,具体为:
所述的Spark作业调度系统根据所述的配置信息中的RDD范围将所述的RDD信息分别保存至对应的状态对象中。
4.根据权利要求1所述的Spark作业调度系统中实现任务数据解耦的方法,其特征在于,所述的步骤(1)之前,还包括以下步骤:
(0.1)所述的Spark作业调度系统创建全局上下文对象,并读取各个任务的配置信息;
(0.2)所述的Spark作业调度系统根据所述的各个任务的配置信息来构建有向无环图;
(0.3)所述的Spark作业调度系统创建全局状态对象实例。
5.根据权利要求4所述的Spark作业调度系统中实现任务数据解耦的方法,其特征在于,所述的步骤(1)和(2)之间,包括以下步骤:
(1.a)所述的Spark作业调度系统将该迭代周期的迭代状态对象保存至所述的全局状态对象实例中。
6.根据权利要求5所述的Spark作业调度系统中实现任务数据解耦的方法,其特征在于,所述的Spark作业调度系统通过所述的任务上下文对象实例读取所述的迭代状态对象的迭代RDD信息,具体为:
所述的Spark作业调度系统通过所述的任务上下文对象实例从所述的全局状态对象实例中读取所述的迭代状态对象的迭代RDD信息。
7.根据权利要求4所述的Spark作业调度系统中实现任务数据解耦的方法,其特征在于,所述的创建Spark任务对象实例,具体为:
所述的Spark作业调度系统根据所述的配置信息中的类名以及Java反射机制创建所述的Spark任务对象实例。
8.根据权利要求1所述的Spark作业调度系统中实现任务数据解耦的方法,其特征在于,所述的步骤(5)之后,还包括以下步骤:
(6)所述的Spark作业调度系统判断该迭代周期内的所有任务是否均已执行完成,如果是则返回上述步骤(1),否则返回上述步骤(2)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410658665.1A CN104360903B (zh) | 2014-11-18 | 2014-11-18 | Spark作业调度系统中实现任务数据解耦的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410658665.1A CN104360903B (zh) | 2014-11-18 | 2014-11-18 | Spark作业调度系统中实现任务数据解耦的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104360903A true CN104360903A (zh) | 2015-02-18 |
CN104360903B CN104360903B (zh) | 2017-10-31 |
Family
ID=52528167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410658665.1A Active CN104360903B (zh) | 2014-11-18 | 2014-11-18 | Spark作业调度系统中实现任务数据解耦的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104360903B (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105022670A (zh) * | 2015-07-17 | 2015-11-04 | 中国海洋大学 | 一种云计算平台中的异构分布式任务处理系统及其处理方法 |
CN105956021A (zh) * | 2016-04-22 | 2016-09-21 | 华中科技大学 | 一种适用于分布式机器学习的自动化任务并行的方法及其系统 |
CN106339458A (zh) * | 2016-08-26 | 2017-01-18 | 华为技术有限公司 | 一种基于弹性分布式数据集的Stage划分方法和终端 |
WO2017020637A1 (zh) * | 2015-08-05 | 2017-02-09 | 杭州海康威视数字技术股份有限公司 | 一种分布式数据计算的任务分配方法和任务分配装置 |
KR101722643B1 (ko) * | 2016-07-21 | 2017-04-05 | 한국과학기술정보연구원 | Rdd 관리 방법, rdd 관리 장치 및 rdd 관리 프로그램을 저장하는 저장매체 |
CN107038070A (zh) * | 2017-04-10 | 2017-08-11 | 郑州轻工业学院 | 一种云环境下执行可靠性感知的并行任务调度方法 |
CN107256158A (zh) * | 2017-06-07 | 2017-10-17 | 广州供电局有限公司 | 电力系统负荷削减量的检测方法和系统 |
US20170316094A1 (en) * | 2016-04-29 | 2017-11-02 | Sparkflows, Inc. | Browser based, pluggable, workflow driven big data pipelines and analytics system |
CN107463595A (zh) * | 2017-05-12 | 2017-12-12 | 中国科学院信息工程研究所 | 一种基于Spark的数据处理方法及系统 |
CN109408537A (zh) * | 2018-10-18 | 2019-03-01 | 网易(杭州)网络有限公司 | 基于Spark SQL的数据处理方法及装置、存储介质及计算设备 |
CN109471709A (zh) * | 2018-10-16 | 2019-03-15 | 深圳中顺易金融服务有限公司 | 基于Apache Oozie框架处理大数据的流程任务的调度方法 |
CN109636234A (zh) * | 2018-12-25 | 2019-04-16 | 江苏满运软件科技有限公司 | 任务频次转换方法、装置、电子设备、存储介质 |
CN109857817A (zh) * | 2019-01-18 | 2019-06-07 | 国网江苏省电力有限公司电力科学研究院 | 全网域电子式互感器高频度计量数据甄别及数据处理方法 |
CN110035103A (zh) * | 2018-01-12 | 2019-07-19 | 宁波中科集成电路设计中心有限公司 | 一种节点间数据可传递的分布式调度系统 |
CN110109747A (zh) * | 2019-05-21 | 2019-08-09 | 北京百度网讯科技有限公司 | 基于Apache Spark的数据交换方法及系统、服务器 |
CN110888725A (zh) * | 2019-11-21 | 2020-03-17 | 北京明略软件系统有限公司 | 任务管理方法、装置、可读存储介质及电子设备 |
US10649670B2 (en) | 2016-09-16 | 2020-05-12 | International Business Machines Corporation | Data block processing |
CN111443901A (zh) * | 2018-12-27 | 2020-07-24 | 北京奇虎科技有限公司 | 一种基于Java反射的业务扩展方法及装置 |
CN111666144A (zh) * | 2020-06-19 | 2020-09-15 | 中信银行股份有限公司 | 批处理任务执行方法、系统以及机房部署系统 |
CN112948096A (zh) * | 2021-04-07 | 2021-06-11 | 中国工商银行股份有限公司 | 一种批量调度方法、装置和设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050108250A1 (en) * | 2000-12-28 | 2005-05-19 | Microsoft Corporation | Stateless distributed computer architecture with server-oriented state-caching objects maintained on network or client |
US20070198571A1 (en) * | 2006-02-03 | 2007-08-23 | Ferguson John R | Data object access system and method using dedicated task object |
CN103399927A (zh) * | 2013-08-05 | 2013-11-20 | 百度在线网络技术(北京)有限公司 | 分布式计算方法和装置 |
CN103631730A (zh) * | 2013-11-01 | 2014-03-12 | 深圳清华大学研究院 | 内存计算的缓存优化方法 |
CN104008007A (zh) * | 2014-06-12 | 2014-08-27 | 深圳先进技术研究院 | 基于流式计算和批处理计算的互操作数据处理系统及方法 |
-
2014
- 2014-11-18 CN CN201410658665.1A patent/CN104360903B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050108250A1 (en) * | 2000-12-28 | 2005-05-19 | Microsoft Corporation | Stateless distributed computer architecture with server-oriented state-caching objects maintained on network or client |
US20070198571A1 (en) * | 2006-02-03 | 2007-08-23 | Ferguson John R | Data object access system and method using dedicated task object |
CN103399927A (zh) * | 2013-08-05 | 2013-11-20 | 百度在线网络技术(北京)有限公司 | 分布式计算方法和装置 |
CN103631730A (zh) * | 2013-11-01 | 2014-03-12 | 深圳清华大学研究院 | 内存计算的缓存优化方法 |
CN104008007A (zh) * | 2014-06-12 | 2014-08-27 | 深圳先进技术研究院 | 基于流式计算和批处理计算的互操作数据处理系统及方法 |
Cited By (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105022670A (zh) * | 2015-07-17 | 2015-11-04 | 中国海洋大学 | 一种云计算平台中的异构分布式任务处理系统及其处理方法 |
CN105022670B (zh) * | 2015-07-17 | 2018-03-13 | 中国海洋大学 | 一种云计算平台中的异构分布式任务处理系统及其处理方法 |
WO2017020637A1 (zh) * | 2015-08-05 | 2017-02-09 | 杭州海康威视数字技术股份有限公司 | 一种分布式数据计算的任务分配方法和任务分配装置 |
CN106445676A (zh) * | 2015-08-05 | 2017-02-22 | 杭州海康威视系统技术有限公司 | 一种分布式数据计算的任务分配方法和任务分配装置 |
US11182211B2 (en) | 2015-08-05 | 2021-11-23 | Hangzhou Hikvision Digital Technology Co., Ltd | Task allocation method and task allocation apparatus for distributed data calculation |
CN106445676B (zh) * | 2015-08-05 | 2019-10-22 | 杭州海康威视系统技术有限公司 | 一种分布式数据计算的任务分配方法和任务分配装置 |
CN105956021B (zh) * | 2016-04-22 | 2019-05-21 | 华中科技大学 | 一种适用于分布式机器学习的自动化任务并行的方法及其系统 |
CN105956021A (zh) * | 2016-04-22 | 2016-09-21 | 华中科技大学 | 一种适用于分布式机器学习的自动化任务并行的方法及其系统 |
US20170316094A1 (en) * | 2016-04-29 | 2017-11-02 | Sparkflows, Inc. | Browser based, pluggable, workflow driven big data pipelines and analytics system |
KR101722643B1 (ko) * | 2016-07-21 | 2017-04-05 | 한국과학기술정보연구원 | Rdd 관리 방법, rdd 관리 장치 및 rdd 관리 프로그램을 저장하는 저장매체 |
CN106339458A (zh) * | 2016-08-26 | 2017-01-18 | 华为技术有限公司 | 一种基于弹性分布式数据集的Stage划分方法和终端 |
CN106339458B (zh) * | 2016-08-26 | 2020-01-21 | 华为技术有限公司 | 一种基于弹性分布式数据集的Stage划分方法和终端 |
US10649670B2 (en) | 2016-09-16 | 2020-05-12 | International Business Machines Corporation | Data block processing |
CN107038070A (zh) * | 2017-04-10 | 2017-08-11 | 郑州轻工业学院 | 一种云环境下执行可靠性感知的并行任务调度方法 |
CN107038070B (zh) * | 2017-04-10 | 2021-04-16 | 郑州轻工业学院 | 一种云环境下执行可靠性感知的并行任务调度方法 |
CN107463595A (zh) * | 2017-05-12 | 2017-12-12 | 中国科学院信息工程研究所 | 一种基于Spark的数据处理方法及系统 |
CN107256158B (zh) * | 2017-06-07 | 2021-06-18 | 广州供电局有限公司 | 电力系统负荷削减量的检测方法和系统 |
CN107256158A (zh) * | 2017-06-07 | 2017-10-17 | 广州供电局有限公司 | 电力系统负荷削减量的检测方法和系统 |
CN110035103A (zh) * | 2018-01-12 | 2019-07-19 | 宁波中科集成电路设计中心有限公司 | 一种节点间数据可传递的分布式调度系统 |
CN109471709A (zh) * | 2018-10-16 | 2019-03-15 | 深圳中顺易金融服务有限公司 | 基于Apache Oozie框架处理大数据的流程任务的调度方法 |
CN109408537A (zh) * | 2018-10-18 | 2019-03-01 | 网易(杭州)网络有限公司 | 基于Spark SQL的数据处理方法及装置、存储介质及计算设备 |
CN109636234A (zh) * | 2018-12-25 | 2019-04-16 | 江苏满运软件科技有限公司 | 任务频次转换方法、装置、电子设备、存储介质 |
CN111443901B (zh) * | 2018-12-27 | 2024-02-09 | 三六零科技集团有限公司 | 一种基于Java反射的业务扩展方法及装置 |
CN111443901A (zh) * | 2018-12-27 | 2020-07-24 | 北京奇虎科技有限公司 | 一种基于Java反射的业务扩展方法及装置 |
CN109857817A (zh) * | 2019-01-18 | 2019-06-07 | 国网江苏省电力有限公司电力科学研究院 | 全网域电子式互感器高频度计量数据甄别及数据处理方法 |
CN110109747A (zh) * | 2019-05-21 | 2019-08-09 | 北京百度网讯科技有限公司 | 基于Apache Spark的数据交换方法及系统、服务器 |
CN110888725A (zh) * | 2019-11-21 | 2020-03-17 | 北京明略软件系统有限公司 | 任务管理方法、装置、可读存储介质及电子设备 |
CN111666144A (zh) * | 2020-06-19 | 2020-09-15 | 中信银行股份有限公司 | 批处理任务执行方法、系统以及机房部署系统 |
CN112948096A (zh) * | 2021-04-07 | 2021-06-11 | 中国工商银行股份有限公司 | 一种批量调度方法、装置和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104360903B (zh) | 2017-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104360903A (zh) | Spark作业调度系统中实现任务数据解耦的方法 | |
Artikis et al. | Heterogeneous Stream Processing and Crowdsourcing for Urban Traffic Management. | |
EP3229150B1 (en) | Streaming graph optimization method and apparatus | |
US11314808B2 (en) | Hybrid flows containing a continous flow | |
US10579349B2 (en) | Verification of a dataflow representation of a program through static type-checking | |
CN109447276B (zh) | 一种机器学习系统、设备及应用方法 | |
US10509683B2 (en) | Modeling resource usage for a job | |
CN106681820B (zh) | 基于消息组合的可扩展大数据计算方法 | |
US10956417B2 (en) | Dynamic operation scheduling for distributed data processing | |
DE102020108374A1 (de) | Verfahren und vorrichtung zur laufzeitmehrfachplanung von software, die in einem heterogenen system ausgeführt wird | |
US20210049453A1 (en) | Chip and chip-based data processing method | |
CN107111505B (zh) | 用于在并行异构系统上执行算法的系统和方法 | |
JP6892424B2 (ja) | ハイパーパラメータチューニング方法、装置及びプログラム | |
Maleki et al. | A hybrid approach of firefly and genetic algorithms in software cost estimation | |
CN111708641A (zh) | 一种内存管理方法、装置、设备及计算机可读存储介质 | |
CN106293947B (zh) | 虚拟化云环境下gpu-cpu混合资源分配系统和方法 | |
CN102103519A (zh) | 一种基于脚本的Web服务执行优化方法 | |
CN105183485A (zh) | 一种可视化软硬件协同开发方法 | |
CN110377769B (zh) | 基于图数据结构的建模平台系统、方法、服务器及介质 | |
WO2023231526A1 (zh) | 基于数字孪生DaaS平台的算法仓库管理方法及系统 | |
US10417228B2 (en) | Apparatus and method for analytical optimization through computational pushdown | |
CN116582407A (zh) | 一种基于深度强化学习的容器化微服务编排系统及方法 | |
US20230116546A1 (en) | Method for compilation, electronic device and storage medium | |
Xu et al. | EdgeWorkflow: One click to test and deploy your workflow applications to the edge | |
US20230068947A1 (en) | Systems and methods for processing inter-dependent data for risk modelling and analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20160311 Address after: 100086 Beijing city Haidian District Zhongguancun academy road section Information Center No. 2 B block 8 layer Applicant after: BEIJING CERTUSNET INFORMATION TECHNOLOGY CO., LTD. Address before: 100052, Beijing, Xuanwu, Xicheng District, No. 1015, 10 square Avenue, central office building, north wing, room 10 Applicant before: BEIJING MEIQI HUAYUE COMMUNICATION TECHNOLOGY CO., LTD. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |