CN112015765B - 基于缓存价值的Spark缓存淘汰方法及*** - Google Patents

基于缓存价值的Spark缓存淘汰方法及*** Download PDF

Info

Publication number
CN112015765B
CN112015765B CN202010837412.6A CN202010837412A CN112015765B CN 112015765 B CN112015765 B CN 112015765B CN 202010837412 A CN202010837412 A CN 202010837412A CN 112015765 B CN112015765 B CN 112015765B
Authority
CN
China
Prior art keywords
rdd
value
cache
block
rdds
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
CN202010837412.6A
Other languages
English (en)
Other versions
CN112015765A (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.)
Chongqing University of Post and Telecommunications
Original Assignee
Chongqing University of Post and Telecommunications
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 Chongqing University of Post and Telecommunications filed Critical Chongqing University of Post and Telecommunications
Priority to CN202010837412.6A priority Critical patent/CN112015765B/zh
Publication of CN112015765A publication Critical patent/CN112015765A/zh
Application granted granted Critical
Publication of CN112015765B publication Critical patent/CN112015765B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明涉及大数据计算领域,具体涉及一种基于缓存价值的Spark缓存淘汰方法及***,包括:根据基于RDD信息的缓存价值模型得到每个RDD的初始缓存价值;利用改进的快速排序算法对RDD进行排序,得到RDD序列;依据初始缓存价值由高到低的顺序依次将RDD序列中RDD的计算结果存放到集群节点内存中;在任务动态执行过程中每个Stage结束时更新RDD信息;当节点内存不足时,利用基于Block信息的缓存价值模型计算已缓存Block的缓存价值;淘汰缓存价值小的Block释放内存空间。本发明将最具有缓存价值的RDD保存在内存中,及时清理不使用的Block,提升计算速度,减少RDD重算开销,优化内存资源利用率。

Description

