一种基于数据持久化的Spark平台成本优化方法与流程

文档序号:15615171发布日期:2018-10-09 21:11阅读:189来源:国知局

本发明属于云计算领域,尤指一种基于数据持久化(persist)的spark平台成本优化方法。



背景技术:

分布式云平台资源成本的优化问题一直是各大云服务提供商重点关注的热点话题之一,因为尽可能地降低租户的租赁成本是提升各大云服务提供商竞争力的有效途径,同时也进一步实现云端资源利用率的最大化。

近些年,以基于内存迭代为特点的分布式计算框架spark逐渐夺得工业界及学术界的青睐。在工业领域,spark的成功应用案例已不计其数,例如腾讯广点通以及yahoo的audienceexpansion都是spark较早的应用成果;而在学术界,研究人员使用spark快速处理一些较为庞大的数据,例如天文数据等。随着spark版本的不断更新,其计算效率已不再是人们所关注的问题,庞大的生产集群逐渐产生昂贵的运维费用,而云端资源的不合理分配使得公司的成本问题愈加突显,因此,云端分布式计算框架在计算过程中的成本优化问题是当下各大it公司亟待解决的难题之一。

以广义云端资源优化问题为研究背景的成果已有很多,同时近两年也逐渐涌现出一些针对特定分布式计算框架的资源优化成果。

1)彭舰,李亮亮,黎红友.一种混合云环境中动态多工作流调度执行的费用优化策略,cn107292419a[p].2017.

提出一种在混合云环境下动态多工作流调度的费用优化方法。该方法采用启发式调度算法为工作流分配私有云资源,并结合使用多约束的工作流分割思想,将原始流分解为子工作流,并分别调度到合适的公有云中执行,一定程度上提高混合云场景下的资源利用率。

2)王国路,徐俊刚,刘仁峰.一种spark平台性能自动优化方法,cn105868019a[p].2016.

该发明提出一种spark平台的性能自动优化方法。根据spark的执行原理进行性能建模,通过获取历史spark运行时的性能数据来估计spark性能模型的参数,在有限参数空间中选出最优性能参数组合。该方法有助于快速完成对spark特定应用程序的性能优化。

通过近两年的相关专利情况来看,无论是广义云平台或是特定分布式计算框架,其研究成果大多集中在性能优化或是资源调度优化。而在海量数据处理的背景下,除了关注分布式计算框架的性能优化外,如何降低整个应用程序的资源消耗成本,同样是是当下人们关注的焦点问题之一。

云端数据的状态有两种:计算或是存储。对于当下集群按需收费的模式,且计算资源单价远高于存储资源单价,因此,可以在平衡两种数据状态间找到合适的策略以降低整个作业的资源消耗成本。这些基准成本由cpu利用率、磁盘消耗、网络传输消耗以及内存占用所组成。因此,对于云计算环境中资源消耗的成本问题,需要在上述四个因素中找到权衡。



技术实现要素:

鉴于当下云计算资源按需收费,且计算资源单价远高于存储的现状,本发明的目的是在平衡两种数据状态间找到合适的策略以降低整个作业的资源消耗成本。

实现本发明目的的技术方案如下:

一种基于数据持久化的spark平台成本优化方法,包括:

步骤一:构建基准成本率模型,定义数据分片在计算或存储状态下单位时间的成本消耗,包括:

1)根据云服务提供商的定价标准,引入资源实例单价参数,包括cpu:costc,磁盘存储:costd,内存:costm;

2)根据数据分片的两种存在状态即计算或持久化,分别定义其基准成本模型,包括:计算di:

上式中,di指代数据分片,ta(di)表示由di前一块数据分片生成di所需的时间,表示di之前所有连续未被持久化的数据分片集合,djindfront(di)表示di的一个数据分片前驱节点dj;

磁盘持久化di:costdpersist(di)=dsize×costd×ts;

上式中,dsize表示di所占用hadoop分布式文件系统的大小,ts表示di被持久化在磁盘中的时间;

内存持久化di:costmpersist(di)=0,α<1,

costmpersist(di)=(permem-s_mem_left)×costd×tj,α≥1;

上式中,α为启动混合介质持久化的阈值,用于判定是否需要混合介质持久化,α=(permem/s_mem_left);permem表示di被持久化所需的内存大小,s_mem_left表示可被用作持久化的内存的剩余空间,tj表示di被持久化在内存中的时间;

3)引入基准成本率模型,将不同量纲的基准成本模型进行统一计算,其含义为单位时间内资源的成本花费,包括:

持久化资源基准成本率:

计算资源基准成本率:costrcom(di)=costcom(di)×f(di);

上式中,f(di)表示di被重复使用的频率;

步骤二:构建目标应用程序的attention-dag图即注意力-有向无环图,包括:

1)根据sparkdag图,确定所有复用rdd以及复用rdd的所有出度与出边方向;

