论文部分内容阅读
在大规模数据的分析处理中,以Hadoop、Spark为代表的Map Reduce数据并行处理系统被众多行业广泛使用。在Map Reduce并行计算模型中,Shuffle负责连接Map阶段和Reduce阶段,是整个数据中转的枢纽,涉及磁盘读写和数据跨节点传输,深刻影响着整个计算的效率。然而,现有大数据处理系统的Shuffle框架在稳定性和计算性能方面还存在一些问题。一方面,随着应用数据规模的扩大,用户通常会采用更多计算节点进行处理。更多计算节点的加入意味着Shuffle需要在更大节点范围内进行数据中转,因此发生故障的概率更高。当前的计算作业通常利用重计算的方式缓解Shuffle故障造成的影响,但是这大大降低了计算性能和资源利用率。另一方面,Shuffle并行度对性能的影响也很大,Shuffle并行度过小会难以充分利用计算资源提升处理速度,Shuffle并行度过大又容易造成更多的网络通信开销从而影响性能。在实际应用中,应用开发程序员难以根据输入数据和集群资源手工设置合理的Shuffle并行度。为了解决现有Shuffle机制在实际应用中稳定性差、性能低以及Shuffle并行度手工设置难度大的问题,本文研究并提出了基于数据多副本模型与基于文件预合并机制的两种分布式Shuffle数据读写优化模型,以及面向Shuffle并行度自适应调优的并行计算优化方法,并且在当前主流的大数据处理系统Spark上实现了本文提出的方案。本文的主要工作与贡献点包括:(1)为提升大数据处理系统的Shuffle数据读写性能与稳定性,研究提出了通用的抽象分布式Shuffle数据读写性能优化模型——基于数据多副本模型的Shuffle模型与基于文件预合并机制的Shuffle模型。(2)在上述基本模型基础上,基于主流大数据系统Spark,研究实现了基于数据多副本模型的Shuffle框架,利用分布式文件系统提供多副本模型能力,对Shuffle数据进行备份,以多副本I/O操作交换重计算开销,以此提高系统的稳定性和容错能力。为提升备份数据查找效率,研究提出了基于计算作业结构的层次化索引方法。(3)基于主流大数据系统Spark,进一步研究实现了基于文件预合并机制的Shuffle框架以提升数据读写性能。该框架利用Task先后完成的时间差,按照分区拼接的方式合并Shuffle文件,减少了Shuffle数据读取过程中网络I/O通信及磁盘寻道次数,提升了Shuffle数据读写性能。为了提升文件预合并机制的性能,研究提出了部分文件预合并机制以及数据本地性优先的合并调度策略。(4)在优化了Shuffle数据读写性能后,为解决Shuffle并行度手工设置难度大的问题,研究提出了基于机器学习模型与智能化搜索算法相结合的Shuffle并行度自适应调优方法。该方法使用回归模型构造性能预测模型,以刻画包括Shuffle并行度在内的作业特征与作业运行时间的关系,并且通过该模型的预测结果指导网格搜索算法,以找出使模型预测作业最短运行时间的最优Shuffle并行度,从而将最优Shuffle并行度配置到作业的后续计算中,提升作业整体运行性能。(5)实验结果表明,本文提出的分布式Shuffle数据读写性能优化框架能提供100%的稳定性,在Shuffle失败场景下至少能提升作业5%到30%的性能,在作业被切分成多个小任务的场景下能提升作业15%到40%的性能;本文提出的Shuffle并行度自适应调优方法得出的Shuffle并行度相较作业默认值显著地缩短了运行时间,平均提升20%左右的作业性能。(6)作为一个实际落地应用案例,本文所实现的Spark Shuffle数据读写性能优化方法和系统已部署在字节跳动的生产环境中,支持前端的今日头条和抖音等系统业务,系统稳定运行一年以上,覆盖超过57%作业的Shuffle数据,平均提升作业12%左右的性能,为数据分析师、数据工程师等用户提供稳定快速的查询分析与数据处理功能。