CN108255619A - 一种数据处理方法及装置 - Google Patents

一种数据处理方法及装置 Download PDF

Info

Publication number
CN108255619A
CN108255619A CN201711455415.8A CN201711455415A CN108255619A CN 108255619 A CN108255619 A CN 108255619A CN 201711455415 A CN201711455415 A CN 201711455415A CN 108255619 A CN108255619 A CN 108255619A
Authority
CN
China
Prior art keywords
spark
container
driver
resource allocation
allocation request
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
Application number
CN201711455415.8A
Other languages
English (en)
Other versions
CN108255619B (zh
Inventor
赵英超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Big Data Technologies Co Ltd
Original Assignee
New H3C Big Data Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by New H3C Big Data Technologies Co Ltd filed Critical New H3C Big Data Technologies Co Ltd
Priority to CN201711455415.8A priority Critical patent/CN108255619B/zh
Publication of CN108255619A publication Critical patent/CN108255619A/zh
Application granted granted Critical
Publication of CN108255619B publication Critical patent/CN108255619B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供一种数据处理方法及装置,所述方法包括:启动完成后,根据共享内存层中保存的Spark Context初始化数据向资源管理者RM发送资源分配请求;接收所述RM响应所述资源分配请求分配的容器,并分别指示各容器所属节点的节点管理者NM在所分配的容器中启动执行器;为各执行器分配任务,并对所述执行器中执行的任务进行监控,将任务执行得到的数据保存至所述共享内存层。应用本发明可以提高Spark on YARN集群的处理性能,避免性能瓶颈的产生,降低对运行Spark Driver的服务器的硬件配置的需求。

Description

一种数据处理方法及装置
技术领域
本发明涉及大数据技术领域,尤其涉及一种数据处理方法及装置。
背景技术
Spark是一种基于内存并行计算框架的分布式批处理系统和分析挖掘引擎,通过将大量数据集计算任务分配到多台计算机上,提供高效内存计算。
Spark应用程序(Application)运行在Spark Driver(驱动)上。Spark Drive启动时,会创建Spark Context(上下文),并配置Spark Context,进而初始化Spark Context。
完成Spark Context初始化后,Spark Drive会将应用程序转化为task,并向cluster manager(集群管理者)(如YARN(Yet Another Resource Negotiator,另一种资源协调者))申请资源运行Executor(执行者),按照预设策略将task分配给各Executor执行。其中,各Executor均会向Spark Drive注册,进而Spark Drive可以监控Executor中task的执行情况。
目前,以YRAN作为cluster manager运行的Spark(可以称为Spark On Yarn)主要包括YARN-Client(客户端)和YARN-Cluster两种模式。
YARN-cluster模式下作业执行流程:
1、Spark client(或称为Spark YARN client)向Resource Manager(资源管理者,简称RM)提交应用程序;
2、RM收到应用程序后,在集群中选择一个Node Manager(节点管理者,简称NM),为该应用程序分配一个Container(容器),要求NM在这个Container中启动应用程序的Application Master(AM);
3、NM接收到RM的分配指令,在指定的Container中启动AM;AM启动后,会启动SparkDriver;
4、Spark Driver启动时,会进行Spark Context的初始化;
5、Spark Driver向RM注册,并采用轮询的方式通过RPC(Remote Procedure Call,远程过程调用)协议为各个task申请资源(Container);
6、Spark Driver申请到资源(即Container)后,在对应的Container中启动Executor;其中,Executor启动后,可以向Spark Driver注册;
7、Spark Driver分配task给Executor执行;Executor运行task,并向SparkDriver汇报运行的状态和进度;
8、应用程序运行完成后,AM向RM申请注销并关闭。
然而实现发现,在现有YARN-cluster实现方案中,仅有一个Spark Driver处于工作状态,导致Spark On YARN集群处理性能较低,容易出现性能瓶颈。
发明内容
本发明提供一种数据处理方法及装置,以解决现有YARN-Cluster模式的Spark onYARN集群处理性能较差,且容易出现性能瓶颈的问题。
根据本发明实施例的第一方面,提供一种数据处理方法,应用于包括多于一个Spark Driver的YARN-Cluster模式的Spark on YARN集群中的任一Spark Driver,所述方法包括:
启动完成后,根据共享内存层中保存的Spark Context初始化数据向资源管理者RM发送资源分配请求;
接收所述RM响应所述资源分配请求分配的容器,并分别指示各容器所属节点的节点管理者NM在所分配的容器中启动执行器;
为各执行器分配任务,并对所述执行器中执行的任务进行监控,将任务执行得到的数据保存至所述共享内存层。
根据本发明实施例的第二方面,提供一种数据处理方法,应用于包括多于一个Spark Driver的YARN-Cluster模式的Spark on YARN集群中的RM,所述方法包括:
接收Spark客户端提交的应用程序;
为所述应用程序分配用于启动AM的容器,并指示该容器所属节点的节点管理者NM在该容器中启动AM;
接收所述AM发送的资源分配请求,并响应该资源分配请求为所述AM分配多于一个的容器,以使所述AM分别指示各容器所属节点的NM在各容器中启动Spark驱动Driver;
接收每个Spark Driver发送的资源分配请求,并响应该资源分配请求为每个所述Spark Driver分配容器;其中,所述资源分配请求由所述每个Spark Driver在启动后根据共享内存层中的Spark Context初始化数据向所述RM发起。
根据本发明实施例的第三方面,提供一种数据处理装置,应用于包括多于一个Spark Driver的YARN-Cluster模式的Spark on YARN集群中的任一Spark Driver,所述装置包括:
发送单元,用于当所述Spark Driver启动完成后,根据共享内存层中保存的SparkContext初始化数据向资源管理者RM发送资源分配请求;
接收单元,用于接收所述RM响应所述资源分配请求分配的容器;
处理单元,用于分别指示各容器所属节点的节点管理者NM在所分配的容器中启动执行器;
所述处理单元,还用于为各执行器分配任务,并对所述执行器中执行的任务进行监控,将任务执行得到的数据保存至所述共享内存层。
根据本发明实施例的第四三方面,提供一种数据处理装置,应用于包括多于一个Spark Driver的YARN-Cluster模式的Spark on YARN集群中的RM,所述装置包括:
接收单元,用于接收Spark客户端提交的应用程序;
处理单元,用于为所述应用程序分配用于启动AM的容器,并指示该容器所属节点的节点管理者NM在该容器中启动AM;
所述接收单元,用于接收所述AM发送的资源分配请求;
所述处理单元,还用于响应该资源分配请求为所述AM分配多于一个的容器,以使所述AM分别指示各容器所属节点的NM在各容器中启动Spark驱动Driver;
所述接收单元,还用于接收每个Spark Driver发送的资源分配请求;
所述处理单元,还用于响应该资源分配请求为每个所述Spark Driver分配容器;其中,所述资源分配请求由所述每个Spark Driver在启动后根据共享内存层中的SparkContext初始化数据向所述RM发起。
应用本发明实施例,通过使用共享内存层存储数据,Spark Driver启动完成后,根据共享内存层中保存的Spark Context初始化数据向RM发送资源分配请求,当接收到RM响应所述资源分配请求分配的容器,分别指示各容器所属节点的NM在所分配的容器中启动执行器,并分别为各执行器分配任务,进而,对执行器中执行的任务进行监控,并将任务执行得到的数据保存至共享内存层,提高了Spark on YARN集群的处理性能,避免了性能瓶颈的产生,降低了对运行Spark Driver的服务器的硬件配置的需求。
附图说明
图1是本发明实施例提供的一种Spark on YARN集群的架构示意图;
图2是本发明实施例提供的一种数据处理方法的流程示意图;
图3是本发明实施例提供的一种数据处理方法的流程示意图;
图4是本发明实施例提供的一种数据处理装置的结构示意图;
图5是本发明实施例提供的另一种数据处理装置的结构示意图;
图6是本发明实施例提供的另一种数据处理装置的结构示意图;
图7是本发明实施例提供的一种数据处理装置的硬件结构示意图;
图8是本发明实施例提供的一种数据处理装置的结构示意图;
图9是本发明实施例提供的一种数据处理装置的硬件结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明实施例中的技术方案,下面先对Spark中的部分术语进行简单说明。
1、Application:多次批量计算组合起来的过程,在物理上可以表现为用户编写的程序包+部署配置;
2、RDD(Resilient Distributed Datasets,弹性分布式数据集):spark在执行分布式计算时的一批相同来源、相同结构、相同用途的数据集,这个数据集可能被切割成多个分区(Partition),分布在不同的物体节点上。在编程时,RDD对象就对应了这个数据集,并且RDD对象被当作一个数据操作的基本单位。比如,对某个RDD对象进行map(映射)操作,其实就相当于将数据集中的每个分区的每一条数据进行了map操作;
3、Partition:一个RDD在物理上被切割成多个数据子集,分布在不同的物理节点上,每个数据子集叫一个分区;
4、RDD Graph(图):RDD组成的DAG(Directed Acyclic Graph,有向无环图)。RDD是不可变的,一个RDD经过某种操作后,会生成一个新的RDD。一个Application中的程序,其内容主要是对各种RDD的操作,从源RDD,经过各种计算,产生中间RDD,最后生成用户需求的RDD(即结果RDD)并输出。这个过程中的各个RDD,会构成一个有向无环图;
5、Lineage(血统):RDD本身包含了“由哪个父类RDD经过哪种操作得到”的信息。因此,某个RDD可以通过不断寻找父类,找到最原始的RDD,这条继承路径就认为是RDD的血统;
6、Job(工作):Application在被spark集群运行前,会生成一个或多个RDD Graph结构;而一个RDD Graph,又可以生成一个或多个Job。一个Job可以会最终输出一个结果RDD;
7、Stage(步骤):Stage可以理解为完成一个Job的不同阶段。一个Job被划分为多个Stage,每个Stage又包含了对多个RDD的多个操作;
8、算子:父子RDD间的操作;
9、task:在一个Stage范围内,Executor所要执行的算子;
10、taskset(任务集):一个Stage范围内,所有相同的task被称为一个taskset;
11、DAGScheduler(DAG调度程序):DAGScheduler用于根据RDD DAG切分Stage,并维护各个Stage的先后依赖关系;
12、TasksetManager(任务集管理者):管理一个TaskSet,并决定该TaskSet中各个task的分发策略;
13、TaskScheduler(任务调度程序):执行实际的task分发操作。
下面再对Spark Context初始化过程进行简单说明。
Spark Driver的初始化始终围绕着Spark Context的初始化,Spark Context初始化完毕,才能向Spark集群提交任务。
SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数。
初始化后,就可以使用SparkContext对象所包含的各种方法来创建和操作RDD和共享变量。
Spark Context初始化包括以下步骤:
1、创建Spark执行环境SparkEnv;
SparkEnv是Spark的执行环境对象,其中包括众多与Executor执行相关的对象。
2、创建RDD清理器;
SparkContext为了保持对所有持久化的RDD的跟踪,需要对持久化RDD进行缓存,RDD清理器的功能是清除过期的持久化RDD。
3、创建并初始化SparkUI(用户界面);
用于提供浏览器能访问的具有样式及布局,并提供丰富监控数据的页面。SparkUI为Spark监控Web平台提供了Spark环境、任务的整个生命周期的监控。
4、Hadoop相关配置及Executor环境变量的设置;
默认情况下,Spark使用HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)作为分布式文件系统,因此,需要获取Hadoop相关配置信息;
5、创建任务调度TaskScheduler;
TaskScheduler是Spark Context的重要组成部分,负责任务的提交,并且请求集群管理器对任务调度。
6、创建和启动DAGScheduler;
DAGScheduler为高级的、基于stage的调度器,为提交给它的job计算stage,将stage作为tasksets提交给底层调度器TaskScheduler执行;DAGScheduler还会决定着stage的最优运行位置。
7、TaskScheduler的启动;
8、初始化块管理器(块管理器是存储体系的主要组件之一);
9、启动测量系统;
10、创建和启动Executor分配管理器;
11、ContextCleaner的创建与启动;
12、Spark环境更新;
13、创建DAGSchedulerSource和BlockManagerSource;
14、将SparkContext标记为激活。
其中,Spark Context初始化之后,Spark Driver向Spark集群提交任务的主要流程为:Driver向Master或者资源管理器申请资源,之后将应用转化为RDD Graph,再由DAGScheduler将RDD Graph转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor执行。
为了使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。
请参见图1,为本发明实施例提供的一种YARN-cluster模式的Spark on YARN集群(以下简称为Spark on YARN集群)的架构示意图,如图1所示,该Spark on YARN集群包括:Zookeeper集群、RM、多个NM;其中:
RM接收到Spark客户端提交的应用程序时,为该应用程序分配用于启动AM的容器(Container),并在该Container中启动AM。
AM启动之后,向RM发送资源分配请求,以请求用于启动Spark Driver的多于一个的Container;RM接收到AM发送的资源分配请求时,为AM分配多于一个的Container,由AM分别在各Container中启动Spark Driver。
首个Spark Driver启动时,进行Spark Context初始化,并将Spark Context初始化数据保存至共享内存层;
各Spark Driver(包括首个启动的Spark Driver和非首个启动的Spark Driver)启动完成后,可以读取共享内存层中保存的Spark Context初始化数据,并根据共享内存层中保存的Spark Context初始化数据向RM发送资源分配请求,以请求用于启动Executor的多个Container;RM接收到Spark Driver发送的资源分配请求时,为Spark Driver分配多个Container,由Spark Driver分别在各Container中启动Executor;
Executor启动后,Spark Driver可以根据Spark Context初始化数据分别为各Executor分配任务,并对Executor中执行的任务进行监控,将任务执行得到的数据保存至所述内存共享层。
其中,Spark Driver启动时,还可以向Zookeeper注册,由Zookeeper监测各SparkDriver的可用性;Zookeeper监测到Spark Driver不可用时,Zookeeper向AM发送通知报文(通知AM该Spark Driver不可用),由AM按照预设策略指示已启动的其它可用Spark Driver或启动新的Spark Driver替代该异常Spark Driver进行任务分配和监控。
可见,在本发明实施例中,对于Spark客户端提交的应用程序,可以在Spark onYARN集群中启动多于一个Spark Driver用于进行任务分配、监控以及数据管理,提高了Spark on YARN集群的处理性能,避免了性能瓶颈的产生;此外,通过使用共享内存层存储Spark Context初始化数据以及任务执行数据,降低了对运行Spark Driver的服务器的硬件配置需求。
请参见图2,为本发明实施例提供的一种数据处理方法的流程示意图,其中,该数据处理方法可以应用于图1中的RM,如图2所示,该数据处理方法可以包括:
步骤201、接收Spark客户端提交的应用程序。
本发明实施例中,Spark客户端提交的应用程序可以包括AM、启动AM的命令、需要在Executor中运行的程序(也可以称为用户程序)等。
步骤202、为应用程序分配用于启动AM的容器,并指示该容器所属节点的NM在该容器中启动AM。
本发明实施例中,RM接收到Spark客户端提交的应用程序时,可以为该应用程序分配一个用于启动AM的Container,并向该Container所属节点的NM发送Container启动命令,该Container启动命令中携带有所分配的Container的标识(如令牌);NM接收到该Container启动命令时,会对其中携带的Container的令牌进行合法性校验,并当校验通过后,启动Container。
NM启动Container之后,RM可以将AM和启动AM的命令发送给该NM,由该NM根据该AM和启动AM的命令在所启动的Container中启动AM。
步骤203、接收AM发送的资源分配请求,并响应该资源分配请求为AM分配多于一个的容器,以使AM分别指示各容器所属节点的NM在各容器中启动Spark Driver。
本发明实施例中,AM启动之后,可以向RM发送资源分配请求,以请求RM分配用于启动Spark Driver的Container。
RM接收到AM发送的资源分配请求时,可以为AM分配Container。AM接收到RM分配的Container时,可以向Container所属节点的NM发送Container启动命令;NM接收到Container启动命令时,可以对其中携带的Container的令牌进行合法性校验,并当校验通过后,启动该Container。
NM启动Container之后,AM可以向NM发送Spark Driver启动命令,由NM根据该Spark Driver启动命令在所启动的容器中启动Spark Driver。
其中,AM可以向RM申请多于一个的Container,以便能够启动多于一个SparkDrive;启动的Spark Driver的数量可以预先配置。
优选地,上述多于一个Spark Driver对应的Container可以分别归属于不同的节点。
其中,Spark Driver启动的处理流程可以参见图3所示方法流程中的相关描述,本发明实施例在此不做赘述。
步骤204、接收每个Spark Driver发送的资源分配请求,并响应该资源分配请求为每个Spark Driver分配容器。
本发明实施例中,Spark Driver向RM发送资源分配请求的具体实现可以参见图3所示方法流程中的相关描述,本发明实施例在此不做赘述。
本发明实施例中,RM接收到Spark Driver发送的资源分配请求时,可以为SparkDriver分配用于启动Executor的Container。
Spark Driver接收到RM分配的Container时,可以向Container所属节点的NM发送Container启动命令;NM接收到Container启动命令时,可以对其中携带的Container的令牌进行合法性校验,并当校验通过后,启动该Container。
NM启动Container之后,Spark Driver可以向NM发送Executor启动命令,由NM根据该Executor启动命令在所启动的容器中启动Executor。
其中,Spark Driver向RM发送的资源分配请求中可以携带需要启动的Executor的数量(如num-executors),RM接收到该资源分配请求时,可以在资源充足的情况下,根据资源分配请求中携带的Executor的数量为Spark Driver分配等量的Container。
需要说明的是,当Spark Driver未限定需要启动的Executor的数量时,RM可以为Spark Driver分配默认数量的Container,该默认数量通常会比较少。
本发明实施例中,RM为Spark Driver分配Container之后,Spark Driver可以在所分配的Container中启动Executor,并分别为各Executor分配任务,其具体实现可以参见图3所示方法流程中的相关描述,本发明实施例在此不做赘述。
请参见图3,为本发明实施例提供的一种数据处理方法的流程示意图,其中,该数据处理方法可以应用于任一Spark Driver,如图3所示,该数据处理方法可以包括:
步骤301、启动完成后,根据共享内存层中保存的Spark Context初始化数据向RM发送资源分配请求。
本发明实施例中,RM启动AM,以及AM启动Spark Driver的具体实现可以参见图2所示方法实施例中的相关描述,本发明实施例在此不再赘述。
本发明实施例中,为了提高Spark on YARN集群的处理性能,并避免性能瓶颈的产生,对于Spark客户端提交的任一应用程序,可以启动多于一个Spark Driver进行任务的分配、监控以及数据管理。
此外,为了降低对运行Spark Driver的服务器的硬件配置需求,可以使用共享内存层进行数据存储,各Spark Driver均可以对共享内存层中的数据进行操作。
在本发明其中一个实施例中,上述数据处理方法还可以包括:
当Spark Driver为首个启动的Spark Driver时,进行Spark Context初始化,将Spark Context初始化数据保存至共享内存层。
在该实施例中,当Spark Driver启动时,可以判断自身是否为首个启动的SparkDriver,若是,则进行Spark Context初始化,并将Spark Context初始化数据保存至共享内存层;否则,即Spark Driver不是首个启动的Spark Driver时,直接根据共享内存层中保存的Spark Context初始化数据进行相关处理。
本发明实施例中,Spark Context初始化数据可以包括但不限于任务信息、各Spark Driver需要调度的任务,以及需要启动的Executor数量等信息。
具体地,在本发明实施例中,Spark Driver进行Spark Context初始化时,可以将Spark客户端提交的应用程序中包括的用户程序转化为Executor执行的任务,并确定各Spark Driver需要调度的任务以及需要启动的Executor数量等信息,并将其保存至共享内存层。
在本发明其中一个实施例中,Spark Driver可以通过以下方式确定是否为首个启动的Spark Driver:
启动后,且确定共享内存层中不存在Spark Context初始化数据时,确定自身为首个启动的Spark Driver;
启动后,且确定共享内存层中存在Spark Context初始化数据时,确定自身为非首个启动的Spark Driver。
在该实施例中,Spark Driver启动后,Spark Driver可以查询共享内存层中是否保存有Spark Context初始化数据;若是,则确定自身为非首个启动的Spark Driver,进而,Spark Driver可以直接根据共享内存层中保存的Spark Context初始化数据进行后续处理;否则,确定自身为首个启动的Spark Driver,进而,进行Spark Context初始化,并将Spark Context初始化数据保存至共享内存层。
本发明实施例中,每个Spark Driver启动完成后(包括首个启动的Spark Driver和非首个启动的Spark Driver),均可以根据共享内存层中保存的Spark Context初始化数据确定自身需要调度的任务,以及需要启动的Executor数量,进而,每个Spark Driver均可以向RM发送资源分配请求,以请求RM分配用于启动Executor的Container。
为了达到上述目的,在本发明实施例中,Spark Context中可以配置各SparkDriver需要调度的任务,以及需要启动的Executor数量等信息。
其中,RM为Spark Driver分配用于启动Executor的Container的具体实现可以参见图2所示方法流程中的相关描述,本发明实施例在此不再赘述。
步骤302、接收RM响应资源分配请求分配的容器,并分别指示各容器所属节点的NM在所分配的容器中启动执行器。
本发明实施例中,RM为Spark Driver分配用于启动Executor的Container之后,可以向Container所属节点的NM发送Container启动命令;NM接收到Container启动命令时,可以对其中携带的Container的令牌进行合法性校验,并当校验通过后,启动该Container。
NM启动Container之后,Spark Driver可以向NM发送Executor启动命令,由NM根据该Executor启动命令在所启动的容器中启动Executor。
步骤303、分别为各执行器分配任务,并对执行器中执行的任务进行监控,将任务执行得到的数据保存至共享内存层。
本发明实施例中,Spark Driver启动Executor之后,可以分别为各Executor分配任务,并对执行器中执行的任务进行监控。
本发明实施例中,所有Spark Driver启动完成时,在根据共享内存层中保存的Spark Context初始化数据确定需要自身进行调度的任务之后,可以在Executor启动后,对共享内存层中保存的相关任务进行调度。
其中,Spark Driver在进行任务调度时,可以定时将自身的任务调度进度保存到共享内存层。
此外,在Executor执行任务的过程中,Spark Driver可以拉取任务执行得到的数据,并将其保存至共享内存层。
其中,Spark Driver将应用程序转化为task的具体实现,以及Spark Driver对任务执行得到的数据的进行拉取的具体实现可以参见现有Spark on YARN方案中的相关实现,本发明实施例在此不做赘述。
可见,在本发明实施例中,对于Spark客户端提交的应用程序,可以在Spark onYARN集群中启动多于一个Spark Driver用于进行任务分配、监控以及数据管理,提高了Spark on YARN集群的处理性能,避免了性能瓶颈的产生;此外,通过使用共享内存层存储Spark Context初始化数据以及任务执行数据,降低了对运行Spark Driver的服务器的硬件配置需求。
进一步地,在本发明其中一个实施例中,上述数据处理方法还可以包括:
启动时,向Zookeeper注册,以使Zookeeper在确定存在Spark Driver异常时,向AM发送通知报文,由AM按照预设策略通知其它已启动的Spark Driver或启动新的SparkDriver替代该异常Spark Driver进行任务分配和监控。
在该实施例中,Spark Driver启动时,可以向Zookeeper注册,从而,Zookeeper可以对各Spark Driver的可用性进行监测。
当Zookeeper监测到某Spark Driver异常时,Zookeeper可以向AM发送通知报文,由AM按照预设策略从其它已启动的Spark Driver(可用Spark Driver)中选择一个SparkDriver替代该异常Spark Driver进行任务分配和监控;或者,启动一个新的Spark Driver替代该Spark Driver进行任务分配和监控。
该被选择用于替代异常Spark Driver的已启动的Spark Driver或新启动的SparkDriver可以根据共享内存层中存储的异常Spark Driver需要调度的任务信息,以及异常Spark Driver的任务调度进度信息,替代该异常Spark Driver进行任务分配和监控,并对该异常Spark Driver保存在共享内存层中的数据进行管理。
在该实施例中,当Spark Driver发生异常时,该Spark Driver启动的Executor运行不会终止,而是由替代该异常Spark Driver的Spark Driver重新从上一次RDD运行,从而,避免了Spark Driver异常导致的Executor运行中断,提高了Spark on YARN集群的可靠性。
在本发明其中一个实施例中,上述共享内存层为Alluxio共享内存层。
在该实施例中,通过Alluxio(一个基于内存的分布式文件系统)系统架构对共享内存层中的数据进行管理,Spark on YARN集群中各Spark Driver可以作为Allulxio系统架构中的client对共享内存层中存储的数据进行操作,其具体实现可以参见现有Alluxio技术中的相关描述,本发明实施例在此不做赘述。
应该认识到,在本发明实施例中,通过Alluxio系统架构对共享内存层中的元数据进行管理仅仅是本发明实施例中对共享内存层中的元数据进行管理的一种具体示例,而不是对本发明保护范围的限定,即在本发明实施例中,也可以通过其它方式对共享内存层中的元数据进行管理,例如,上述共享内存层也可以为Redis共享内存层,即通过Redis(一种开源数据库)系统架构对共享内存层中的元数据进行管理,其具体实现在此不做赘述。
进一步地,在本发明实施例中,当内存共享层出现内存不足的情况时,如剩余内存低于预设容量阈值,或内存使用比例超过预设比例阈值等,共享内存层可以根据预先配置的策略,对指定数据进行本地文件持久化处理,而不加载至内存,以节省内存空间。
例如,可以将最近一次更新的时间与当前系统时间的差值超过预设时间阈值的数据以文件的形式保存至服务器的磁盘中。
通过以上描述可以看出,在本发明实施例提供的技术方案中,通过使用共享内存层存储数据,Spark Driver启动完成后,根据共享内存层中保存的Spark Context初始化数据向RM发送资源分配请求,当接收到RM响应所述资源分配请求分配的容器,分别指示各容器所属节点的NM在所分配的容器中启动执行器,并分别为各执行器分配任务,进而,对执行器中执行的任务进行监控,并将任务执行得到的数据保存至共享内存层,提高了Spark onYARN集群的处理性能,避免了性能瓶颈的产生,降低了对运行Spark Driver的服务器的硬件配置的需求。
请参见图4,为本发明实施例提供的一种数据处理装置的结构示意图,其中,所述装置可以应用于上述方法实施例中的任一Spark Driver,如图4所示,该数据处理置可以包括:
发送单元410,用于当所述Spark Driver启动完成后,根据共享内存层中保存的Spark Context初始化数据向RM发送资源分配请求;
接收单元420,用于接收所述RM响应所述资源分配请求分配的容器;
处理单元430,用于分别指示各容器所属节点的NM在所分配的容器中启动执行器;
所述处理单元430,还用于为各执行器分配任务,并对所述执行器中执行的任务进行监控,将任务执行得到的数据保存至所述共享内存层。
请一并参见图5,为本发明实施例提供的另一种数据处理装置的结构示意图,如图5所示,在图4所示数据处理装置的基础上,图5所示的数据处理装置还可以包括:
确定单元440,用于确定所述Spark Driver是否为首个启动的Spark Driver;
所述处理单元430,还用于当所述Spark Driver为首个启动的Spark Driver时,进行Spark上下文Context初始化,将Spark Context初始化数据保存至共享内存层。
在可选实施例中,所述确定单元440,具体用于当所述Spark Driver启动后,且确定共享内存层中不存在Spark Context初始化数据时,确定自身为首个启动的SparkDriver;当所述Spark Driver启动后,且确定共享内存层中存在Spark Context初始化数据时,确定自身为非首个启动的Spark Driver。
请一并参见图6,为本发明实施例提供的另一种数据处理装置的结构示意图,如图6所示,在图4所示数据处理装置的基础上,图6所示的数据处理装置还可以包括:
注册单元450,用于当所述Spark Driver启动时,向Zookeeper注册,以使所述Zookeeper在确定存在Spark Driver异常时,向AM发送通知报文,由AM按照预设策略通知其它已启动的Spark Driver或启动新的Spark Driver替代该异常Spark Driver进行任务分配和监控。
图7为本公开示例提供的一种数据处理装置的硬件结构示意图。该数据处理装置可包括处理器701、存储有机器可执行指令的机器可读存储介质702。处理器701与机器可读存储介质702可经由系统总线703通信。并且,通过读取并执行机器可读存储介质702中与数据处理逻辑对应的机器可执行指令,处理器701可执行图3所示的数据处理方法。
本文中提到的机器可读存储介质702可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
请参见图8,为本发明实施例提供的一种数据处理装置的结构示意图,其中,所述装置可以应用于上述方法实施例中的RM,如图8所示,该数据处理置可以包括:
接收单元810,用于接收Spark客户端提交的应用程序;
处理单元820,用于为所述应用程序分配用于启动AM的容器,并指示该容器所属节点的节点管理者NM在该容器中启动AM;
所述接收单元810,用于接收所述AM发送的资源分配请求;
所述处理单元820,还用于响应该资源分配请求为所述AM分配多于一个的容器,以使所述AM分别指示各容器所属节点的NM在各容器中启动Spark驱动Driver;
所述接收单元810,还用于接收每个Spark Driver发送的资源分配请求;
所述处理单元820,还用于响应该资源分配请求为每个所述Spark Driver分配容器;其中,所述资源分配请求由所述每个Spark Driver在启动后根据共享内存层中的SparkContext初始化数据向所述RM发起。
在可选实施例中,所述应用程序包括AM以及启动AM的命令;
相应地,所述处理单元830,具体用于为所述应用程序分配一个用于启动AM的容器,并向容器所属节点的NM发送容器启动命令,以使该NM根据该容器启动命令中携带的容器的令牌对容器进行合法性校验,并当校验通过后,启动容器;将所述AM和启动AM的命令发送给该NM,以使该NM该AM和启动AM的命令在所启动的容器中启动AM。
在可选实施例中,所述处理单元830,具体用于根据该资源分配请求中携带的执行器的数量,为所述Spark Driver分配等量的容器。
图9为本公开示例提供的一种数据处理装置的硬件结构示意图。该数据处理装置可包括处理器901、存储有机器可执行指令的机器可读存储介质902。处理器901与机器可读存储介质902可经由系统总线903通信。并且,通过读取并执行机器可读存储介质902中与数据处理逻辑对应的机器可执行指令,处理器901可执行图2所示的数据处理方法。
本文中提到的机器可读存储介质902可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM、易失存储器、非易失性存储器、闪存、存储驱动器、固态硬盘、任何类型的存储盘,或者类似的存储介质,或者它们的组合。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
由上述实施例可见,通过使用共享内存层存储数据,Spark Driver启动完成后,根据共享内存层中保存的Spark Context初始化数据向RM发送资源分配请求,当接收到RM响应所述资源分配请求分配的容器,分别指示各容器所属节点的NM在所分配的容器中启动执行器,并分别为各执行器分配任务,进而,对执行器中执行的任务进行监控,并将任务执行得到的数据保存至共享内存层,提高了Spark on YARN集群的处理性能,避免了性能瓶颈的产生,降低了对运行Spark Driver的服务器的硬件配置的需求。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