2)抽取复用rdd所在job中的全部rdd;一个job中的全部rdd按照其计算顺序组成attention-dag中的一个阶段,多个job在attention-dag图中产生多个阶段;根据复用rdd的出度以及出边方向,在图中的复用rdd间连线,以此构建应用程序的attention-dag图;

步骤三:结合sparkcheckpoint特性,构建成本优化方案,如下:

对attention-dag图中的rdd逐一进行下述操作:

1)对rdd即数据分片di做出是否持久化的判断,包括:

计算di的计算资源基准成本率costrcom(di)和持久化资源基准成本率costrpersist(di);若costrcom(di)>costrpersist(di),则将该di标注为持久化状态,令其成本率为costr(di)=costrpersist(di);同时使用pinfo(di)保存di前驱rdd节点的元数据信息,即令pinfo(di)=lineage(di),其中lineage代表rdd父子节点间的血统关系;

若costrcom(di)<costrpersist(di),则该di的状态不做更改,令其成本率为costr(di)=costrcom(di);

2)对于前驱rdd节点数据分片dj∈dfront(di),先将其预标注为持久化状态,并对dfront(di)集合中的成员进行更新,得到

dnewfront(di)=dfront(di)-dj-dfront(dj);

计算此时di的成本率ncostr(di),

其中dmindnewfront(di)表示di的一个数据分片前驱节点dm;

若ncostr(di)<costr(di),则将该dj实际标注为持久化状态,并更新di的成本率为costr(di)=ncostr(di),以及令dj的成本率为costr(dj)=costrpersist(dj);否则,去掉dj的预标注,其状态不做更改;

步骤四:根据成本优化方案,对目标应用程序进行同环境配置下的执行。

进一步地,还包括步骤:

若目标应用程序中存在迭代时间占整体计算时间超过60%的数据分片,对该计算链条上已标记为持久化的数据分片di进行下述判断,如满足

costcom(di)/costrpersist(di)>n×tone×(1-θ),

则去掉该di的持久化状态标注,并从pinfo(di)中获取其前驱节点元数据信息;

其中n为迭代轮数,tone代表单次迭代的平均时间,θ表示应用程序失败率;

所述步骤位于步骤三和步骤四之间。

作为前述两种技术方案的补充,进一步地,还包括,

根据下式计算目标应用程序执行成本优化方案前、后的整体资源消耗的步骤;

其中,t代表目标应用程序的执行时间,n为attention-dag图中的rdd即数据分片的数量。

与现有技术相比,本发明的积极效果是:

(1)提出一种广义分布式云计算环境下的基准成本率模型。该模型能够衡量云端任意应用程序的资源成本的消耗量,并能够以可插拔的方式与任意资源成本优化算法进行耦合,例如本发明中提出的基于sparkcheckpoint的成本优化策略。因此,对于具有不同工作特点的分布式计算框架来说,该基准成本率模型能够为评价优化算法的效果提供一种统一量纲的量化指标。

(2)提出了一种基于数据持久化的spark平台成本优化方法。该方法可作为一种成本优化的方法论,能够广泛用于任意具有持久化机制的系统或框架中,其核心思想是寻求计算成本与存储成本的平衡。此外,该方法合理地兼顾sparkcheckpoint算子的容错特性,能够在保障较长计算链条完整性的同时,尽可能地通过释放已持久化的rdd来进一步优化整体资源成本的消耗。

附图说明

图1为本发明中复用迭代rdd的抽取及标注示意图。

具体实施方式

下面结合附图对本发明的具体实施方案进行进一步地说明。

本发明中使用的参数如下表所示:

表1基准成本率模型参数解释

步骤一:构建基准成本率模型,用于定义数据分片在计算或存储状态下单位时间的成本消耗,同时将作为成本优化模型的决策依据,其核心步骤如下:

1)根据不同云服务提供商的定价标准,引入资源实例单价参数,包括cpu:costc;磁盘存储:costd;内存:costm。

2)定义不同资源下的基准成本模型。云端数据分片的存在状态有两种:计算或持久化。根据存储介质的不同,持久化可分为磁盘持久化、内存持久化以及磁盘与内存的混合介质持久化。由于内存空间的不足进而引发混合介质持久化,因此成本基准模型将混合介质持久化视为内存持久化的子情况进行统一定义。对于数据分片di,三种状态的成本基准模型分别定义如下:

计算di:

磁盘持久化di:costdpersist(di)=dsize×costd×ts(2)

内存持久化di:设α=(permem/s_mem_left),其作为阈值来判定是否需要混合介质持久化:

costmpersist(di)=0α<1(3)

costmpersist(di)=(permem-s_mem_left)×costd×tjα≥1(4)

