论文部分内容阅读
随着互联网和移动终端的高速发展并运用于每个企业及个人,产生的信息数据呈几何数量级增长,人类早已进入一个“信息大爆炸”的时代。如何高效而又稳定地处理这些海量数据,成为一个迫在眉睫的问题。Hadoop正是在这样一个时代背景之下产生的一个开源分布式计算平台,它可以充分利用集群的计算和存储能力,完成大数据的处理。Hadoop 以 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce(Google MapReduce的开源实现)为核心,为用户提供系统底层细节透明的分布式基础架构。作为Hadoop核心组件的MapReduce是一种编程模型,用于大规模数据集的并行运算,其对Hadoop在大数据的处理过程中的性能和效率起着关键性和决定性作用。本文首先介绍了 Hadoop和MapReduce的产生背景,并对MapReduce的功能作了简单描述;对MapReduce执行流程和架构进行分析,对MapReduce的各个细节作了介绍。接着,本文从源码角度出发分析了 MapReduce作业的执行过程,其中对作业的整个执行过程所涉及的核心功能代码作了着重分析。当一定比例的Map任务执行完成后,Reduce节点就会拷贝这些Map任务的输出数据,直到所有数据拷贝完毕才开始真正的Reduce操作。这个从Map端产生数据到Reduce端拷贝这些数据的过程称为Shuffle。Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方,集中了 MapReduce过程最关键的部分,Shuffle的过程包含的细节多且横跨Map与Reduce两端,理解Shuffle的过程,有利于对MapReduce作业性能调优。在现实的集群中,Map端和Reduce端往往分配在不同的机器上,所以拷贝Map输出结果数据必须经由网络传输,并且,往往Map节点数目很大,而Reduce节点数量一般只有少量几台甚至一台。此外,MapReduce作业的大部分工作是在Map端完成的,产生的结果数据也就相对较大。因此,Reduce端要经过网络拷贝的Map结果数据量是相当可观的。网络带宽一直是大规模集群的宝贵资源,大量的结果数据由网络传输相当耗时,并且容易出错,因此,Reduce端对Map端大量的结果数据的拷贝过程是MapReuce作业执行的性能瓶颈。本文详细分析了 Shuffle的过程,并在之前章节对源码分析的基础上,提出自己的改进思想:对Map节点上同一作业的多个Map任务所产生的大量临时结果数据做总的合并,取代原有MapReduce架构对单个Map任务的结果数据做合并的机制,解决原有的一个Map节点上结果数据个数多和数据量大,并且Reduce端拷贝这些数据过于耗时和失败率高的问题。该改进方案减少了 Map节点的输出结果数据量,以达到大量减少整个集群的网络传输数据量,并降低数据传输失败率,让MapReuce作业的执行时间在一定程度上减少,从而提升MapReuce的执行性能。