摘要:基于内存进行作业计算的Spark分布式计算框架,并不考虑作业的中间计算结果,容易造成高频访问的数据块丢失,在迭代作业类型中表现更为明显。Spark通过LinkedHashMap提供的哈希表实现LRU(Least Recently Used)缓存功能,最久未被使用的元素被移动到顶部,优先被删除且造成数据的重算。针对Spark使用的LRU缓存替换算法造成高频访问但当前未被使用的热点数据被替换出缓存的问题,本文提出一种基于RDD(Resilient Distributed Datasets)重用度的Spark自适应缓存优化策略(LCRD),包括自动缓存算法、缓存自动清理算法。首先,自动缓存算法在作业执行前对Spark有向无环图进行分析,计算RDD的重用频率、RDD的算子复杂度等数据,并对影响执行效率的相关因素进行量化,根据重用度模型进行计算;在作业执行中,应用程序将重用度较高的数据块进行缓存。其次,缓存自动清理算法,在发生内存瓶颈或RDD缓存无效时,遍历缓存队列并对低频访问的数据块进行清理。实验结果表明,在选取amazon0302、email-EuAll、web-Google、wiki-Talk四种公开数据集执行PageRank迭代作业时与LRU相比,执行效率平均提升分别为10.7%、8.6%、17.9%和10.6%,内存利用率平均提升3%、4%、3%和5%。本文策略能够有效提高Spark执行效率,提升内存的利用率。
文章目录
0 概述
1 相关工作
2 问题的建模与分析
2.1 作业执行机制
2.2 内存资源模型
2.3 任务执行效率模型
2.4 RDD重用度模型
2.5 自适应缓存优化策略问题定义
3 自适应缓存优化策略
3.1 自动缓存算法
3.2 缓存自动清理算法
4 实验与分析
4.1 实验环境
4.2 实验数据集
4.3 执行效率分析
4.4 内存评估
4.5 CPU使用分析
5 结语