MapReduce工作机制总结
总结从MapReduce程序中的JobClient.runJob(conf)开始,给出了MapReduce执行的流程图(如下),并分析了流程图中的四个核心实体,结合实际代码介绍了MapReduce执行的详细流程。
MapReduce的执行流程简单概括如下:
- 用户作业执行JobClient.runJob(conf)代码会在Hadoop集群上将其启动。
- 启动之后JobClient实例会向JobTracker获取JobId,而且客户端会将作业执行需要的作业资源复制到HDFS上,然后将作业提交给JobTracker。
- JobTracker在本地初始化作业,再从HDFS作业资源中获取作业输入的分割信息,根据这些信息JobTracker将作业分割成多个任务,然后分配给在与JobTracker心跳通信中请求任务的TaskTracker。
- TaskTracker接收到新的任务之后会首先从HDFS上获取作业资源,包括作业配置信息和本作业分片的输入,然后在本地启动一个JVM并执行任务。
- 任务结束后将结果写回HDFS。
介 绍完MapReduce作业的详细流程后,还重点介绍了MapReduce中采用的两种机制,分别是错误处理机制和作业调度机制。在错误处理机制中,如果 遇到硬件故障,MapReduce会将故障节点上的任务分配给其他节点处理。如果是任务失败,则会重新执行。在作业调度机制中,主要介绍了公平调度器。这 种策略能够按照提交作业的用户数目将资源公平的分到用户的作业池中,以达到用户公平共享整个集群的目的。
最 后介绍了MapReduce中两个流程的细节,分别是shuffle和任务执行。在shuffle中,从代码入手介绍了Map端和Reduce端的 shuffle过程以及shuffle优化。shuffle的过程可以概括为:在Map端,当缓冲区内容达到阈值时Map写出内容。写出时按照key值对 数据排序,在按照划分将数据写入文件,然后进行merge并将结果交给Reduce。在Reduce端,TaskTracker先从执行Map的 TaskTracker节点上复制Map输出,然后对排序进行合并,最后进行Reduce处理。关于任务执行则主要介绍了三个任务执行的细节,分别是推测 式进行、JVM重用和执行环境。推测式执行是指JobTracker在作业执行过程中,发现某个作业执行速度过慢,为了不影响整个作业的完成进度,会启动 和这个作业完全相同的备份作业让TaskTracker执行,最后保留二者中较快完成的结果。JVM重用主要针对比较零碎的任务,对于新任务不是启动系的 呢JVM,二是在先前执行任务完毕的JVM上执行,这样节省了启动JVM的时间。在任务执行环境中主要介绍了任务执行参数的内容和任务目录结构,以及任务 临时文件夹使用情况。