MapReduce的运行流程简单概括例如以下:用户作业运行JobClient.runJob(conf)代码会在Hadoop集群上将其启动。启动之后JobClient实例会向JobTracker获取JobId。并且client会将作业运行须要的作业资源拷贝到HDFS上,然后将作业提交给JobTracker。JobTracker在本地初始化作业,再从HDFS作业资源中获取作业输入的切割信息。依据这些信息JobTracker将作业切割成多个任务,然后分配给在与JobTracker心跳通信中请求任务的TaskTracker。
TaskTracker接收到新的任务之后会先从HDFS上获取作业资源,包含作业配置信息和本作业分片的输入,然后在本地启动一个JVM并运行任务。任务结束之后将结果写回HDFS。
MapReduce中採用的两种机制。各自是错误处理机制和作业调度机制。在错误处理机制中,假设遇到硬件故障,MapReduce会将故障节点上的任务分配给其它节点处理。
假设遇到任务失败,则会又一次运行。在作业调度机制中,主要是公平调度器。这样的调度策略可以依照提交作业的用户数目将资源公平的分到用户的作业池中。以达到公平共享整个集群的目的。
最后介绍一下MapReduce中两个流程的细节,各自是shuffle和任务运行。shuffle的过程能够概括为:在map端。当缓冲区内容达到阈值时Map写出内容。写出时依照key值对数据排序。再依照划分将数据写入文件,然后进行merge并将结果交给Reduce。在Reduce端,TaskTracker先从运行Map的TaskTracker节点上复制Map输出,然后对排序合并,最后进行Reduce处理。
关于任务运行则主要介绍三个任务运行的细节,各自是猜測式运行、JVM重用和运行环境。猜測式运行是指JobTracker在作业运行过程中。发现某个作业运行速度过慢。为了不影响整个作业的完毕进度,会启动和这个作业全然同样的备份作业让TaskTracker运行,最后保留而这样的较快完毕的结果。JVM重用主要是针对照较零碎的任务。对于新任务不是启动新的JVM,而是在先前任务运行完毕的JVM上直接运行。这样节省了JVM启动的时间。