基于缓存价值的Spark缓存淘汰方法及***
技术领域
本发明涉及大数据计算领域,具体涉及一种基于RDD(Resilent DistributedDatasets,弹性分布式数据集)和Block缓存价值的Spark缓存方法及***。
背景技术
在如今的大大数据时代,数据量呈指数级的增长,大数据处理日益受到人们的重视,为快速处理这些海量的数据信息,越来越多的应用及科学研究项目都将基于庞大的数据集进行处理和分析,涌现出一些大数据计算框架,例如:面向大规模数据处理的MapReduce并行计算模型、开源的大数据计算框架Hadoop、Spark框架等。Hadoop框架在多个应用程序域和大数据处理方案中的局限性,例如大规模结构化数据、图形数据和流数据,目前Apache Spark已经成为用于跨各种工作负载进行大规模数据分析的统一引擎,其先进的编程模型已被学术界和工业界用作快速且可扩展的计算框架。
Spark作为基于内存的计算框架,在保留了MapReduce计算模型的容错机制的同时,将数据交换从磁盘级别提高到内存级别,极大提高了大数据计算的处理效率。Spark的主要核心技术是将数据抽象成弹性分布式数据集(RDD),以分区的方式分布在集群中不同的机器上,在底层被并行计算处理。RDD是不可变的数据集,只能从HDFS或者文件中生成或者通过转换操作产生新的数据集合,在Spark运行过程中,新生成的RDD将缓存在集群的内存中,以便在下一次计算中使用。RDD支持基于工作集的应用,同时具有数据流模型的特点:即自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,极大地加速了后期的工作集重用。RDD提供了一种高度受限的共享内存方式,即RDD是只读的记录分区的集合,只能通过对其他RDD执行确定性的转换操作(如map,join和group by)而创建。Spark通过对计算集群的内存使用来减小对HDFS之类的分布式文件***的依赖性,并且基于RDD的数据集抽象,在积累一定量操作后再读数据以执行,且在计算时提供有效的数据共享,从而大大减少了磁盘I/O开销和数据处理时间。
由于Spark的基于内存的计算使得Spark框架对于内存非常依赖,内存的使用情况将直接影响到Spark框架的执行速率,传统的Spark内容管理的方法为LRU算法(Leastrecently used,最近最少使用),但LRU算法没能考虑RDD的使用情况淘汰掉部分复杂的RDD,以及在缓存替换过程中没有考虑到替换后框架的计算代价,导致重建RDD耗时增加问题。在王宇阳的论文“Spark缓存机制研究与实现”中,针对重建RDD耗时增加问题,提出一种基于计算代价模型的缓存替换策略,该策略首先建立包括计算代价在内的权重模型,根据新的权重模型进行缓存替换,并基于RDD计算代价模型,选择代价最小的方案进行缓存替换,从而进一步减少重建RDD的时间,提高Spark的执行效率。该方法在数据集较大或者迭代次数多的情况下能够有效提高Spark框架的执行效率。该论文中针对Spark框架RDD缓存数据恢复机制效率低下的问题,提出一种基于恢复点的RDD缓存快速恢复的策略,将Spark任务以Stage为界限,在每个Stage中分别设置起始恢复点和关键恢复点,并将恢复点数据序列化,当根据RDD血统重建RDD时,直接从恢复点获得数据,缩短了RDD重建的血统路径长度,加速了RDD的重建过程,并在此基础上增加了恢复点清理算法,确保该策略在Spark运行过程中只会占用少量的磁盘空间,节省磁盘资源。该策略能够加速RDD重建过程,提高Spark的运行速率。但这种Spark缓存淘汰方法用生成RDD的时间来表示RDD的计算代价不够准确,可能存在集群中多个节点之间传输数据的网络延迟或者节点满负荷运行导致计算能力减弱的问题,此外,这种淘汰机制忽略了该Block的未来重用次数,反而增加了***重新提取计算该Block的消耗。
发明内容
为了能够最大限度地利用存储内存资源和提高作业性能,同时降低错误淘汰导致的重算开销,本发明提供一种基于缓存价值的Spark缓存淘汰方法及***。
一种基于缓存价值的Spark缓存淘汰方法,包括以下步骤:
构建基于RDD的缓存价值模型和Block缓存价值模型;
根据基于RDD信息的缓存价值模型计算得到每个弹性分布式数据集RDD的初始缓存价值;利用改进的快速排序算法依据RDD的初始缓存价值对RDD进行由高到低排序,得到排好序的RDD序列;
依据初始缓存价值由高到低的顺序依次将该RDD序列中RDD的计算结果Block存放到集群节点内存中,具体地,从RDD序列中选择缓存价值最高的RDD,执行判断1;
判断1:判断当前缓存占用空间是否超过集群总内存的缓存阈值(集群总内存的缓存阈值默认为集群总内存的70%),若超过集群总内存的缓存阈值,则停止缓存;若不超过集群总内存的缓存阈值,则将RDD序列中缓存价值最高的RDD的计算结果放入集群内存中,并执行判断2;
判断2:判断待执行RDD序列中的RDD是否全部被缓存,若RDD全部被缓存,停止缓存;若RDD未全部被缓存,则继续从RDD序列中选择缓存价值最高的RDD,执行判断1;
在任务动态执行过程中每个Stage结束时刻更新该Stage的RDD信息,Stage的RDD信息包括未来重用次数RefCount与未来引用距离RefDistance;
各个节点只管理本节点中存储的Blocks,当节点内存不足以存放需缓存的Block时,利用基于Block信息的缓存价值模型计算当前节点中每个已缓存Block的缓存价值;根据当前节点内存中的Block的缓存价值,利用改进的快速排序算法,由低到高地淘汰缓存价值最小的Block,并在确保节点内存足以保存接下来要缓存的Block之后,继续淘汰所有缓存价值已为零的Block,以充分释放内存空间。
进一步的,基于RDD信息的缓存价值模型的构建过程包括:通过DAG调度模块的StageInfo,获取弹性分布式数据集RDD的未来重用次数RefCount、Block的未来引用距离RefDistance,并根据RDD之间的依赖关系确定RDD是否需要shuffle操作生成确定参数isShuffled的值,shuffle是Spark对于重新分布数据的机制,因此数据能在partitions上进行不同的分组,若RDD之间有窄依赖关系,表示该RDD不是由Shuffle操作生成的,则isShuffled=false,若RDD之间没有窄依赖关系,表示在该RDD处因Shuffle操作进行了Stage划分,则isShuffled=true;根据RefCount、RefDistance和isShuffled三个参数构建基于RDD信息的缓存价值模型,基于RDD信息的缓存价值模型包括:
其中,CacheWeighti表示RDDi的缓存价值;RefCounti表示RDDi的未来重用次数,该值通过统计所有Stage中RDDi被需要的次数得到;RefDistancei表示RDDi的下一次引用的Stage距离,该值通过分析Stage的执行顺序得到;β为RDDi是否由Shuffled操作生成因素的影响因子,由用户自由调整,默认值为0.2。
进一步的,Block缓存价值模型的构建过程包括:通过Block所关联的RDD的信息,将该RDD对应的RefCount与RefDistance分别作为该Block的未来重用次数和未来引用距离,并获取该Block在节点内存中占用的空间大小,构建基于Block信息的缓存价值模型如下式:
其中,CacheWeightij表示RDDi结果集的第j个Block的缓存价值权重,即Blockij的缓存价值权重;RefCountij表示Blockij的未来重用次数,与RDDi的RefCount相等;RefDistanceij表示Blockij的下一次引用的Stage距离,即Blocki的未来引用距离,RefDistanceij与RDDi的RefDistance一致;Sizeij表示Blockij在节点内存中占用的空间大小。
进一步的,在步骤“根据基于RDD信息的缓存价值模型计算得到每个RDD的初始缓存价值”之前,先通过改进的DAG调度模块建立RDD的有向无环图DAG,基于DAG确定RDD之间的依赖关系,划分Stage,将Stage的继承关系、Stage中包含哪些RDD的信息都封装到StageInfo类里,将RDD属于哪个Stage以及继承哪些RDD的信息封装到RDDInfo类里,然后调用DAG分析模块对StageInfo进行处理。
进一步的,调用DAG分析模块对StageInfo进行处理包括:DAG分析模块遍历所有的StageInfo,并根据Stage的继承关系,从最后一个Stage往前推出每个Stage的初始距离,即未来引用距离RefDistance;DAG分析模块根据Stage与RDD的所属关系,遍历所有Stage中包含的RDD,从而得出在整个Job DAG中每个RDD的调用次数RefCount;根据RDD之间是否有窄依赖关系判断其是否通过Shuffle操作生成,若RDD之间有窄依赖关系,表示该RDD不是由Shuffle操作生成的,则isShuffled=false,若RDD之间没有窄依赖关系,表示在该RDD处因Shuffle操作进行了Stage划分,则isShuffled=true,基于上述RefDistance,RefCount,isShuffled,根据基于RDD信息的缓存价值模型计算得到每个RDD的初始缓存价值。
进一步的,改进的快速排序算法包括:(1)使用非递归方式实现,避免数据量过大导致栈溢出;(2)对于缓存价值大多相等时的改进,探访基准值右区间时,先将与该基准值相等的所有数据保存在一个数组中,然后一次性放在基准值的右侧,探访左区间时,先将与该基准值相等的所有数据保存在一个数组中,然后一次性放在基准值左侧;(3)当参与排序的数据数目小于预先设定的阈值时(阈值默认为5)时,采用***排序可以提高效率。
一种基于缓存价值的Spark缓存淘汰***,包括:改进的DAG调度模块、DAG分析模块、RDD信息管理模块、改进的节点内存模块,
改进的DAG调度模块DAGScheduler添加了对DAG分析模块和RDD信息管理模块的创建与调用;
自定义的DAG分析模块DAGAnalyzer负责分析Job DAG图,计算各RDD的初始缓存价值,并按缓存价值由高到低的顺序将RDD计算结果放入内存;
自定义的RDD信息管理模块RDDInfoManager负责在DAGScheduler标记某Stage成功完成时更新各RDD的参数信息;
改进的节点内存模块MemoryStore在节点内存不足时以Block缓存价值由低到高的顺序淘汰内存中的Block。
本发明的有益效果:
1.本发明基于RDD与Block在整个Job中调用情况进行资源的缓存和淘汰,定义了RDD和Block的缓存价值,将Job中真正最近最多使用的Block保存在内存中,减少了重新计算这些RDD的冗余计算消耗,从而减少了运行时间,提升了工作效率。
2.本发明能及时清理内存中未来不再使用的Block(即缓存价值为零的Block),保证了Spark内存资源的充足性,提高了***的性能;本发明基于Spark源码进行了修改,修改后Spark的使用方法不变,用户不需要执行另外的操作,避免了用户的学习成本。
3.本发明将使用的最频繁且最临近计算的RDD保存在内存中,及时清理已缓存内容中不再使用的RDD,提升RDD的计算速度,从而减少RDD重算开销,优化内存资源利用率,提高***性能。
附图说明
下面结合附图和具体实施方式对本发明做进一步详细的说明。
图1为本发明实施例中RDD、Partition与Block的关系图;
图2为改进的DAGScheduler模块的执行流程图;
图3为自定义的DAGAnalyzer模块的执行流程图;
图4为自定义的RDDInfoManager模块的执行流程图;
图5为改进的MemoryStore模块的执行流程图;
图6为本发明一种基于缓存价值的Spark缓存淘汰方法的***结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种基于缓存价值的Spark缓存淘汰方法及***,根据Spark Job的DAG图获取RDD和Block在Job中的使用情况,定义RDD和Block的缓存价值,本说明书中所指的缓存价值高包括:使用最频繁且最临近计算的RDD或Block的缓存价值高;若某Block的缓存价值为零,则代表该Block不会再被使用。主动缓存其中价值高的RDD,及时清理价值为零的Block,保证内存资源的利用效率。
一种基于缓存价值的Spark缓存淘汰方法,包括但不限于如下过程:
基于Spark Job生成的有向无环图(Directed Acyclical Graphs,DAG),构建基于RDD的缓存价值模型用于RDD缓存,构建Block缓存价值模型用于节点内存清理。
进一步的,在一个实施例中,基于RDD的缓存价值模型的构建过程包括:
S11、通过DAGScheduler模块的StageInfo,获取RDD的未来重用次数(RefCount)、未来引用距离(RefDistance),并根据RDD之间的依赖关系确定其是否需要shuffle操作(isShuffled)。具体地,RDD可以在多个Stage中被重复调用,根据RDD Job生成的DAG图中Stage与RDD的对应关系,以及各Stage的执行顺序,得出还未执行的Stage中的RDD的未来重用次数RefCount和下一次要调用的Stage距离(即未来引用距离RefDistance),并依据RDD是否存在窄依赖关系的Parent判断该RDD是否由Shuffle操作生成(isShuffled)。通过以上三个参数,构建基于RDD信息的缓存价值模型。
基于RDD信息的缓存价值模型如下所示:
其中,CacheWeighti表示RDDi的缓存价值;RefCounti表示RDDi的未来重用次数,该值通过统计所有Stage中RDDi被需要的次数得到;RefDistancei表示RDDi的下一次引用的Stage距离,该值通过分析Stage的执行顺序得到;β为RDDi是否由Shuffled操作生成因素的影响因子,可由用户自由调整,默认值为0.2。
S12、RDD与Block之间存在从属关系。RDD可以被划分为多个Partition,每个Partition交由一个Task进行处理,每个Partition对应的Task计算得到的结果即为Block,该关系如图1所示,于是RDD与Block之间的关系可表示为:
其中,表示RDDi计算得到的结果集;Blockij表示RDDi计算结果集中的第j个Block;Blockin为最后一个Block,n代表Blocks的总数,也等于RDDi总的Partitions数量。
通过Block所关联的RDD的信息,将Block所关联的RDD对应的RefCount作为该Block的未来重用次数(RefCount),将Block所关联的RDD对应的RefCount作为该Block即将执行的Stage的距离(即未来引用距离RefDistance),并获取该Block所关联的RDD在节点内存中占用的空间大小(Size),根据Block所属的RDD的RefCount和RefDistance,以及该Block的Size大小,构建基于Block信息的缓存价值模型。
基于Block信息的缓存价值模型如下所示:
其中,CacheWeightij表示RDDi结果集的第j个Block,即Blockij的缓存价值权重;RefCountij表示Blockij的未来重用次数,与RDDi的RefCount相等;RefDistanceij表示Blockij的下一次引用的Stage距离,与RDDi的RefDistance一致;Sizeij表示Blockij的所占空间大小。
DAGScheduler的执行流程如图2所示,DAGScheduler的执行流程包括:在所有计算任务开始之前,通过改进的DAGScheduler模块建立有向无环图DAG,基于DAG确定RDD之间的依赖关系,划分出以pipeline形式运行的Stage。Job是Spark用户执行一次动作后要做的整个工作,总的来说,划分Stage,Stage中包含一个或多个RDD,RDD是操作的集合,是一种抽象,RDD记录下要做的操作符,后面再执行,RDD被分成很多Partition,也表示操作的抽象,Partition的执行结果为Task,一个Task对应一个RDD的Partitions,Tasks可以并行执行在各Worker上,一个Task执行得到的结果即为一个Block,再归并统一得到的Blocks集就是该RDD的计算结果,关于Stage、RDD与Block之间的关系如图1所示。将Stage的继承关系、Stage中包含哪些RDD的信息都封装到StageInfo类里,将RDD属于哪个Stage以及继承哪些RDD的信息封装到RDDInfo类里,然后调用DAGAnalyzer模块对StageInfo进行处理。
进一步的,DAGAnalyzer的执行流程如图3所示,调用DAGAnalyzer模块对StageInfo进行处理包括:DAGAnalyzer模块遍历所有的StageInfo,并根据Stage的继承关系,从最后一个Stage往前推出每个Stage的初始距离RefDistance(即按照所有Stage的执行顺序执行,从最初位置到该Stage之间需要经过多少个Stage);DAGAnalyzer根据Stage与RDD的所属关系,遍历所有Stage中包含的RDD,从而得出在整个Job DAG中每个RDD的调用次数RefCount;根据RDD是否有窄依赖关系判断其是否通过Shuffle操作生成(isShuffled),若RDD有窄依赖关系的Parent,表示该RDD不是由Shuffle操作生成的,则isShuffled=false,若RDD没有窄依赖关系的Parent,表示在该RDD处因Shuffle操作进行了Stage划分,则isShuffled=true。
基于上述三个参数(RefDistance,RefCount,isShuffled),根据基于RDD信息的缓存价值模型计算得到每个RDD的初始缓存价值。利用改进的快速排序算法根据RDD的初始缓存价值的进行由高到低的排序,得到排好序的RDD序列。依据RDD的初始缓存价值由高到低的顺序依次将RDD的计算结果Block存放到集群节点内存中,具体地,从该RDD序列中选择缓存价值最高的RDD,执行判断1。
判断1:判断当前缓存占用空间是否超过集群总内存的缓存阈值,若超过集群总内存的缓存阈值,则停止缓存;若不超过集群总内存的缓存阈值,则将RDD序列中缓存价值最高的RDD的计算结果放入集群内存中,并执行判断2。
判断2:判断RDD序列中的RDD是否全部被缓存,若RDD全部被缓存,停止缓存;若RDD序列中的RDD未被全部缓存,则继续从RDD序列中选择缓存价值最高的RDD,执行判断1。
进一步的,改进的快速排序算法包括:(1)使用非递归方式实现,避免数据量过大导致栈溢出;(2)对于缓存价值大多相等时的改进,比如探访基准值右区间时先将与该基准值相等的所有数据保存在一个数组中,然后一次性放在基准值的右侧(探访左区间时放在基准值左侧);(3)当参与排序的数据小于一定数目(默认为5)时,采用***排序可以提高效率。
上述步骤的有益效果包括:将使用的最频繁且最临近计算的RDD保存在内存中,避免了这些RDD重新计算的多余消耗,提升RDD的计算速度,从而减少RDD重算开销,优化内存资源利用率,提高***性能。
在任务执行过程中动态更新RDD信息包括:在任务动态执行过程中,当任意一个Stage已成功完成,DAGScheduler会标记该Stage已完成,每个Stage完成时,调用RDDInfoManager模块。
RDDInfoManager的执行流程如图4所示,它负责更新该Stage包含的RDD的参数信息,即RefCount和RefDistance,具体更新方式包括:将当前已完成的Stage中的RDD的RefCount减1,将等待执行的Stage中的RDD的RefDistance减1。
在任务执行过程中动态更新RDD信息的有益效果:有助于在节点内存的释放环节中得到当前最新的RDD的参数信息,用以确定与RDD相关联的Block的参数信息,从而能够动态更新Block的缓存价值,让节点内存中缓存价值已为零的Block及时被清除,释放更多内存空间以提升节点工作性能。
RDD分布式地存储于各个节点的Blocks中,且一个节点只管理本节点中存储的Blocks。当节点获得一个需缓存的Block时,比较当前节点的剩余可用内存与需缓存Block所需的内存,若需缓存Block所需的内存小于当前节点的剩余可用内存,则说明当前节点的剩余可用内存足以存放需缓存的Block,直接存储该Block;若需缓存的Block所需的内存超过当前节点的剩余可用内存,则说明当前节点的剩余可用内存不足以存放需缓存的Block。当节点内存不足以存放需缓存的Block时,先对该节点进行内存释放,再缓存Block。
在一个可选的实施例中,对该节点进行内存释放具体包括:该节点上改进的MemoryStore会利用基于Block信息的缓存价值模型计算并更新当前节点中每个已缓存Block的缓存价值,并将每个已缓存Block的缓存价值封装到BlockInfo类中;改进的MemoryStore利用改进的快速排序算法基于BlockInfo的缓存价值对内存中已缓存的Block进行排序,得到有序的Block序列,由低到高地从已缓存Block序列中淘汰缓存价值最小的Block,直至该节点的剩余可用内存足以保存接下来要缓存的Block。当该节点的剩余可用内存已足够存储需缓存的Block后,继续判断已缓存Block序列中是否还存在缓存价值为零的Block,将所有缓存价值已为零的Block淘汰,避免不再使用的Block浪费内存资源。MemoryStore的执行流程如图5所示。
在一个可选的实施例中,对该节点进行内存释放具体包括:按照上述过程得到已缓存Block的缓存价值序列后,首先将已缓存Block的缓存价值序列中所有缓存价值为零的Block淘汰;再判断该节点的剩余可用内存是否足以保存接下来要缓存的Block,若够用,则执行Block缓存操作;若剩余可用内存不够用,则从已缓存Block的缓存价值序列中由低到高地淘汰缓存价值最小的Block,直至该节点的剩余可用内存足够存储需缓存的Block。
上述步骤的有益效果是:在内存资源紧张时淘汰掉未来不再使用的RDD,极大地保障了内存资源的可用性,从而提高Spark集群的整体计算性能。
本发明的最终目的是为了降低Spark在进行缓存淘汰的时候因淘汰未来所需重用的资源而导致的冗余计算问题,提高集群的整体效率并且能满足性能和容错要求。
本发明的缓存淘汰方法适用于不同的数据量以及不同的基准测试集的大数据应用的场景。
如图6所示是本发明的一种基于缓存价值的Spark缓存淘汰***结构图,图中黑色模块为自定义增添模块,灰色模块为在Spark源码基础上进行过修改的模块,白色模块为Spark原本模块。该***用于实现和优化Spark缓存淘汰。
一种基于缓存价值的Spark缓存淘汰***,包括:改进的DAG调度模块(对应附图6中的“DAGScheduler”)、DAG分析模块(对应附图6中的“DAGAnalyzer”)、RDD信息管理模块(对应附图6中的“RDDInfoManager”)、改进的节点内存模块(对应附图6中的“MemoryStore”),以及Spark默认的MemoryManager模块与BlockManager模块。其中,DAGScheduler、DAGAnalyzer、RDDInfoManager与MemoryManager运行在Driver端,而BlockManager与MemoryStore运行在各个Executor中。
其中,改进的DAG调度模块(DAGScheduler)添加了对DAG分析模块和RDD信息管理模块的创建与调用,DAGScheduler的执行步骤如步骤2和步骤5;改进的DAG调度模块中还包括StageInfo类,该StageInfo类用于保存Stage继承关系和Stage中所包含RDD信息,可以从StageInfo类中获取弹性分布式数据集RDD的未来重用次数RefCount、Block的未来引用距离RefDistance;
自定义的DAG分析模块(DAGAnalyzer)负责分析JobDAG图,计算各RDD的初始缓存价值,并按缓存价值由高到低的顺序将RDD计算结果放入内存;DAGAnalyzer的具体执行过程如步骤3和步骤4所示;
自定义的RDD信息管理模块(RDDInfoManager)负责在DAGScheduler标记某Stage成功完成时更新各RDD的参数信息,可参见步骤5;
默认的MemoryManager负责统一管理与调配Spark集群***的内存资源,并可实时获取内存使用情况。
默认的BlockManager运行在各个节点,负责管理本节点上的所有Block信息,并及时和Driver端BlockManagerMaster进行信息同步。当某节点内存不足以存储下一个需缓存的Block时(查询MemoryManager可知),会调用MemoryStore进行内存淘汰的实际操作。
改进的节点内存模块(MemoryStore)在BlockManager通知需要清理内存时以Block缓存价值由低到高的顺序淘汰内存中的Block,可参见步骤6和步骤7的流程。
该***实现Spark缓存淘汰优化的具体步骤如下:
步骤1、Spark Driver端启动,用户指定SparkConf和SparkContext,SparkContext在后台创建DAGScheduler。DAGScheduler实现面向Stage调度的高级调度层,为Spark Job划分Stage,各个Stage包含一个或多个RDD,Stage以流水线形式执行,根据此得到该Job的DAG图。
步骤2、DAGScheduler的执行步骤如图2所示。DAGScheduler初始化时会创建DAGAnalyzer。待DAGScheduler生成Job DAG之后,DAGAnalyzer会接收到Job DAG信息,并据此分析得到RDD的两个自定义参数(RefCount与RefDistance)。其中RefCount指的是该RDD在未来还会被调用的次数,初始时刻即为在整个Job中被调用的次数。RefCount的计算方法为:遍历所有的Stage,并遍历每个Stage包含的RDD,RDD每出现一次其RefCount就增加1。RefDistance指的是该RDD在将来调用时所处的Stage与当前之间隔了多少个Stage,初始时该距离至少为1。RefDistance的计算方法为:从最后的Stage开始往前迭代设置,其值为总Stage数递减。
根据以上两种计算方法,初始化每个RDD的RefCount与RefDistance,并将这两个参数封装到该RDD对应的RDDInfo类中去。
步骤3:DAGAnalyzer的执行步骤如图3所示。它根据基于RDD信息的缓存价值模型,计算每个RDD的缓存价值,并封装到对应的RDDInfo里。基于RDD信息的缓存价值模型如下:
其中,RefCounti表示RDDi的未来重用次数;RefDistancei表示RDDi的下一次引用的Stage距离;β为RDDi是否由Shuffled操作生成因素的影响因子,可由用户自由调整,默认值为0.2。该RDD是否由Shuffled操作生成可以根据其是否拥有窄依赖关系的Parent来判断。
步骤4:DAGAnalyzer利用改进的快速排序算法,将已初始化缓存价值的所有RDD进行排序,然后进行预先缓存操作:在不超过集群总内存的缓存阈值(缓存阈值默认为集群总内存的70%)的情况下将缓存价值较高的RDD使用Cache()操作保存到内存中。
步骤5:DAGScheduler提交TaskSet给TaskScheduler开始执行计算任务,在整个Job的工作执行过程中,各Stage按顺序依次执行。每当一个Stage成功完成时,DAGScheduler会标注该Stage已完成,并通知RDDInfoManager进行动态更新(如图2所示),直到整个Job成功完成计算。
步骤6:在整个Job的执行过程中,Driver端统筹调度整体的资源和任务,多个工作节点(Executor)负责并行处理计算任务。每个工作节点都创建一个BlockManager,用以管理当前节点的Block和远程调用别处的Block资源。各个节点分布式地存储RDD所关联的Blocks,并只管理本节点中存储的Blocks。当某节点内存资源不足以缓存下一个需要缓存的Block时,BlockManager会通知在该节点上实现的MemoryStore,它是节点上有关内存存储的具体实现。MemoryStore的执行流程如图5所示,它调用evictBlocksToFreeSpace()方法来淘汰一部分Blocks,在改进的方法中,先利用基于Block信息的缓存价值模型计算更新当前内存中的Blocks的缓存价值,并封装到对应的BlockInfo中。基于Block的缓存价值模型如下:
对于RDDi所关联的Blocks,可表示为如下:
其中,表示RDDi计算得到的结果集;Blockij表示RDDi结果集中的第j个Block;Blockin为最后一个Block,n代表Blocks的总数,也等于RDDi总的Partitions数量。
则某属于RDDi的Blockij的缓存价值权重计算公式如下:
其中,CacheWeightij表示RDDi中的第j个Block,即Blockij的缓存价值权重;RefCountij表示Blockij的未来重用次数,与RDDi的RefCount相等;RefDistanceij表示Blockij的下一次引用的Stage距离,与RDDi的RefDistance相等;Sizeij表示Blockij的所占空间大小。
步骤7:MemoryStore利用改进的快速排序算法,依据Block的缓存价值进行排序,然后在保证留出足以存储下一个要缓存的Block的内存空间的条件下,淘汰内存中缓存价值较小的Block,并继续判断是否还存在缓存价值为零的Block,如果存在则将其淘汰。
针对大数据处理***(特别是Spark)默认的缓存算法没有考虑被淘汰Block未来是否会被使用的问题。Spark原先的缓存淘汰算法优先淘汰缓存最久的Block,但该Block在将来或许会被频繁调用,这就造成了大量的重算成本。因此,为了降低Spark在进行缓存淘汰的时候因淘汰未来所需重用的资源而导致的冗余计算问题,提高集群的整体效率并且能满足Spark的性能和容错要求,本发明提供一种基于RDD与Block缓存价值的Spark缓存淘汰方法,能主动缓存未来频繁使用的RDD,优先淘汰将来不会再使用的Block,并且考虑到某些Block隔太久才会被调用,这类Block的缓存价值也会相应降低,使得未来最近会使用的Block才会保存在节点内存中。本发明提出了较为全面的Spark缓存价值权重模型,自定义了Spark的缓存淘汰策略,做出以优先淘汰缓存价值低者的淘汰策略。并且,在任务运行之前,Cache其中缓存价值高的RDD,并在任务执行过程中动态更新RDD信息。该方式的优势在于:使未来最频繁且最快要调用的RDD保存在内存中,避免了这些RDD重新计算的多余消耗,并在内存资源紧张时淘汰未来不再使用的RDD,极大地保障了内存资源的可用性,从而提高Spark集群的整体计算性能。
需要说明的是,本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-0nly Memory,ROM)或随机存储记忆体(RandomAccess Memory,RAM)等。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的***实施例仅仅是示意性的,其中所述作为分离部件说明的单元及模块可以是或者也可以不是物理上分开的。另外,还可以根据实际的需要选择其中的部分或者全部单元和模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本申请的具体实施方式,应当指出,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

