Hadoop中任务推测执行

网友投稿 294 2022-11-24

Hadoop中任务推测执行

作业完成时间取决于最慢的任务完成时间 一个作业由若干Map任务和Reduce任务构成,但因硬件老化,软件BUG,某些任务可能运行非常慢 典型案例:系统中有 99%的 Map 任务都完成了,只有少数几个 Map 老是进度很慢,完不成,怎么办? 推测执行机制 发现拖后腿的任务,比如某个任务运行速度远慢于任务平均速度,为拖后腿任务启动一个备份任务,同时运行,谁先运行完,就用谁的结果 执行推测任务的前提条件 (1) 每个task只能一个备份任务 (2)当前job已完成的task必须不小于5% (3)开始推测执行参数设置 修改mapred-site.xml 默认是打开的 mapreduce.map.speculative true If true, then multiple instances of some map tasks may be executed in parallel. mapreduce.reduce.speculative true If true, then multiple instances of some reduce tasks may be executed in parallel. 不能启用推测执行机制情况 (1) 任务间存在严重的负载倾斜 比如两个节点 第一个节点跑90%的任务,第二个节点跑的少 (2)特殊任务,比如任务向数据库中写数据 算法原理 假设某一个时刻,任务T的执行进度为process,可以通过一定的算法推测出该任务的最终完成时刻, estimateEndTime,另一方面,如果此刻为该任务启动一个备份任务,则可以推断出它可能完成时刻,estimateEndTime,则可以退出公式 estimateEndTime = estimatedRunTime + taskStartTime 推测执行完时刻 60 = 推测运行时间(60s) + 任务启动时刻(0) estimatedRunTime = (currentTimestamp - taskStartTime) / progress 推测运行时间(60s) =(当前时刻(6) - 任务启动时刻(0)) / 任务运行比例(10%) estimateEndTime` = currentTimestamp + averageRunTime 备份任务推测完成时刻(16) = 当前时刻(6) + 运行完成任务的平均时间(10s) MR总是选择(estimateEndTime- estimateEndTime ` )差值最大的任务,并为之启动备份任务。 为了防止大量任务同时启动备份任务造成的资源浪费,MR为每个作业设置了同时启动的备份任务数目上限。 推测执行机制实际上采用了经典的优化算法:以空间换时间,它同时启动多个相同任务处理相同的数据,并让这些任务竞争以缩短数据处理时间。显然,这种方法需要占用更多的计算资源。在集群资源紧缺的情况下,应合理使用该机制,争取在多用少量资源的情况下,减少作业的计算时间。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解
下一篇:利用Fir-eAPI SDK开发IEEE1394b设备驱动程序设计
相关文章

 发表评论

暂时没有评论,来抢沙发吧~