论文部分内容阅读
大数据计算框架Spark运用内存空间极大提升了任务的执行效率,但由于内存空间的局限性,Spark任务常常因为内存瓶颈导致执行效率低下,甚至任务失败,这与框架本身的缺陷和RDD(Resilient Distributed Datasets)的缓存策略密切相关。Spark自诞生至今,一直采用LRU(Least Recently Used)作为缓存替换算法,但由于Spark的缓存调度器无法准确预测整个任务数据的使用情况,导致部分情况下LRU算法效果欠佳。为了减小任务执行时间,提升内存利用率,通过解析Spark的任务结构,对其进行一定的优化,并获取整个任务过程中数据和内存的使用情况,通过分析结果优化现有的缓存策略,这是本文研究的重点。本文首先对Spark现有的缓存机制进行分析,比较不同缓存方式对于任务性能的影响,通过实际例子证明现有的缓存策略还有较大的优化空间。接着提出了任务结构分析和任务结构优化的方法,对于任务结构分析,通过动态分析的方法提取出Spark任务的关键信息,根据RDD之间的依赖关系解析出整个任务的依赖关系图,同时解析出任务运行过程中数据和内存的使用情况;对于任务结构优化,在获取了Spark的任务信息后,通过调整Stage的位置使得任务计算过程中同一RDD的使用更加集中,减少了内存替换的概率,提高了整个任务的执行效率。在分析和优化任务结构的基础上,提出了RDD权重的概念,综合多种影响RDD使用情况的因素,包括使用次数、大小、跨度、分区与核数比例、计算代价等,建立了合理的RDD权重模型。基于RDD权重模型,本文提出了一种新的缓存替换策略,RWR(RDD Weight Replace)缓存替换策略,确保内存替换过程中相对更有价值的数据能够缓存至内存中,用于提高缓存命中率和内存利用率,减少因为内存瓶颈造成的计算错误,在一定程度上提高了Spark框架的容错性能。最后通过对比实验,结合多种负载用例,通过运行单个任务、调整集群配置、混合多种任务等方式,对默认未修改的Spark和优化后的Spark进行实验对比,实验结果表明,本文提出的任务结构优化策略和缓存替换策略能够有效提高任务执行效率。