Claims (4)

1.一种基于缓存价值的Spark缓存淘汰方法,其特征在于,包括以下步骤:
构建基于RDD的缓存价值模型和Block缓存价值模型;
基于RDD信息的缓存价值模型的构建过程包括:通过DAG调度模块中的StageInfo类,获取弹性分布式数据集RDD的未来重用次数RefCount、Block的未来引用距离RefDistance,并根据RDD之间的依赖关系确定RDD是否需要shuffle操作生成,若RDD之间有窄依赖关系,表示该RDD不是由Shuffle操作生成的,则isShuffled=false,若RDD之间没有窄依赖关系,表示在该RDD处因Shuffle操作进行了Stage划分,则isShuffled=true,根据RefCount、RefDistance和isShuffled三个参数构建基于RDD信息的缓存价值模型,
基于RDD信息的缓存价值模型包括:
其中,CacheWeighti表示RDDi的缓存价值;RefCounti表示RDDi的未来重用次数,该值通过统计所有Stage中RDDi被需要的次数得到;RefDistancei表示RDDi的下一次引用的Stage距离,该值通过分析Stage的执行顺序得到;β为RDDi是否由Shuffled操作生成因素的影响因子,由用户自由调整,默认值为0.2;
Block缓存价值模型的构建过程包括:通过Block所关联的RDD的信息,将该RDD对应的未来重用次数RefCount与未来引用距离RefDistance分别作为该Block的未来重用次数和未来引用距离,并获取该Block在节点内存中占用的空间大小,构建基于Block信息的缓存价值模型如下式:
其中,CacheWeightij表示RDDi结果集的第j个Block的缓存价值权重,即Blockij的缓存价值权重;RefCountij表示Blockij的未来重用次数,与RDDi的RefCount相等;RefDistanceij表示Blockij的下一次引用的Stage距离,即Blockij的未来引用距离,RefDistanceij与RDDi的RefDistance一致;Sizeij表示Blockij在节点内存中占用的空间大小;
根据基于RDD信息的缓存价值模型计算得到每个弹性分布式数据集RDD的初始缓存价值;利用改进的快速排序算法依据RDD的初始缓存价值对RDD进行由高到低排序,得到排好序的RDD序列;
改进的快速排序算法包括:(1)使用非递归方式实现;(2)对于缓存价值大多相等时的改进,探访基准值右区间时,先将与该基准值相等的所有数据保存在一个数组中,然后一次性放在基准值的右侧,探访左区间时,先将与该基准值相等的所有数据保存在一个数组中,然后一次性放在基准值左侧;(3)当参与排序的数据数目小于预先设定的阈值时,采用***排序;
依据初始缓存价值由高到低的顺序依次将该RDD序列中RDD的计算结果Block存放到集群节点内存中,具体地,从RDD序列中选择缓存价值最高的RDD,执行判断1;
判断1:判断当前缓存占用空间是否超过集群总内存的缓存阈值,若超过集群总内存的缓存阈值,则停止缓存;若不超过集群总内存的缓存阈值,则将RDD序列中缓存价值最高的RDD的计算结果放入集群内存中,并执行判断2;
判断2:判断待执行RDD序列中的RDD是否全部被缓存,若RDD全部被缓存,停止缓存;若RDD未全部被缓存,则继续从RDD序列中选择缓存价值最高的RDD,执行判断1;
在任务动态执行过程中的每个Stage结束时刻更新该Stage的RDD信息,Stage的RDD信息包括未来重用次数RefCount与未来引用距离RefDistance;
各个节点只管理本节点中存储的Blocks,当节点内存不足以存放需缓存的Block时,利用基于Block信息的缓存价值模型计算当前节点中每个已缓存Block的缓存价值;根据当前节点内存中的Block的缓存价值,利用改进的快速排序算法,由低到高地淘汰缓存价值最小的Block,并在确保节点内存足以保存接下来要缓存的Block之后,继续淘汰所有缓存价值已为零的Block,以充分释放内存空间。
2.根据权利要求1所述的一种基于缓存价值的Spark缓存淘汰方法,其特征在于,在步骤“根据基于RDD信息的缓存价值模型计算得到每个RDD的初始缓存价值”之前,先通过改进的DAG调度模块建立RDD的有向无环图DAG,基于DAG确定RDD之间的依赖关系,划分Stage,将Stage的继承关系、Stage中包含哪些RDD的信息都封装到StageInfo类里,将RDD属于哪个Stage以及继承哪些RDD的信息封装到RDDInfo类里,然后调用DAG分析模块对StageInfo进行处理。
3.根据权利要求2所述的一种基于缓存价值的Spark缓存淘汰方法,其特征在于,调用DAG分析模块对StageInfo进行处理包括:DAG分析模块遍历所有的StageInfo类,并根据Stage的继承关系,从最后一个Stage往前推出每个Stage的初始距离,即未来引用距离RefDistance;DAG分析模块根据Stage与RDD的所属关系,遍历所有Stage中包含的RDD,从而得出在整个Job DAG中每个RDD的调用次数RefCount;根据RDD之间是否有窄依赖关系判断其是否通过Shuffle操作生成,若RDD之间有窄依赖关系,表示该RDD不是由Shuffle操作生成的,则isShuffled=false,若RDD之间没有窄依赖关系,表示在该RDD处因Shuffle操作进行了Stage划分,则isShuffled=true,基于上述RefDistance,RefCount,isShuffled,根据基于RDD信息的缓存价值模型计算得到每个RDD的初始缓存价值。
4.一种用于实现如权利要求1所述方法的基于缓存价值的Spark缓存淘汰***,其特征在于,包括:改进的DAG调度模块、DAG分析模块、RDD信息管理模块、改进的节点内存模块,
改进的DAG调度模块DAGScheduler添加了对DAG分析模块和RDD信息管理模块的创建与调用;
自定义的DAG分析模块DAGAnalyzer负责分析JobDAG图,计算各RDD的初始缓存价值,并按缓存价值由高到低的顺序将RDD计算结果放入内存;
自定义的RDD信息管理模块RDDInfoManager负责在DAGScheduler标记某Stage成功完成时更新各RDD的参数信息;
改进的节点内存模块MemoryStore在节点内存不足时以Block缓存价值由低到高的顺序淘汰内存中的Block。
CN202010837412.6A 2020-08-19 2020-08-19 基于缓存价值的Spark缓存淘汰方法及*** Active CN112015765B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010837412.6A CN112015765B (zh) 2020-08-19 2020-08-19 基于缓存价值的Spark缓存淘汰方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010837412.6A CN112015765B (zh) 2020-08-19 2020-08-19 基于缓存价值的Spark缓存淘汰方法及***

