● 摘要
Apache Hadoop系统是MapReduce编程模型和Google文件系统的开源实现,它在数据密集型应用中广泛使用。通过监控Hadoop集群的物理资源(内存、网络带宽和CPU)利用率、分析MapReduce作业的执行日志发现,Hadoop所实现的MapReduce系统在Shuffle过程中存在一些问题,主要表现在两个方面:一是集群的物理资源利用率低;二是在执行数据密集型MapReduce作业过程中,集群存在大量的随机IO请求,导致Shuffle过程的执行效率低,整个作业的执行时间长。本文通过研究Hadoop MapReduce系统框架结构和MapReduce作业执行过程,分析并总结影响Shuffle过程执行效率的两个主要因素:一是MapReduce作业执行过程中不同阶段对CPU、网络带宽、内存的使用情况存在很大差异,不同的阶段绑定在同一个任务(Task)中,导致集群物理资源利用率低;二是Shuffle过程中默认的数据传输策略导致本地磁盘随机IO请求过高,磁盘读性能差。本文进一步提出了针对上述问题的优化方案:首先将Shuffle过程从Reduce Task中分离,形成独立的Shuffle,并进一步将Shuffle重构为公共服务(Shuffle Service)的形式,解决MapReduce系统中不同资源密集型的操作绑定在同一个Task内导致集群物理资源利用率低的问题;在此基础上,对MapReduce系统Shuffle过程中的数据传输策略进行优化,将影响磁盘读性能的多个因素作为权衡Reduce请求响应顺序的标准,基于多维度因素对请求进行排序,转化随机的IO请求为顺序请求,解决MapReduce系统在Shuffle过程中随机IO请求高的问题。本文按照问题定义、问题分析、解决方案设计、系统实现的步骤对MapReduce系统中Shuffle过程的优化过程进行详细阐述。最后设计了两类实验对系统进行分析评估:仿真验证实验结果表明,本文提出的优化策略可以降低数据传输过程中的随机IO,提高磁盘的读性能;真实集群作业对比实验结果表明,本文提出的优化方案可以提高Hadoop MapReduce系统的效率,缩短MapReduce作业执行时间。本文提出的优化方案对多种数据处理系统的优化问题均有一定参考价值。