Claims (14)

1.一种数据处理方法,其特征在于,应用于包括多于一个Spark驱动Driver的另一种资源协调者YARN-集群Cluster模式的Spark on YARN集群中的任一Spark Driver,所述方法包括:
启动完成后,根据共享内存层中保存的Spark Context初始化数据向资源管理者RM发送资源分配请求;
接收所述RM响应所述资源分配请求分配的容器,并分别指示各容器所属节点的节点管理者NM在所分配的容器中启动执行器;
为各执行器分配任务,并对所述执行器中执行的任务进行监控,将任务执行得到的数据保存至所述共享内存层。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述Spark Driver为首个启动的Spark Driver时,进行Spark上下文Context初始化,将Spark Context初始化数据保存至共享内存层。
3.根据权利要求2所述的方法,其特征在于,确定是否为首个启动的Spark Driver,包括:
启动后,且确定共享内存层中不存在Spark Context初始化数据时,确定自身为首个启动的Spark Driver;
启动后,且确定共享内存层中存在Spark Context初始化数据时,确定自身为非首个启动的Spark Driver。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
启动时,向Zookeeper注册,以使所述Zookeeper在确定存在Spark Driver异常时,向AM发送通知报文,由AM按照预设策略通知其它已启动的Spark Driver或启动新的SparkDriver替代该异常Spark Driver进行任务分配和监控。
5.一种数据处理方法,其特征在于,应用于包括多于一个Spark驱动Driver的另一种资源协调者YARN-集群Cluster模式的Spark on YARN集群中的资源管理者RM,所述方法包括:
接收Spark客户端提交的应用程序;
为所述应用程序分配用于启动AM的容器,并指示该容器所属节点的节点管理者NM在该容器中启动AM;
接收所述AM发送的资源分配请求,并响应该资源分配请求为所述AM分配多于一个的容器,以使所述AM分别指示各容器所属节点的NM在各容器中启动Spark驱动Driver;
接收每个Spark Driver发送的资源分配请求,并响应该资源分配请求为每个所述Spark Driver分配容器;其中,所述资源分配请求由所述每个Spark Driver在启动后根据共享内存层中的Spark Context初始化数据向所述RM发起。
6.根据权利要求5所述的方法,其特征在于,所述应用程序包括AM以及启动AM的命令;
所述为所述应用程序分配用于启动AM的容器,并指示该容器所属节点的节点管理者NM在该容器中启动AM,包括:
为所述应用程序分配一个用于启动AM的容器,并向容器所属节点的NM发送容器启动命令,以使该NM根据该容器启动命令中携带的容器的令牌对容器进行合法性校验,并当校验通过后,启动容器;
将所述AM和启动AM的命令发送给该NM,以使该NM该AM和启动AM的命令在所启动的容器中启动AM。
7.根据权利要求5所述的方法,其特征在于,所述响应该资源分配请求为所述SparkDriver分配容器,包括:
根据该资源分配请求中携带的执行器的数量,为所述Spark Driver分配等量的容器。
8.一种数据处理装置,其特征在于,应用于包括多于一个Spark驱动Driver的另一种资源协调者YARN-集群Cluster模式的Spark on YARN集群中的任一Spark Driver,所述装置包括:
发送单元,用于当所述Spark Driver启动完成后,根据共享内存层中保存的SparkContext初始化数据向资源管理者RM发送资源分配请求;
接收单元,用于接收所述RM响应所述资源分配请求分配的容器;
处理单元,用于分别指示各容器所属节点的节点管理者NM在所分配的容器中启动执行器;
所述处理单元,还用于为各执行器分配任务,并对所述执行器中执行的任务进行监控,将任务执行得到的数据保存至所述共享内存层。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
确定单元,用于确定所述Spark Driver是否为首个启动的Spark Driver;
所述处理单元,还用于当所述Spark Driver为首个启动的Spark Driver时,进行Spark上下文Context初始化,将Spark Context初始化数据保存至共享内存层。
10.根据权利要求9所述的装置,其特征在于,
所述确定单元,具体用于当所述Spark Driver启动后,且确定共享内存层中不存在Spark Context初始化数据时,确定自身为首个启动的Spark Driver;当所述Spark Driver启动后,且确定共享内存层中存在Spark Context初始化数据时,确定自身为非首个启动的Spark Driver。
11.根据权利要求8所述的装置,其特征在于,所述装置还包括:
注册单元,用于当所述Spark Driver启动时,向Zookeeper注册,以使所述Zookeeper在确定存在Spark Driver异常时,向AM发送通知报文,由AM按照预设策略通知其它已启动的Spark Driver或启动新的Spark Driver替代该异常Spark Driver进行任务分配和监控。
12.一种数据处理方法,其特征在于,应用于包括多于一个Spark驱动Driver的另一种资源协调者YARN-集群Cluster模式的Spark on YARN集群中的资源管理者RM,所述装置包括:
接收单元,用于接收Spark客户端提交的应用程序;
处理单元,用于为所述应用程序分配用于启动AM的容器,并指示该容器所属节点的节点管理者NM在该容器中启动AM;
所述接收单元,用于接收所述AM发送的资源分配请求;
所述处理单元,还用于响应该资源分配请求为所述AM分配多于一个的容器,以使所述AM分别指示各容器所属节点的NM在各容器中启动Spark驱动Driver;
所述接收单元,还用于接收每个Spark Driver发送的资源分配请求;
所述处理单元,还用于响应该资源分配请求为每个所述Spark Driver分配容器;其中,所述资源分配请求由所述每个Spark Driver在启动后根据共享内存层中的Spark Context初始化数据向所述RM发起。
13.根据权利要求12所述的装置,其特征在于,所述应用程序包括AM以及启动AM的命令;
所述处理单元,具体用于为所述应用程序分配一个用于启动AM的容器,并向容器所属节点的NM发送容器启动命令,以使该NM根据该容器启动命令中携带的容器的令牌对容器进行合法性校验,并当校验通过后,启动容器;将所述AM和启动AM的命令发送给该NM,以使该NM该AM和启动AM的命令在所启动的容器中启动AM。
14.根据权利要求12所述的装置,其特征在于,
所述处理单元,具体用于根据该资源分配请求中携带的执行器的数量,为所述SparkDriver分配等量的容器。
CN201711455415.8A 2017-12-28 2017-12-28 一种数据处理方法及装置 Active CN108255619B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711455415.8A CN108255619B (zh) 2017-12-28 2017-12-28 一种数据处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711455415.8A CN108255619B (zh) 2017-12-28 2017-12-28 一种数据处理方法及装置