Publications (2)

Publication Number Publication Date
CN112015765A CN112015765A (zh) 2020-12-01
CN112015765B true CN112015765B (zh) 2023-09-22

Family

ID=73505111

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010837412.6A Active CN112015765B (zh) 2020-08-19 2020-08-19 基于缓存价值的Spark缓存淘汰方法及***

Country Status (1)

Country Link
CN (1) CN112015765B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112597076B (zh) * 2020-12-22 2022-10-14 中国科学院软件研究所 一种面向Spark的基于数据感知的缓存替换方法及***
CN112667170B (zh) * 2021-01-12 2024-04-05 北京工业大学 一种面向滑动窗口数据分析的Spark数据缓存方法
CN115145841B (zh) * 2022-07-18 2023-05-12 河南大学 一种应用于Spark计算平台中的降低内存争用的方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631730A (zh) * 2013-11-01 2014-03-12 深圳清华大学研究院 内存计算的缓存优化方法
CN109740037A (zh) * 2019-01-02 2019-05-10 山东省科学院情报研究所 多源、异构流态大数据分布式在线实时处理方法及***
US10691597B1 (en) * 2019-08-10 2020-06-23 MIFrontiers Corporation Method and system for processing big data

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631730A (zh) * 2013-11-01 2014-03-12 深圳清华大学研究院 内存计算的缓存优化方法
CN109740037A (zh) * 2019-01-02 2019-05-10 山东省科学院情报研究所 多源、异构流态大数据分布式在线实时处理方法及***
US10691597B1 (en) * 2019-08-10 2020-06-23 MIFrontiers Corporation Method and system for processing big data

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Non-authentication based checkpoint fault-tolerant vulnerability in Spark Streaming;Tian Yazhen;《2018 IEEE Symposium on Computers and Communications (ISCC)》;全文 *
一种Spark 集群下的shuffle 优化机制;熊安萍;《计算机工程与应用》;全文 *

