MapReduce中,如果maptask运行失败怎么处理?程序源代码共 1436字,需浏览 3分钟 ·2020-08-12 12:28 一 常见容错场景分析 1.1作业某个任务阻塞了,长时间占用资源不释放 1.2在MapTask任务运行完毕,ReduceTask运行过程中,某个MapTask节点挂了,或者某个MapTask结果存放的那磁盘坏掉了 二 作业某个任务阻塞了,长时间占用资源不释放 这种问题通常是由于程序bug,数据特性造成的,会让程序阻塞,任务运行停滞不前。在我们表面上看来是任务停滞不前。 这种问题经常发生,任务长时间占用着资源不释放,如果不采取一定手段,可能会永远被占用,造成资源泄露。 在TaskTracker,每个任务会定期向TaskTracker汇报进度,如果进度不变则不汇报,这样一旦达到超时限制,TaskTracker会杀掉该任务,并将任务状态KILLED汇报给YARN,从而重新调度该任务。 在实际应用场景中,有些正常的作业,其任务可能长时间没有读入或者输出,比如读取数据库的MapTask或者需要连接其他外部系统的Task,对于这类应用,在编写Mapper或Reducer时,应当启动一个额外的线程通过Reporter组件定期向TaskTracker汇报心跳(只是告诉TaskTracker自己还活着,不要把我杀了)。 三 在MapTask任务运行完毕,ReduceTask运行过程中,某个MapTask节点挂了,或者某个MapTask结果存放的那磁盘坏掉了 Case1:如果节点挂掉,JobTracker通过心跳机制知道TaskTracker死掉了,会重新调度之前正在运行的Task和正在运行的作业中已经运行完成的MapTask Case2:如果节点没有挂,只是存放MapTask结果的磁盘损坏了,则分两种情况 #所有的ReduceTask已经完成shuffle阶段 #尚有部分ReduceTask没有完成shuffle阶段,需要读取该MapTask任务 对于第一种情况,如果所有ReduceTask一路顺风地运行下去,则无需对已经运行完成的MapTask作任何处理,如果某些ReduceTask一段时间后运行失败了,则处理方式与第二种一样。 对于第二种情况,当ReduceTask远程读取那个已经运行完成的MapTask结果(但结果已经损坏)时,会尝试读取若干次,如果尝试次数超过了某个上限值,则会通过RPC告诉所在的TaskTracker该MapTask结果已经损坏,而TaskTracker则进一步通过RPC告诉JobTracker,JobTracker收到该消息后,会重新调度该MapTask,进而重新计算生成结果。 原文: cnblogs.com/OYziqing/p/10382372.html --end-- 扫描下方二维码 添加好友,备注【交流群】 拉你到学习路线和资源丰富的交流群 浏览 40点赞 评论 收藏 分享 手机扫一扫分享分享 举报 评论图片表情视频评价全部评论推荐 MapReduce源码解析之MapTaskMapper 源码分析了MapReduce提交任务过程中主要的切片计算之后,接下来就要看计算程序到达切片所在数据节点后,该如何进行工作。public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {/** * The <code&...Kafka如果丢了消息,怎么处理的?JAVA葵花宝典0Kafka如果丢了消息,怎么处理的?公众号程序猿DD0图像处理怎么入门新机器视觉0CPU中的程序是怎么运行起来的嵌入式Linux0C++核心准则E.26:如果无法抛出异常,尽快进行失败处理面向对象思考0CPU中的程序是怎么运行起来的李肖遥0CPU中的程序是怎么运行起来的良许Linux0JavaScript 是怎么运行起来的?前端宇宙0JavaScript 是怎么运行起来的?脑洞前端0点赞 评论 收藏 分享 手机扫一扫分享分享 举报