MapReduce编程实战之“工作原理”



本篇简单剖析MapReduce1.0和MapReduce2.0(yarn)的工作机制。


MapReduce1.0工作原理


运行整体图




作业执行过程


关于作业的执行过程,大致分为:提交、初始化、分配任务、执行任务、更新状态、完成 这6个步骤,可以根据以上运行图,自行考虑在这个作业的执行过程中,以上4个独立的实体(客户端、JobTracker、TaskTracker、HDFS)都承担了哪些任务,进行了哪些工作,你考虑的就是对的。不信,翻翻《Hadoop权威指南》第六章验证一下吧大笑


MapReduce2.0(Yarn)工作原理


Yarn框架介绍


参考网址:http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/


运行整体图




调度机制


(1)缺省为先入先出队列调度

(2)支持公平调度器

(3)支持容量调度器


任务优化执行


(1)推测式执行:即如果JobTracker发现有拖后腿的任务,会再启动一个相同的备份任务,然后哪个先执行完就会kill另一个。因此在监控网页上经常能看到正常执行完的作业有被kill掉的任务。

(2)推测式执行缺省打开,但如果是代码问题,并不能解决问题,而且会使集群更慢,通过在mapred-site.xml配置文件中设置mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution可为map任务或reduce任务开启或关闭推测式执行。

(3)重用JVM,可以省去启动新的JVM消耗的实际,在mapred-site.xml配置文件中设置mapred.job.reuse.jvm.num.tasks设置单个JVM上运行的最大任务数(1,>1或-1表示没有限制)。

(4)忽略模式,任务在读取数据失败2次后,会把数据为证告诉JobTracker,后者重新启动该任务并且在遇到所记录的坏数据时直接跳过(缺省关闭,用SkipBadRecord方法打开)。


错误处理机制:硬件故障


(1)硬件故障是指JobTracker故障或TaskTracker故障。

(2)JobTracker是单点,若发生故障目前hadoop还无法处理,唯有选择最牢靠的硬件作为JobTracker。

(3)JobTracker通过心跳(周期1分钟)信号了解TaskTracker是否发生故障或负载过于严重。

(4)JobTracker将从任务列表中移除发生故障的TaskTracker。

(5)如果故障节点在执行map任务并且尚未完成,JobTracker会要求其他节点重新执行此map任务。

(6)如果故障节点在执行reduce任务并且尚未完成,JobTracker会要求其他节点继续执行尚未完成的reduce任务。


错误处理机制:任务失败


(1)由于代码缺陷或进程崩溃引起任务失败。

(2)Jvm自动退出,向TaskTracker父进程发送错误信息,错误信息也会写入到日志。

(3)TaskTracker监听程序会发现进程退出,或进程很久没有更新信息送回,将任务标记为失败,标记失败任务后,任务计数器减去1以便接受新任务,并通过心跳信号告诉JobTracker任务失败的信息。

(4)JobTracker获悉任务失败后,将把该任务重新放入调度队列,重新分配出去再执行。

(5)如果一个任务失败超过4次(可以设置),将不会再被执行,同时作业也宣布失败。


相关内容