![](https://csdnimg.cn/release/download_crawler_static/18270808/bg1.jpg)
收稿日期:20190616;修回日期:20190727 基金项目:国家自然科学基金资助项目(61170277,61472256);上海市科委科研计划资
助项目(16111107502)
作者简介:魏
!
(1976),女,安徽铜陵人,副教授,硕导,博士,主要研究方向为大数据处理分析、并行计算;丁宇琛(1993),男,山西晋城人,硕
士,主要研究方向为大数据处理分析(763432066@qq.com).
Spark中一种高效 RDD自主缓存替换策略研究
魏
!
,丁宇琛
(上海理工大学 光电信息与计算机工程学院,上海 200093)
摘 要:由于并行计算框架 Spark缓存替换算法的粗糙性,LRU(leastrecentlyused)算法并未考虑 RDD的重复
使用导致易把高重用数据块替换出内存且作业执行效率较低等问题。通过优化权重模型和改进替换策略,提出
了一种高效 RDD自主缓存替换策略(efficientRDDautomaticcache,ERAC),包括高重用自主缓存算法和缓存替
换分级算法,可实现高效 RDD的自主缓存和缓存目标的分级替换。最后利用 SNAP(StanfordNetworkAnalysis
Project)提供的标准数据集将 ERAC和 LRU、RA(registerallocation)等算法进行了对比实验,结果显示 ERAC算法
能够有效提高
Spark的内存利用率和任务执行效率。
关键词:Spark;弹性分布式数据集;缓存替换;内存资源利用
中图分类号:TP391 文献标志码:A 文章编号:10013695(2020)10033304305
doi
:10.19734/j.issn.10013695.2019.06.0213
ResearchonefficientRDDselfcachereplacementstrategyinSpark
WeiYun,DingYuchen
(SchoolofOpticalElectrical&ComputerEngineering,UniversityofShanghaiforScience&Technology,Shanghai200093,China)
Abstract:DuetotheroughnessofcachereplacementmechanisminSparkparallelcomputingframework,LRUalgorithmdoes
notconsidertheRDDdatablockreuseproblemthateasilyresultsinhighreuseblocktoswapoutofthecacheandexecution
inefficiency.Byoptimizingtheweightmodelandimprovingthereplacementstrategy
,thispaperputforwardERACcachestra
tegy,whichcouldachieveefficientRDDautonomouscacheandhierarchicalreplacement,includedhighreuseselfcaching
algorithmandcachereplacementhierarchicalalgorithm.AppliedERAC,RAandLRUinstandarddatasetofSNAP,experi
mentalresultsshowthatERACcaneffectiveimprovethememoryutilizationandtaskexecutionefficiency.
Keywords:Spark;resilientdistributeddatasets;cachereplacement;memoryresourceutilization
0 引言
Spark作为一种在内存环境下的大数据处理引擎
[1]
,类似
于
Hadoop
[2,3]
的 MapReduce,得益于计算时间大大缩短和准实
时性得到了广泛的应用和研究。Spark采用 LRU算法作为缓
存替换策略,但 LRU算法没有考虑 RDD数据块的重复使用、
RDD的执行效率等因素,仅选择最近最久未使用的 RDD分区
替换出内存,处理方式比较粗糙,易把高重用但最近未使用的
RDD分区替换出内存,导致如多迭代任务集中缓存命中率以
及作业执行效率较低等问题。因此,通过研究改进 Spark的缓
存替换策略成为目前研究的热门且具有重大意义。
目前,对于 Spark的缓存替换策略主要从以下几个方面进
行改进创新:
a)使用其 他典型的 置换算法,如 FIFO、LFU、LRFU、MIN
等
[4]
,以及 Lee等人
[5]
提出的 Landload置换算法。还有一些
研究成果是在这些典型缓存替换算法的基础上加参调优。文
献[6]设计了一种新的多流 LRU缓存管理范式,虽然提高了缓
存命中率,但在并行计算框架中性能表现并不理想。
b)建立权重模型根据权重值选择缓存替换目标,但所建
立的权重模型有的不够细粒化,有的效果不佳。文献[7]提出
AWRP算法,该算法 引 入 了权 重 的 概念,但 没 有对 Spark的
RDD进行针对性优化。文献[8]在考虑了 RDD的计算代价、
使用次数、自身大小和生命周期等因素后建立
RDD权重模型
提出
RA算法,但增加了任务执行排序时间,影响作业执行效
率。文献[9]在文献[8]的基础上,加入了 task执行时 locality
level这个因素,但没有考虑 RDD的分区缓存完整性,当缓存不
完整时,则需要重复计算影响作业执行效率。文献[4]提出一
种自适应缓存策略(SACM),包括缓存自动选择、并行缓存清
理和权重缓存替换三种算法共同解决 Spark内存资源瓶颈问
题,但在缓存替换方面考虑的因素不够全面,导致 RDD的缓存
替换缺乏准确性。文献[
10]在 WR缓存替换策略的基础上提
出了 CWS缓存策略,增加考虑了历史访问次数和计算成本。
c)还有一些研究成果通过改进 Spark的缓存策略方式、引
进其他参数、建立文件系统
[11~13]
等来提高任务执行效率。文
献[14]设计了一种扁平内存混合策略,利用 VNM 缓存 RDD
块。文献[15]通过实验验证了串行化成本对中间数据的影
响,利用 DataFrame分布式数据结构来提高其序列化效率,提
出了一种内存和磁盘结合使用的缓存方式,但缓存到磁盘必然
会降低 作 业 执 行 效 率。文 献 [16]根据 RDD依 赖 关 系 得 到
DAG,对每个 RDD标记最小引用计数来表示该 RDD在作业中
的重要程度,以此作为缓存替换的度量方法,但 RDD的频繁引
用计数会消耗大量内存资源。
总的来说,针对 Spark的缓存替换算法还有较多亟待改善
的方面,包括权重值标定不准确、目标因素考虑不全面,从而导
致缓存命中率和作业执行效率偏低。针对以上问题,本文提出
了一种新的高效
RDD自主缓存替换算法:
a)重新量化 RDD分区的计算代价、使用频度、分区大小、
第 37卷第 10期
2020年 10月
计 算 机 应 用 研 究
ApplicationResearchofComputers
Vol.37No.10
Oct.2020