Publications (2)

Publication Number Publication Date
CN108255619A true CN108255619A (zh) 2018-07-06
CN108255619B CN108255619B (zh) 2019-09-17

Family

ID=62723205

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711455415.8A Active CN108255619B (zh) 2017-12-28 2017-12-28 一种数据处理方法及装置

Country Status (1)

Country Link
CN (1) CN108255619B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408537A (zh) * 2018-10-18 2019-03-01 网易(杭州)网络有限公司 基于Spark SQL的数据处理方法及装置、存储介质及计算设备
CN110362401A (zh) * 2019-06-20 2019-10-22 深圳壹账通智能科技有限公司 数据跑批方法、装置、存储介质及集群中的成员主机
CN110597634A (zh) * 2019-09-12 2019-12-20 腾讯科技(深圳)有限公司 一种数据处理方法、装置及计算机可读存储介质
CN110647395A (zh) * 2019-08-30 2020-01-03 联想(北京)有限公司 一种任务处理方法及系统、装置、计算机存储介质
CN110659131A (zh) * 2019-08-15 2020-01-07 中国平安人寿保险股份有限公司 任务处理方法、电子装置、计算机设备及存储介质
CN110750579A (zh) * 2019-10-21 2020-02-04 浪潮云信息技术有限公司 一种云数据库Redis的高效内存分布方法及系统
CN111400299A (zh) * 2020-06-04 2020-07-10 成都四方伟业软件股份有限公司 一种多种数据融合质量检验的方法及系统
CN112016832A (zh) * 2020-08-28 2020-12-01 南京华盾电力信息安全测评有限公司 一种电厂数据处理方法、系统及存储介质
CN112486501A (zh) * 2020-11-17 2021-03-12 中国人寿保险股份有限公司 一种Spark应用部署管理方法及相关设备
CN113407331A (zh) * 2020-03-17 2021-09-17 腾讯科技(深圳)有限公司 一种任务处理的方法、装置及存储介质
CN114969149A (zh) * 2022-05-06 2022-08-30 北京偶数科技有限公司 数据资源的处理方法、装置以及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488775A (zh) * 2013-09-29 2014-01-01 中国科学院信息工程研究所 一种用于大数据处理的计算系统及计算方法
CN104731595A (zh) * 2015-03-26 2015-06-24 江苏物联网研究发展中心 面向大数据分析的混合计算系统
US20160092476A1 (en) * 2014-09-26 2016-03-31 Oracle International Corporation Declarative external data source importation, exportation, and metadata reflection utilizing http and hdfs protocols

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488775A (zh) * 2013-09-29 2014-01-01 中国科学院信息工程研究所 一种用于大数据处理的计算系统及计算方法
US20160092476A1 (en) * 2014-09-26 2016-03-31 Oracle International Corporation Declarative external data source importation, exportation, and metadata reflection utilizing http and hdfs protocols
CN104731595A (zh) * 2015-03-26 2015-06-24 江苏物联网研究发展中心 面向大数据分析的混合计算系统

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408537A (zh) * 2018-10-18 2019-03-01 网易(杭州)网络有限公司 基于Spark SQL的数据处理方法及装置、存储介质及计算设备
CN110362401A (zh) * 2019-06-20 2019-10-22 深圳壹账通智能科技有限公司 数据跑批方法、装置、存储介质及集群中的成员主机
CN110659131A (zh) * 2019-08-15 2020-01-07 中国平安人寿保险股份有限公司 任务处理方法、电子装置、计算机设备及存储介质
CN110659131B (zh) * 2019-08-15 2024-04-02 中国平安人寿保险股份有限公司 任务处理方法、电子装置、计算机设备及存储介质
CN110647395A (zh) * 2019-08-30 2020-01-03 联想(北京)有限公司 一种任务处理方法及系统、装置、计算机存储介质
CN110597634A (zh) * 2019-09-12 2019-12-20 腾讯科技(深圳)有限公司 一种数据处理方法、装置及计算机可读存储介质
CN110750579A (zh) * 2019-10-21 2020-02-04 浪潮云信息技术有限公司 一种云数据库Redis的高效内存分布方法及系统
CN113407331A (zh) * 2020-03-17 2021-09-17 腾讯科技(深圳)有限公司 一种任务处理的方法、装置及存储介质
CN111400299A (zh) * 2020-06-04 2020-07-10 成都四方伟业软件股份有限公司 一种多种数据融合质量检验的方法及系统
CN112016832A (zh) * 2020-08-28 2020-12-01 南京华盾电力信息安全测评有限公司 一种电厂数据处理方法、系统及存储介质
CN112486501A (zh) * 2020-11-17 2021-03-12 中国人寿保险股份有限公司 一种Spark应用部署管理方法及相关设备
CN114969149A (zh) * 2022-05-06 2022-08-30 北京偶数科技有限公司 数据资源的处理方法、装置以及存储介质
CN114969149B (zh) * 2022-05-06 2024-04-30 北京偶数科技有限公司 数据资源的处理方法、装置以及存储介质

