论文部分内容阅读
由于Hadoop MapReduce等大数据处理平台的处理性能一直在不断提升,使得大数据处理成为了IT业界内最受关注的领域。在这些大数据处理平台中,Spark框架从被提出来之后变得越来越流行。相对于传统的Hadoop MapReduce编程模型的key-value编程,Spark的编程模型中提供了更多对于集合操作的支持使得Spark编程本身更容易学习使用。由于Spark的是一个完全在内存中计算的框架,它相对于Hadoop MapReduce在性能上有极大的提升。当Spark任务发生失败或者RDD读取未中的时候,Spark会重新计算丢失RDD的依赖路径(lineage)上所有丢失RDD。一个非常长的依赖路径不仅会增加重新计算的代价,同时也会耗费更多的时间与空间代价。Spark中的检查点会切断RDD的依赖关系同时将数据存储到磁盘上,检查点频率的选择会极大的影响整个程序的性能。但是原生Spark检查点需要由应用程序开发人员来进行设置,检查点的设置过于频繁会使系统性能下降。或者当系统配置变更后原有应用程序上的检查点设置可能并不会很好的适应新的系统环境。本文在研究与分析Spark源代码并进行验证实验的基础上,发现了相应模块上的不足。针对发现的问题探索设计并实现三种在Spark上的自动化检查点策略来解决由长依赖路径带来的额外开销,同时使得检查点给性能本身带来的影响较小。这个自动化的检查点主要具有以下功能:1)根据RDD依赖路径关系自动选择正确的检查点数据进行保存。在Spark应用的一次任务过程中会产生非常多的RDD,在进行检查点数据保存时,挑选出依赖路径上关键RDD数据进行保存。2)选择合适的检查点执行时间。根据内存使用情况以及检查点执行耗时等影响因素来平衡选择检查点执行时机,在不造成过多额外时间开销的情况下提高应用程序模块的运行效率。3)自动清理已经过期的检查点数据。在新的检查点完成之后删除之前保存且并不需要的检查点数据。采用SSD来存储检查点数据以提高存储读写效率。在设计与实现自动化检查点之后,本文针对自动化检查点的实现进行了测试。在多次的迭代的应用场景下,基于内存使用率以及作业时间的自动化检查点策略在整体性能上优于其他设计方案,并且能自主调整检查点触发条件阈值,自动适应各种不同的任务输入。