当前位置: 首页 > 专利查询>之江实验室专利>正文

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

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

【技术实现步骤摘要】
一种基于Spark的多中心数据协同计算的流处理方法
本专利技术属于流处理
,尤其涉及一种基于Spark的多中心数据协同计算的流处理方法。
技术介绍
流处理技术(StreamProcessing)是一种计算机编程范式,也可以叫做数据流编程或者交互式编程,是一种让计算应用在有限的并行处理模式下获得更高效使用效率的技术。这一类型的技术应用可以在多种运算单元上存在,比如图形运算单元(GraphicProcessingUnit,GPU)或者可编程阵列门电路(Field-programmableGateArrays,FPGA),并且不显式的管理内存分配,同步和单元之间的交流。Sparkstreaming是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的长度,如果客户端存在多条记录,先按照客户端进行求和,得到以客户端为单位的新队列Lmid为Qmid长度,sj为每个客户端发起的任务总数,分别为客户端cj请求的线程资源总数和内存资源总数;(3.2)对于线程资源,执行如下优化分配流程:(3.2.1)对于所有客户端的线程资源请求总数队列按大小进行排序得到和下标映射记计算中心计算资源池的总线程资源为NT,则预给的资源为(3.2.2)如果存在记这个集合为进入步骤(3.2.3);否则输出最终的线程资源分配策略利用下标映射得到对应恢复排序前顺序的线程资源分配策略进入步骤(3.2.4);(3.2.3)需要重新分配的线程资源为其中|J|为J的元素个数,返回步骤(3.2.2);(3.2.4)将同一个客户端所分配到的线程资源平均分配给该客户端所对应的所有任务,对于同一cj对应任务Tj={tz|1≤z≤sj},其中为用户cj实际提交的一个任务tz所分配到的线程资源,为(3.2.2)得到的该用户分配到的所有线程资源,sj为用户cj发起的任务总数。(3.3)对于内存资源,执行如下优化分配流程:(3.3.1)对于所有客户端的内存资源请求总数队列按大小进行排序得到和下标映射记计算中心计算资源池的总内存资源为NM,则预给的资源为(3.3.2)如果存在记这个集合为进入步骤(3.2.3);否则输出最终的内存资源分配策略利用下标映射得到对应恢复排序前顺序的内存资源分配策略进入步骤(3.2.4);(3.3.3)需要重新分配的内存资源为其中|J|为J的元素个数,返回步骤(3.3.2);(3.3.4)将同一个客户端所分配到的内存资源平均分配给该客户端所对应的所有任务,对于同一cj对应任务Tj={tz|1≤z≤sj},其中为用户cj实际提交的一个任务tz所分配到的内存资源,为(3.2.2)得到的该用户分配到的所有内存资源,sj为用户cj发起的任务总数。(3.4)从(3.2)和(3.3)中得到的[ntk]和[nmk],重新组成Q=[(ck,tk,ntk,nmk,Dk)]。本专利技术的有益效果是:本专利技术对于多中心本文档来自技高网
...

【技术保护点】
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弹出。...

【技术特征摘要】
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的多中心数据协同计算的流处理方法,其特征在于...

【专利技术属性】
技术研发人员:李劲松李润泽陆遥王昱赵英浩
申请(专利权)人:之江实验室
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1