Also Published As

Publication number Publication date
CN108255619B (zh) 2019-09-17

Similar Documents

Publication Publication Date Title
CN108255619B (zh) 一种数据处理方法及装置
US10931599B2 (en) Automated failure recovery of subsystems in a management system
Rao et al. A distributed self-learning approach for elastic provisioning of virtualized cloud resources
Warneke et al. Exploiting dynamic resource allocation for efficient parallel data processing in the cloud
JP2021518018A (ja) 関数チェックポイントを使用したサービスハブのための関数移植性
Amalarethinam et al. An Overview of the scheduling policies and algorithms in Grid Computing
WO2016040699A1 (en) Computing instance launch time
WO2021208844A1 (zh) 虚拟化容器管理方法、系统和存储介质
CN113672352A (zh) 一种基于容器部署联邦学习任务的方法及装置
KR20190028210A (ko) 컨테이너 기반 인공지능 어플리케이션을 배포하는 클라우드 서비스 방법과 시스템
CN113434283B (zh) 服务调度方法及装置、服务器、计算机可读存储介质
GB2564863A (en) Containerized application platform
CN110622146B (zh) 设备因子图可编程合成机制
US10469329B1 (en) Computing service capacity management
WO2022108672A1 (en) Tuning large data infrastructures
EP3803590A1 (en) Dynamic compute resource assignment and scalable computing environment generation for live environments
Funari et al. Storage-saving scheduling policies for clusters running containers
KR102002246B1 (ko) 빅데이터 처리를 위한 자원 분배 방법 및 장치
US20230289648A1 (en) Generating validated quantum function invocations
CN114598700B (zh) 通信方法及通信系统
US7159012B2 (en) Computational data processing system and computational process implemented by means of such a system
CN112540858B (zh) 任务处理方法、服务器、客户端及系统
Monteiro et al. Task scheduling with makespan minimization for distributed machine learning ensembles
Senger et al. Hierarchical scheduling of independent tasks with shared files
CN110730959A (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
GR01 Patent grant
GR01 Patent grant