上述公式(1)~(4)中,di指代数据分片,ta(di)表示由di前一块数据分片生成di的的时间(h),表示di之前所有连续未持久化的数据分片的集合,djindfront(di)表示di的每一个数据分片前驱节点dj,dsize表示di所占用hdfs(hadoopdistributedfilesystem,hadoop分布式文件系统)的大小,tj表示di被持久化在内存中的时间(h),permem表示di被持久化所需的内存大小(mb),s_mem_left表示可被用作持久化的内存的剩余空间(mb),tj表示di被持久化在内存中的时间(h)。

3)根据基准成本模型的定义,构建基准成本率模型,将不同量纲的基准成本模型进行统一计算,其含义为单位时间(h)内某资源的成本花费,用costr(di)表示,其中包含计算成本率以及持久化成本率,分别定义如下:

持久化资源基准成本率:

计算资源基准成本率:

costrcom(di)=costcom(di)×f(di)(6)

公式(6)中,f(di)表示di被重复使用的频率。

4)定义应用程序整体资源消耗的成本模型,用于定量分析应用程序执行过程中的资源消耗,同时可通过比较优化前后的整体成本,以此作为成本优化模型优化效果的评价依据。根据基准成本率的定义,整体成本的计算方式可定义为公式(7),其中t代表整个应用程序的执行时间,n为数据分片的数量。

步骤二:构建attention-dag(注意力-有向无环图)图,该图由复用rdd(resilientdistributeddataset,弹性分布式数据集)所在job的全部rdd构成,确定了成本优化模型的实施对象与决策范围,其中,复用是指在计算过程中,数据分片存在多次被使用的现象,其核心步骤如下:

1)根据sparkdag图,确定所有出现复用情况的rdd以及复用rdd的所有出度与出边方向,其中,出度与出边的概念与图论中二者的概念相同。

2)将复用rdd所在job中的全部rdd进行抽取,同一job中的所有rdd按照其计算顺序组成attention-dag中的一个阶段,不同job将在attention-dag图中产生多个阶段。根据复用rdd的出度以及出边方向,在图中的复用rdd间进行连线,以此构建任意包含复用rdd应用程序的attention-dag图。成本优化模型仅针对attention-dag中所包含的数据分片进行计算或存储状态的决策。

步骤三:结合sparkcheckpoint特性,构建成本优化模型,其核心步骤如下:

该模型所包含的成本优化算法将对attention-dag中的rdd进行遍历并对每一个数据分片做出是否持久化的判断,该步骤中所指的rdd为spark中数据分片的统一表示,对于attention-dag图中的任意数据分片di:

1)根据公式(5)与公式(6)分别计算di的计算成本率costrcom(di),以及持久化成本率costrpersist(di)。

2)判断costrpersist(di)与costrcom(di)的大小:

若costrcom(di)>costrpersist(di),则将该rdd标注为持久化,并更新该rdd的成本率为:

costr(di)=costrpersist(di)

同时使用pinfo(di)保存di前驱rdd节点的元数据信息,即:pinfo(di)=lineage(di),其中lineage代表rdd父子节点间的血统关系(元数据)。

若costrcom(di)<costrpersist(di),则保持rdd的原始状态不做更改。

3)di状态确定后,要对di前驱节点的状态进行更新:

对于前驱节点dj∈dfront(di),先将其标注为持久化状态,此时要对dfront(di)集合中的成员进行更新,即:

dnewfront(di)=dfront(di)-dj-dfront(dj)

此时di的资源消耗成本率可由临时变量ncostr(di)进行表示,为:

其中,dmindnewfront(di)表示di的一个数据分片前驱节点dm。

若ncostr(di)<costr(di),则对dj进行持久化,并更新di以及dj的成本率分别为ncostr(di)以及costrpersist(dj),否则继续保持dj的原始状态。

4)每次修改di的状态后,要对其前驱rdd节点集合dfront(di)中的rdd进行一次3)中的操作,以及时更新该rdd前驱节点的成本率。

5)制定基于容错的持久化释放策略,对于存在某块数据分片的迭代计算时间,占应用程序总时间的比例大于等于60%的情况,可在进行1)~4)步骤的同时,加入基于容错的持久化释放策略。

持久化方法的使用一方面实现了整体计算成本的优化,同时也发挥了其高容错的特性。然而,对于某些被重复迭代上百次以至于其计算链条过长的数据分片,在保证容错的基础上要额外考虑对已持久化的rdd进行释放,从而进一步优化整体资源消耗成本。对于该数据分片所在计算链条上的某块已被持久化的rdd分片di,循环对其进行基于公式(8)的判断,若满足公式(8),则释放di,并从pinfo(di)中获取其前驱节点元数据信息。

costcom(di)/costrpersist(di)>n×tone×(1-θ)(8)

其中n为迭代轮数,tone代表单次迭代的平均时间,θ表示应用程序失败率。

6)成本优化模型优化完毕,此时即可按照成本优化模型对应用程序进行同环境配置下的执行,并根据公式(7)计算优化后的总体成本消耗。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1