Also Published As

Publication number Publication date
CN112015765A (zh) 2020-12-01

Similar Documents

Publication Publication Date Title
CN112015765B (zh) 基于缓存价值的Spark缓存淘汰方法及***
Khorasani et al. Scalable simd-efficient graph processing on gpus
CN105593818B (zh) 用于调度分布式工作流程任务的装置和方法
CN103098014B (zh) 存储***
JP5733860B2 (ja) 依存問題の効率的並列計算
CN109542603B (zh) 一种提高不同优先级任务间隔离性的多维资源隔离***
KR102184280B1 (ko) 동적 파티셔닝을 이용한 데이터 프로세싱
JP2012530976A (ja) 仮想化超並列プログラマブルハードウェアによる正規表現の検索
CN108509280B (zh) 一种基于推送模型的分布式计算集群本地性调度方法
CN111897647B (zh) 一种多核***中多线程调度方法、装置及设备
CN115237580B (zh) 面向智能计算的流水并行训练自适应调整***、方法
CN112579259B (zh) 一种面向大数据处理框架的gc自适应调节方法及装置
CN109800092A (zh) 一种共享数据的处理方法、装置及服务器
Liu et al. Optimizing shuffle in wide-area data analytics
US20210390405A1 (en) Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof
CN112597076B (zh) 一种面向Spark的基于数据感知的缓存替换方法及***
CN108108242B (zh) 基于大数据的存储层智能分发控制方法
CN112231081B (zh) 云环境下基于pso-ahp的单调速率资源调度方法及***
Chen et al. Data prefetching and eviction mechanisms of in-memory storage systems based on scheduling for big data processing
CN113407343A (zh) 一种基于资源分配的业务处理方法、装置及设备
Marinho et al. LABAREDA: a predictive and elastic load balancing service for cloud-replicated databases
CN108334532A (zh) 一种基于Spark的Eclat并行化方法、***及装置
CN114063888A (zh) 数据存储***、数据处理方法、终端及存储介质
Lin et al. Joint deadline-constrained and influence-aware design for allocating MapReduce jobs in cloud computing systems
Qin et al. Dependent task scheduling algorithm in distributed system

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