CN110347489B - 一种基于Spark的多中心数据协同计算的流处理方法 - Google Patents

一种基于Spark的多中心数据协同计算的流处理方法 Download PDF

Info

Publication number
CN110347489B
CN110347489B CN201910629253.8A CN201910629253A CN110347489B CN 110347489 B CN110347489 B CN 110347489B CN 201910629253 A CN201910629253 A CN 201910629253A CN 110347489 B CN110347489 B CN 110347489B
Authority
CN
China
Prior art keywords
task
computing
client
resource
thread
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.)
Active
Application number
CN201910629253.8A
Other languages
English (en)
Other versions
CN110347489A (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.)
Zhejiang Lab
Original Assignee
Zhejiang Lab
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 Zhejiang Lab filed Critical Zhejiang Lab
Priority to CN201910629253.8A priority Critical patent/CN110347489B/zh
Publication of CN110347489A publication Critical patent/CN110347489A/zh
Priority to JP2021533418A priority patent/JP6990802B1/ja
Priority to PCT/CN2020/083593 priority patent/WO2020233262A1/zh
Application granted granted Critical
Publication of CN110347489B publication Critical patent/CN110347489B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Multi Processors (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种基于Spark的多中心数据协同计算的流处理方法,多个客户端生成和提交用户的计算任务请求给计算端,计算端解析请求,生成并执行计算指令;本发明对于多中心的数据计算的需求和操作的执行流处理计算,提高程序执行性能和资源分配效率;设置资源管理的日志和RESTFul,准确调控记录来自多中心的Spark请求任务所占用和需求的内存和线程资源;利用最大最小公平原则的策略,执行对流计算中每一步的资源分配;本发明解决了多中心数据协同计算的大批量的线程阻塞延迟问题,减少单个用户的等待时间,提升资源分配的灵活性和公平程度。

Description

一种基于Spark的多中心数据协同计算的流处理方法
技术领域
本发明属于流处理技术领域,尤其涉及一种基于Spark的多中心数据协同计算的流处理方法。
背景技术
流处理技术(Stream Processing)是一种计算机编程范式,也可以叫做数据流编程或者交互式编程,是一种让计算应用在有限的并行处理模式下获得更高效使用效率的技术。这一类型的技术应用可以在多种运算单元上存在,比如图形运算单元(GraphicProcessing Unit,GPU)或者可编程阵列门电路(Field-programmable Gate Arrays,FPGA),并且不显式的管理内存分配,同步和单元之间的交流。Spark streaming是Spark核心API的一个扩展,它对实时流式数据的处理具有可扩展性、高吞吐量、可容错性等特点。主要提供的接口为上下文创建StreamingContext,流开始start,流结束stop,缓存cache,Checkpointing等。
多中心数据协同计算是大数据背景下出现的应用场景,多方数据中心需要统筹数据资源以及数据处理的需求,以求为各个单体用户提供更易用和强大的数据处理平台资源。单个个体用户可以选择将自己的数据资源和多方的数据资源整合进行集中分析,同时可以选择多种运算需求,在多中心背景下进行并行计算。
现有的多中心协同分析平台大多为实质上的单中心,即将多方数据库缓存到同一处数据节点,再将多种分析需求逐个进行处理,实际上等价于将所有并发默认到一个流上进行,这种方式会导致大批量的线程阻塞延迟,每个批在队列中的等待时间增加,新加入用户的计算需求很难得到即时的反馈和满足,数据实时性也难以保持。
发明内容
本发明的目的在于针对现有技术的不足,提供一种基于Spark的多中心数据协同计算的流处理方法,本发明通过资源管理日志和Spark的流计算实现对多中心数据协同计算的流处理化,将流处理的资源分配优势和多中心化的异质化计算需求进行耦合,提高多中心协同计算的资源分配公平性和数据分析效率,降低计算队列任务等待时间。
本发明的目的是通过以下技术方案来实现的:一种基于Spark的多中心数据协同计算的流处理方法,该方法在多中心数据协同计算系统上实现,所述多中心数据协同计算系统包括若干客户端和一个计算端,所述客户端用于生成和提交用户的计算任务请求给计算端,所述计算端用于解析请求,生成并执行计算指令;该方法包括以下步骤:
(1)在客户端和计算端建立RESTFul服务,记计算任务队列为Q=[(ck,tk,ntk,nmk,Dk)],1≤k≤L,L为计算任务队列Q的长度,任意一个客户端ck向计算端发起一个新的计算任务请求tk,该请求包括计算的线程资源需求ntk、计算内存的需求nmk、对应此任务的待计算数据Dk
(2)计算端解析客户端ck发送的计算任务请求,得到(ck,tk,ntk,nmk,Dk);
(3)计算端将(ck,tk,ntk,nmk,Dk)作为一个元素插入计算任务队列Q,之后发起Scheduling计算,在Scheduling计算中任务队列Q各个元素的计算需求取值按照客户端为单位的最大最小原则进行优化,更新每个元素的ntk和nmk
(4)计算队列Q的长度len(Q)=L,以L为循环边界条件,用Spark.StreamingContext(Spark.StreamingContext为Spark框架下的流处理任务创建指令接口)创建L个流,并用Spark.Conf(Spark.Conf为Spark框架下的流处理任务配置指令接口)声明分配给各个流的资源;对于依次向Spark发起实际的流任务,载入数据Dk,对数据执行计算任务tk,分配的线程资源为ntk,内存资源为nmk;其中,如果Dk中存在中间结果和计算任务元数据,则直接从其对应的步骤开始计算任务。
流1:载入数据D1,对数据执行计算任务t1,分配的线程资源为nt1,内存资源为nm1
流2:载入数据D2,对数据执行计算任务t2,分配的线程资源为nt2,内存资源为nm2
流L:载入数据DL,对数据执行计算任务tL,分配的线程资源为ntL,内存资源为nmL
(5)对于已经在流处理的任务(cl,tl,ntl,nml,Dl),利用StreamingContext.CheckPointing(StreamingContext.CheckPointing为Spark框架下的流处理任务数据持久化指令接口)在流处理过程中的数据读取至HDFS、数据预处理缓存、计算、返回这四个步骤中执行数据流持久化操作,保存中间结果和计算任务元数据至Dl;同时监听队列的更新状况,如果监听到队列更新,则利用StreamingContext.stop(StreamingContext.stop为Spark框架下的流处理任务中止指令接口)停止该流,返回步骤(4);如果完成了流处理过程中的计算任务,则向该流处理任务对应的客户端返回任务处理结果,并将任务从队列Q弹出。
进一步地,所述步骤(3)中,基于客户端的Scheduling计算流程如下:
(3.1)对于队列Q=[(ck,tk,ntk,nmk,Dk)],1≤k≤L,L为计算队列Q的长度,如果客户端存在多条记录,先按照客户端进行求和,得到以客户端为单位的新队列
Figure BDA0002128207690000021
Lmid为Qmid长度,sj为每个客户端发起的任务总数,
Figure BDA0002128207690000022
分别为客户端cj请求的线程资源总数和内存资源总数;
(3.2)对于线程资源,执行如下优化分配流程:
(3.2.1)对于所有客户端的线程资源请求总数队列
Figure BDA0002128207690000031
按大小进行排序得到
Figure BDA0002128207690000032
和下标映射
Figure BDA00021282076900000325
记计算中心计算资源池的总线程资源为NT,则预给
Figure BDA0002128207690000033
的资源为
Figure BDA0002128207690000034
(3.2.2)如果存在
Figure BDA0002128207690000035
记这个集合为
Figure BDA0002128207690000036
进入步骤(3.2.3);否则输出最终的线程资源分配策略
Figure BDA0002128207690000037
利用下标映射得到对应恢复排序前顺序的线程资源分配策略
Figure BDA0002128207690000038
进入步骤(3.2.4);
(3.2.3)需要重新分配的线程资源为
Figure BDA0002128207690000039
其中|J|为J的元素个数,返回步骤(3.2.2);
(3.2.4)将同一个客户端所分配到的线程资源平均分配给该客户端所对应的所有任务,对于同一cj对应任务Tj={tz|1≤z≤sj},
Figure BDA00021282076900000310
其中
Figure BDA00021282076900000311
为用户cj实际提交的一个任务tz所分配到的线程资源,
Figure BDA00021282076900000312
为(3.2.2)得到的该用户分配到的所有线程资源,sj为用户cj发起的任务总数。
(3.3)对于内存资源,执行如下优化分配流程:
(3.3.1)对于所有客户端的内存资源请求总数队列
Figure BDA00021282076900000313
按大小进行排序得到
Figure BDA00021282076900000314
和下标映射
Figure BDA00021282076900000326
记计算中心计算资源池的总内存资源为NM,则预给
Figure BDA00021282076900000315
的资源为
Figure BDA00021282076900000316
(3.3.2)如果存在
Figure BDA00021282076900000317
记这个集合为
Figure BDA00021282076900000318
进入步骤(3.2.3);否则输出最终的内存资源分配策略
Figure BDA00021282076900000319
利用下标映射得到对应恢复排序前顺序的内存资源分配策略
Figure BDA00021282076900000320
进入步骤(3.2.4);
(3.3.3)需要重新分配的内存资源为
Figure BDA00021282076900000321
其中|J|为J的元素个数,返回步骤(3.3.2);
(3.3.4)将同一个客户端所分配到的内存资源平均分配给该客户端所对应的所有任务,对于同一cj对应任务Tj={tz|1≤z≤sj},
Figure BDA00021282076900000322
其中
Figure BDA00021282076900000323
为用户cj实际提交的一个任务tz所分配到的内存资源,
Figure BDA00021282076900000324
为(3.2.2)得到的该用户分配到的所有内存资源,sj为用户cj发起的任务总数。
(3.4)从(3.2)和(3.3)中得到的[ntk]和[nmk],重新组成Q=[(ck,tk,ntk,nmk,Dk)]。
本发明的有益效果是:本发明对于多中心的数据计算的需求和操作的执行流处理计算,提高程序执行性能和资源分配效率;设置资源管理的日志和RESTFul,准确调控记录来自多中心的Spark请求任务所占用和需求的内存和线程资源;利用最大最小公平原则的策略,执行对流计算中每一步的资源分配;本发明解决了多中心数据协同计算的大批量的线程阻塞延迟问题,减少单个用户的等待时间,提升资源分配的灵活性和公平程度。
附图说明
图1为本发明中心协同计算流处理方法流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
如图1所示,本发明提供的一种基于Spark的多中心数据协同计算的流处理方法,该方法在多中心数据协同计算系统上实现,所述多中心数据协同计算系统包括若干客户端和一个计算端,所述客户端用于生成和提交用户的计算任务请求给计算端,所述计算端用于解析请求,生成并执行计算指令;该方法包括以下步骤:
(1)在客户端和计算端建立RESTFul服务,记计算任务队列为Q=[(ck,tk,ntk,nmk,Dk)],1≤k≤L,L为计算任务队列Q的长度,任意一个客户端ck向计算端发起一个新的计算任务请求tk,该请求包括计算的线程资源需求ntk、计算内存的需求nmk、对应此任务的待计算数据Dk
(2)计算端解析客户端ck发送的计算任务请求,得到(ck,tk,ntk,nmk,Dk);
(3)计算端将(ck,tk,ntk,nmk,Dk)作为一个元素插入计算任务队列Q,之后发起Scheduling计算,在Scheduling计算中任务队列Q各个元素的计算需求取值按照客户端为单位的最大最小原则进行优化,更新每个元素的ntk和nmk
(4)计算队列Q的长度len(Q)=L,以L为循环边界条件,用Spark.StreamingContext(Spark.StreamingContext为Spark框架下的流处理任务创建指令接口)创建L个流,并用Spark.Conf(Spark.Conf为Spark框架下的流处理任务配置指令接口)声明分配给各个流的资源;对于依次向Spark发起实际的流任务,载入数据Dk,对数据执行计算任务tk,分配的线程资源为ntk,内存资源为nmk;其中,如果Dk中存在中间结果和计算任务元数据,则直接从其对应的步骤开始计算任务。
流1:载入数据D1,对数据执行计算任务t1,分配的线程资源为nt1,内存资源为nm1
流2:载入数据D2,对数据执行计算任务t2,分配的线程资源为nt2,内存资源为nm2
流L:载入数据DL,对数据执行计算任务tL,分配的线程资源为ntL,内存资源为nmL
(5)对于已经在流处理的任务(cl,tl,ntl,nml,Dl),利用StreamingContext.CheckPointing(StreamingContext.CheckPointing为Spark框架下的流处理任务数据持久化指令接口)在流处理过程中的数据读取至HDFS、数据预处理缓存、计算、返回这四个步骤中执行数据流持久化操作,保存中间结果和计算任务元数据至Dl;同时监听队列的更新状况,如果监听到队列更新,则利用StreamingContext.stop(StreamingContext.stop为Spark框架下的流处理任务中止指令接口)停止该流,返回步骤(4);如果完成了流处理过程中的计算任务,则向该流处理任务对应的客户端返回任务处理结果,并将任务从队列Q弹出。
进一步地,所述步骤(3)中,基于客户端的Scheduling计算流程如下:
(3.1)对于队列Q=[(ck,tk,ntk,nmk,Dk)],1≤k≤L,L为计算队列Q的长度,如果客户端存在多条记录,先按照客户端进行求和,得到以客户端为单位的新队列
Figure BDA0002128207690000051
Lmid为Qmid长度,sj为每个客户端发起的任务总数,
Figure BDA0002128207690000052
分别为客户端cj请求的线程资源总数和内存资源总数;
(3.2)对于线程资源,执行如下优化分配流程:
(3.2.1)对于所有客户端的线程资源请求总数队列
Figure BDA0002128207690000053
按大小进行排序得到
Figure BDA0002128207690000054
和下标映射
Figure BDA0002128207690000055
记计算中心计算资源池的总线程资源为NT,则预给
Figure BDA0002128207690000056
的资源为
Figure BDA0002128207690000057
(3.2.2)如果存在
Figure BDA0002128207690000058
记这个集合为
Figure BDA0002128207690000059
进入步骤(3.2.3);否则输出最终的线程资源分配策略
Figure BDA00021282076900000510
利用下标映射得到对应恢复排序前顺序的线程资源分配策略
Figure BDA00021282076900000511
进入步骤(3.2.4);
(3.2.3)需要重新分配的线程资源为
Figure BDA00021282076900000512
其中|J|为J的元素个数,返回步骤(3.2.2);
(3.2.4)将同一个客户端所分配到的线程资源平均分配给该客户端所对应的所有任务,对于同一cj对应任务Tj={tz|1≤z≤sj},
Figure BDA00021282076900000513
其中
Figure BDA00021282076900000514
为用户cj实际提交的一个任务tz所分配到的线程资源,
Figure BDA00021282076900000515
为(3.2.2)得到的该用户分配到的所有线程资源,sj为用户cj发起的任务总数。
(3.3)对于内存资源,执行如下优化分配流程:
(3.3.1)对于所有客户端的内存资源请求总数队列
Figure BDA00021282076900000516
按大小进行排序得到
Figure BDA00021282076900000517
和下标映射
Figure BDA00021282076900000518
记计算中心计算资源池的总内存资源为NM,则预给
Figure BDA00021282076900000519
的资源为
Figure BDA00021282076900000520
(3.3.2)如果存在
Figure BDA00021282076900000521
记这个集合为
Figure BDA00021282076900000522
进入步骤(3.2.3);否则输出最终的内存资源分配策略
Figure BDA00021282076900000523
利用下标映射得到对应恢复排序前顺序的内存资源分配策略
Figure BDA00021282076900000524
进入步骤(3.2.4);
(3.3.3)需要重新分配的内存资源为
Figure BDA0002128207690000061
其中|J|为J的元素个数,返回步骤(3.3.2);
(3.3.4)将同一个客户端所分配到的内存资源平均分配给该客户端所对应的所有任务,对于同一cj对应任务Tj={tz|1≤z≤sj},
Figure BDA0002128207690000062
其中
Figure BDA0002128207690000063
为用户cj实际提交的一个任务tz所分配到的内存资源,
Figure BDA0002128207690000064
为(3.2.2)得到的该用户分配到的所有内存资源,sj为用户cj发起的任务总数。
(3.4)从(3.2)和(3.3)中得到的[ntk]和[nmk],重新组成Q=[(ck,tk,ntk,nmk,Dk)]。
以下给出本发明基于Spark的多中心数据协同计算的流处理方法在多中心医学数据协同计算平台上应用的一个具体实例,该实例的实现具体包括以下步骤:
(1)在客户端(3家医院)和计算端(数据中心)建立RESTFul服务,记计算任务队列为
Q=[(“hospital1”,”task1”,8,4,”path1”),(″hospital2″,″task2″,8,8,″path2″),
(″hospital2″,″task3″,4,8,″path3″)],
L=3,第三家医院″hospital3″向计算端发起一个新的计算任务请求″task4″,该请求包括计算的线程资源需求16、计算内存的需求16、对应此任务的待计算数据″path4″;
(2)计算端解析客户端ci发送的计算任务请求,得到(“hospital3”,”task4”,16,16,”path4”);
(3)计算端将(“hospital3”,”task4”,16,16,”path4”)作为一个元素插入计算任务队列Q,
Q=[(“hospital1”,”task1”,8,4,”pathl”),(″hospital2″,″task2″,8,8,″path2″),
(″hospital2″,″task3″,4,8,″path3″),(″hospital3″,″task4″,16,16,″path4″)];
之后发起Scheduling计算,在Scheduling计算中任务队列Q各个元素的计算需求取值按照客户端为单位的最大最小原则进行优化,更新每个元素的ntk和nmk,队列Q取值变为:
Q=[(″hospital1″,″task1″,8,4,″path1″),(″hospital2″,″task2″,5,6.5,″path2″),
(″hospital2″,″task3″,6,6.5,″path3″),(″hospital3″,″task4″,13,15,″path4″)];
其中,Scheduling计算流程如下:
(3.1)对于队列
Q=[(“hospital1”,”task1”,8,4,”path1”),(″hospital2″,″task2″,8,8,″path2″),
(″hospital2″,″task3″,4,8,″path3″),(″hospital3″,″task4″,16,16,″path4″)]
L为计算队列Q的长度L=4,如果客户端″hospital2″存在多条记录,先按照客户端进行求和,得到
Qmid=[(″hospital1″,8,4,1),(″hospital2″,12,16,2),(″hospital1″,16,16,1)],
Lmid为Qmid长度Lmid=3;
(3.2)对于线程资源,执行如下优化分配流程:
(3.2.1)对于所有客户端的线程资源请求总数队列[8,12,16],按大小进行排序得到[8,12,16]和下标映射M=[1,2,3];记计算中心计算资源池的总线程资源为NT=32,则预给[8,12,16]的资源为[10,10,12];
(3.2.2)存在
Figure BDA0002128207690000071
记这个集合为J={1},进入步骤(3.2.3);
(3.2.3)需要重新分配的线程资源为R=10-8=2,
Figure BDA0002128207690000072
Figure BDA0002128207690000073
其中|J|为J的元素个数|J|=1,返回步骤(3.2.2);
(3.2.2)不存在
Figure BDA0002128207690000074
所以输出最终的线程资源分配策略Pmid=[8 11 13],利用下标映射得到对应恢复排序前顺序的线程资源分配策略P=[8 11 13],进入步骤(3.2.4);
(3.2.4)对于同一″hospital2″对应任务z=2,3,
Figure BDA0002128207690000075
(3.3)对于内存资源,执行如下优化分配流程:
(3.3.1)对于所有客户端的内存资源请求总数队列[4 16 16],按大小进行排序得到[4 16 16]和下标映射M=[1 2 3];记计算中心计算资源池的总内存资源为32,则预给[416 16]的资源为[10 10 12];
(3.3.2)存在
Figure BDA0002128207690000076
记这个集合为J={1},进入步骤(3.3.3);
(3.3.3)需要重新分配的线程资源为R=10-4=6,
Figure BDA0002128207690000077
Figure BDA0002128207690000078
其中|J|=1为J的元素个数,返回步骤(3.3.2);
(3.3.2)不存在
Figure BDA0002128207690000079
输出最终的线程资源分配策略Pmid=[41315],利用下标映射得到对应恢复排序前顺序的线程资源分配策略P=[41315],进入步骤(3.3.4);
(3.3.4)对于同一″hospital2″对应任务z=2,3,
Figure BDA00021282076900000710
(3.4)从(3.2)和(3.3)中得到的[ntk]和[nmk],重新组成
Q=[(″hospital1″,″task1″,8,4,″path1″),(″hospital2″,″task2″,5,6.5,″path2″),
(″hospital2″,″task3″,6,6.5,″path3″),(″hospital3″,″task4″,13,15,″path4″)]
(4)计算队列Q的长度len(Q)=4,以4为循环边界条件,用Spark.StreamingContext(Spark.StreamingContext为Spark框架下的流处理任务创建指令接口)创建4个流,并用Spark.Conf(Spark.Conf为Spark框架下的流处理任务配置指令接口)声明分配给各个流的资源;对于依次向Spark发起实际的流任务,
流1:载入数据″path1″,对数据执行计算任务″task1″,分配的线程资源为9,内存资源为4;
流2:载入数据″path2″,对数据执行计算任务″task2″,分配的线程资源为9,内存资源为9;
流3:载入数据″path3″,对数据执行计算任务″task3″,分配的线程资源为4,内存资源为9;
流4:载入数据″path4″,对数据执行计算任务″task4″,分配的线程资源为10,内存资源为10;
其中,如果流1、流2、流3中检查存在中间结果和计算任务元数据,则直接从其对应的步骤开始计算任务。
(5)对于已经在流处理的任务
Q=[(″hospital1″,″task1″,8,4,″path1″),(″hospital2″,″task2″,5,6.5,″path2″),
(″hospital2″,″task3″,6,6.5,″path3″),(″hospital3″,″task4″,13,15,″path4″)]
利用StreamingContext.CheckPointing(StreamingContext.CheckPointing为Spark框架下的流处理任务数据持久化指令接口)在流处理过程中的数据读取至HDFS、数据预处理缓存、计算、返回这四个步骤中执行数据流持久化操作,保存中间结果和计算任务元数据至path1,path2,path3,path4;同时监听队列的更新状况,如果监听到队列更新,则利用StreamingContext.stop(StreamingContext.stop为Spark框架下的流处理任务中止指令接口)停止该流,返回步骤(4);如果完成了流处理过程中的计算任务,则向该流处理任务对应的客户端返回任务处理结果,并将任务从队列Q弹出。
以上仅为本发明的实施实例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,不经过创造性劳动所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (2)

1.一种基于Spark的多中心数据协同计算的流处理方法,其特征在于,该方法在多中心数据协同计算系统上实现,所述多中心数据协同计算系统包括若干客户端和一个计算端,所述客户端用于生成和提交用户的计算任务请求给计算端,所述计算端用于解析请求,生成并执行计算指令;该方法包括以下步骤:
(1)在客户端和计算端建立RESTFul服务,记计算任务队列为Q=[(ck,tk,ntk,nmk,Dk)],1≤k≤L,L为计算任务队列Q的长度,任意一个客户端ck向计算端发起一个新的计算任务请求tk,该请求包括计算的线程资源需求ntk、计算内存的需求nmk、对应此任务的待计算数据Dk
(2)计算端解析客户端ck发送的计算任务请求,得到(ck,tk,ntk,nmk,Dk);
(3)计算端将(ck,tk,ntk,nmk,Dk)作为一个元素插入计算任务队列Q,之后发起Scheduling计算,在Scheduling计算中任务队列Q各个元素的计算需求取值按照客户端为单位的最大最小原则进行优化,更新每个元素的ntk和nmk;具体为对于所有客户端的线程资源请求总数队列并按大小进行排序,将总线程资源与请求总数的比值作为预给的线程资源,将排序后的队列中小于预给线程资源的线程资源,需要重新分配线程资源,最后将同一个客户端所分配到的线程资源平均分配给该客户端所对应的所有任务;对于所有客户端的内存资源请求总数队列并按大小进行排序,将总内存资源与请求总数的比值作为预给的内存资源,将排序后的队列中小于预给内存资源的内存资源,需要重新分配内存资源,最后将同一个客户端所分配到的内存资源平均分配给该客户端所对应的所有任务;
(4)计算队列Q的长度len(Q)=L,以L为循环边界条件,用Spark.StreamingContext创建L个流,并用Spark.Conf声明分配给各个流的资源;对于依次向Spark发起实际的流任务k,载入数据Dk,执行计算任务tk,分配其满足计算的线程资源需求ntk的线程数,分配满足计算内存的需求nmk;其中,如果Dk中存在中间结果和计算任务元数据,则直接从其对应的步骤开始计算任务;
(5)对于已经在流处理的任务(cl,tl,ntl,nml,Dl),利用StreamingContext.CheckPointing在流处理过程中的数据读取至HDFS、数据预处理缓存、计算、返回这四个步骤中执行数据流持久化操作,保存中间结果和计算任务元数据至Dl;同时监听队列的更新状况,如果监听到队列更新,则利用StreamingContext.stop停止该流,返回步骤(4);如果完成了流处理过程中的计算任务,则向该流处理任务对应的客户端返回任务处理结果,并将任务从队列Q弹出。
2.根据权利要求1所述的一种基于Spark的多中心数据协同计算的流处理方法,其特征在于,所述步骤(3)中,基于客户端的Scheduling计算流程如下:
(3.1)对于队列Q=[(ck,tk,ntk,nmk,Dk)],1≤k≤L,L为计算队列Q的长度,如果客户端存在多条记录,先按照客户端进行求和,得到以客户端为单位的新队列
Figure FDA0003120368370000021
Lmid为Qmid长度,sj为每个客户端发起的任务总数,
Figure FDA0003120368370000022
分别为客户端cj请求的线程资源总数和内存资源总数;
(3.2)对于线程资源,执行如下优化分配流程:
(3.2.1)对于所有客户端的线程资源请求总数队列
Figure FDA0003120368370000023
按大小进行排序得到
Figure FDA0003120368370000024
和下标映射
Figure FDA0003120368370000025
记计算中心计算资源池的总线程资源为NT,则预给
Figure FDA0003120368370000026
的资源为
Figure FDA0003120368370000027
(3.2.2)如果存在
Figure FDA0003120368370000028
记这个集合为
Figure FDA0003120368370000029
进入步骤(3.2.3);否则输出最终的线程资源分配策略
Figure FDA00031203683700000210
利用下标映射得到对应恢复排序前顺序的线程资源分配策略
Figure FDA00031203683700000211
进入步骤(3.2.4);
(3.2.3)需要重新分配的线程资源为
Figure FDA00031203683700000212
其中|J|为J的元素个数,返回步骤(3.2.2);
(3.2.4)将同一个客户端所分配到的线程资源平均分配给该客户端所对应的所有任务,对于同一cj对应任务Tj={tz|1≤z≤sj},
Figure FDA00031203683700000213
其中
Figure FDA00031203683700000214
为用户cj实际提交的一个任务tz所分配到的线程资源,
Figure FDA00031203683700000215
为(3.2.2)得到的该用户分配到的所有线程资源,sj为用户cj发起的任务总数;
(3.3)对于内存资源,执行如下优化分配流程:
(3.3.1)对于所有客户端的内存资源请求总数队列
Figure FDA00031203683700000216
按大小进行排序得到
Figure FDA00031203683700000217
和下标映射
Figure FDA00031203683700000218
记计算中心计算资源池的总内存资源为NM,则预给
Figure FDA00031203683700000219
的资源为
Figure FDA00031203683700000220
(3.3.2)如果存在
Figure FDA00031203683700000221
记这个集合为
Figure FDA00031203683700000222
进入步骤(3.2.3);否则输出最终的内存资源分配策略
Figure FDA00031203683700000223
利用下标映射得到对应恢复排序前顺序的内存资源分配策略
Figure FDA00031203683700000224
进入步骤(3.2.4);
(3.3.3)需要重新分配的内存资源为
Figure FDA00031203683700000225
其中|J|为J的元素个数,返回步骤(3.3.2);
(3.3.4)将同一个客户端所分配到的内存资源平均分配给该客户端所对应的所有任务,对于同一cj对应任务Tj={tz|1≤z≤sj},
Figure FDA00031203683700000226
其中
Figure FDA00031203683700000227
为用户cj实际提交的一个任务tz所分配到的内存资源,
Figure FDA0003120368370000031
为(3.2.2)得到的该用户分配到的所有内存资源,sj为用户cj发起的任务总数;
(3.4)从(3.2)和(3.3)中得到的[ntk]和[nmk],重新组成Q=[(ck,tk,ntk,nmk,Dk)]。
CN201910629253.8A 2019-07-12 2019-07-12 一种基于Spark的多中心数据协同计算的流处理方法 Active CN110347489B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201910629253.8A CN110347489B (zh) 2019-07-12 2019-07-12 一种基于Spark的多中心数据协同计算的流处理方法
JP2021533418A JP6990802B1 (ja) 2019-07-12 2020-04-07 Sparkに基づくマルチセンターのデータ協調コンピューティングのストリーム処理方法
PCT/CN2020/083593 WO2020233262A1 (zh) 2019-07-12 2020-04-07 一种基于Spark的多中心数据协同计算的流处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910629253.8A CN110347489B (zh) 2019-07-12 2019-07-12 一种基于Spark的多中心数据协同计算的流处理方法

Publications (2)

Publication Number Publication Date
CN110347489A CN110347489A (zh) 2019-10-18
CN110347489B true CN110347489B (zh) 2021-08-03

Family

ID=68176115

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910629253.8A Active CN110347489B (zh) 2019-07-12 2019-07-12 一种基于Spark的多中心数据协同计算的流处理方法

Country Status (3)

Country Link
JP (1) JP6990802B1 (zh)
CN (1) CN110347489B (zh)
WO (1) WO2020233262A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110347489B (zh) * 2019-07-12 2021-08-03 之江实验室 一种基于Spark的多中心数据协同计算的流处理方法
CN110955526B (zh) * 2019-12-16 2022-10-21 湖南大学 一种用于在分布式异构环境下实现多gpu调度的方法和系统
CN115081936B (zh) * 2022-07-21 2022-11-18 之江实验室 面向应急条件下多遥感卫星观测任务调度的方法和装置
CN115242877B (zh) * 2022-09-21 2023-01-24 之江实验室 面向多K8s集群的Spark协同计算、作业方法及装置
US11954525B1 (en) 2022-09-21 2024-04-09 Zhejiang Lab Method and apparatus of executing collaborative job for spark faced to multiple K8s clusters

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105335376A (zh) * 2014-06-23 2016-02-17 华为技术有限公司 一种流处理方法、装置及系统
WO2017106718A1 (en) * 2015-12-17 2017-06-22 Kersplody Corporation Method and apparatus for execution of distrubuted workflow processes
CN107193652A (zh) * 2017-04-27 2017-09-22 华中科技大学 容器云环境中流数据处理系统的弹性资源调度方法及系统
CN107291843A (zh) * 2017-06-01 2017-10-24 南京邮电大学 基于分布式计算平台的层次聚类改进方法
CN108804211A (zh) * 2018-04-27 2018-11-13 西安华为技术有限公司 线程调度方法、装置、电子设备及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100542139C (zh) 2006-12-31 2009-09-16 华为技术有限公司 一种基于任务分组的资源分配方法和装置
KR101638136B1 (ko) 2015-05-14 2016-07-08 주식회사 티맥스 소프트 멀티 스레드 구조에서 작업 분배 시 스레드 간 락 경쟁을 최소화하는 방법 및 이를 사용한 장치
US10120721B2 (en) 2015-08-28 2018-11-06 Vmware, Inc. Pluggable engine for application specific schedule control
CN105930373A (zh) * 2016-04-13 2016-09-07 北京思特奇信息技术股份有限公司 一种基于spark streaming的大数据流处理方法和系统
US10554577B2 (en) * 2017-03-14 2020-02-04 International Business Machines Corporation Adaptive resource scheduling for data stream processing
CN107870763A (zh) 2017-11-27 2018-04-03 深圳市华成峰科技有限公司 用于创建海量数据实时分拣系统的方法及其装置
CN108037998B (zh) * 2017-12-01 2019-05-24 北京工业大学 一种面向Spark Streaming平台的数据接收通道动态分配方法
CN109684078A (zh) * 2018-12-05 2019-04-26 苏州思必驰信息科技有限公司 用于spark streaming的资源动态分配方法和系统
CN110347489B (zh) * 2019-07-12 2021-08-03 之江实验室 一种基于Spark的多中心数据协同计算的流处理方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105335376A (zh) * 2014-06-23 2016-02-17 华为技术有限公司 一种流处理方法、装置及系统
WO2017106718A1 (en) * 2015-12-17 2017-06-22 Kersplody Corporation Method and apparatus for execution of distrubuted workflow processes
CN107193652A (zh) * 2017-04-27 2017-09-22 华中科技大学 容器云环境中流数据处理系统的弹性资源调度方法及系统
CN107291843A (zh) * 2017-06-01 2017-10-24 南京邮电大学 基于分布式计算平台的层次聚类改进方法
CN108804211A (zh) * 2018-04-27 2018-11-13 西安华为技术有限公司 线程调度方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
WO2020233262A1 (zh) 2020-11-26
CN110347489A (zh) 2019-10-18
JP2022508354A (ja) 2022-01-19
JP6990802B1 (ja) 2022-01-12

Similar Documents

Publication Publication Date Title
CN110347489B (zh) 一种基于Spark的多中心数据协同计算的流处理方法
US9665404B2 (en) Optimization of map-reduce shuffle performance through shuffler I/O pipeline actions and planning
CN107888669B (zh) 一种基于深度学习神经网络的大规模资源调度系统及方法
CN103098014B (zh) 存储系统
US20050081208A1 (en) Framework for pluggable schedulers
DE112010005705T5 (de) Umplanen von Workload in einer hybriden Datenverarbeitungsumgebung
US20120005682A1 (en) Holistic task scheduling for distributed computing
CN114610474B (zh) 一种异构超算环境下多策略的作业调度方法及系统
CN101359333A (zh) 一种基于隐含狄利克雷分配模型的并行数据处理方法
US20210390405A1 (en) Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof
CN112463390A (zh) 一种分布式任务调度方法、装置、终端设备及存储介质
CN112306642B (zh) 一种基于稳定匹配博弈理论的工作流调度方法
US7454749B2 (en) Scalable parallel processing on shared memory computers
CN110262896A (zh) 一种面向Spark系统的数据处理加速方法
CN108446165A (zh) 一种云计算中的任务预取方法
Lei et al. Redoop: Supporting Recurring Queries in Hadoop.
Sweeney et al. Early experience using amazon batch for scientific workflows
Zheng et al. Conch: A cyclic mapreduce model for iterative applications
US9152451B2 (en) Method of distributing processor loading between real-time processor threads
Lim et al. Accelerating Model Training in Multi-cluster Environments with Consumer-grade GPUs
Gunasekaran et al. Dynamic scheduling algorithm for reducing start time in Hadoop
Janardhanan et al. Analysis and modeling of resource management overhead in Hadoop YARN Clusters
CN113806044B (zh) 一种用于计算机视觉应用的异构平台任务瓶颈消除方法
CN115686865B (zh) 一种基于多场景应用的超算节点资源分配系统
Singla et al. Task Scheduling Algorithms for Grid Computing with Static Jobs: A Review

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