【技术实现步骤摘要】
一种基于动态容量的Spark内存替换方法
[0001]本申请涉及大数据Spark计算引擎
,更具体地说,尤其涉及一种基于动态容量的Spark内存替换方法。
技术介绍
[0002]Apache Sprak是一种专为大规模数据处理而设计的快速通用的计算引擎,其拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark被广泛应用于数据挖掘与机器学习等需要迭代的MapReduce的算法中。在原始的Spark中,计算引擎会将数据文件储存在内存中用以降低该数据下次被使用时的读写开销。当内存空间不足以存储新的RDD(resilient distributed dataset)数据文件时,Spark引擎会调用替换算法淘汰旧RDD,读入新RDD。当前Spark计算引擎常用的替换算法是LRU(least recently used,最近最少使用)该算法记录每一个RDD自上次被使用以来所经历的时间t,当需要淘汰一个RDD时,该算法会选择现有 ...
【技术保护点】
【技术特征摘要】
1.一种基于动态容量的Spark内存替换方法,其特征在于,包括以下步骤:S1、配置算法:配置第一替换算法:LRU算法;以及第二替换算法:基于权重和依赖计数算法;S2、缓存计算:当有新的RDD数据文件需要存储时,遍历维护的RDD表,并计算其中RDD平均值,根据所述RDD平均值与Spark中StorageManager可用内存空间的比值,进行替换算法的选用;S3、RDD划分:当触发选用所述第二替换算法时,在利用Spark中的DAGScheduler分析Stage时维护一个RDD依赖计数表,基于此表将Stage内的已有RDD分为有依赖计数和无依赖计数的两个表进行维护;每当Spark中的一个Task计算完成,便将使用过的RDD的依赖计数减一,若该RDD的依赖计数减少为0,则将该RDD从有依赖计数队列转移至无依赖计数队列;S4、权重计算:随后获取参数—RDD数据大小、RDD依赖关系以及RDD使用次数;通过获取的参数值加权计算已有RDD的权重大小;S5、数据缓存:确认无依赖计数的RDD表是否为空:若不为空,则在无依赖计数的RDD表中按权重大小从小到大的顺序将已有RDD逐个驱逐出内存,每次驱逐完成后检查剩余空间,直到足够缓存新的RDD则停止驱逐;若为空,则遍历有依赖计数的RDD表,以同样的方法逐个驱逐已有RDD,直到空间足够容纳新的RDD。2.根据权利要求1所述的基于动态容量的Spark内存替换方法,其特征在于,在步骤S2中,所述替换算法选用的具体规则为:若所述RDD平均值小于StorageManager的可用内存空间的20%时,选用所述第一替换算法进行缓存替换;若所述RDD平均值大于等于StorageManager的可用内存空间的20%时,选用所述第二替换算法进行缓存替换。3.根据权利要求1所述的基于动态容量的Spark内存替换方法,其特征在于,在步骤S4中,获取所述RDD数据大小的具体步骤步骤:S1、将RDD的计算分区进行,其任务分配至Spark的多个Executor上执行;S2、在任务的运行过程中RDD需要存储,通过Spark的BlockManager请求数据缓存,随后运用acquireMemory方法测试内存中是否有足够的缓存空间;S3、接着根据测试得到的所述缓存空间计算得到所述RDD数据大小。4.根据权利要求3所述的基于动态容量的Spark内存替换方法,其特征在于,所述RDD数据大小计算表达式具体为:其中,S
acquireMemory
为运用a...
【专利技术属性】
技术研发人员:王进,张睿涵,张经宇,王磊,王静,王建新,
申请(专利权)人:长沙理工大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。