经典的MapReduce1中的失败
经典的MapReduce1中的失败
在MapReduce1运行时,主要考虑三种失败的模式,运行任务失败、tasktracker失败以及jobtracker失败
1. 任务运行失败
首先考虑子任务失败的情况。最常见的情况是map任务或reduce任务中的用户代码抛出运行异常。如果发生这种情况,子任务JVM进程会在退出之前向其父tasktracker发送错误报告。错误报告最后被记入用户日志。Tasktracker将此次任务尝试标记为failed(失败),释放任务槽运行另外一个任务。
对于streaming任务,如果streaming进程以非零退出代码退出,则被标记为failed。这种行为由stream.non.zero.exit.is.failure属性(默认值为true)来控制
另一种错误情况是子进程JVM突然退出,可能由于JVM软件缺陷而导致MapReduce用户代码由于某些特殊原因造成JVM退出。在这种情况下,tasktracker会注意到进程已经退出并将此次任务尝试标记failed(失败)。
任务挂起的处理方式则有不同。一旦tasktracker注意到已经有一段时间没有收到进度的更新,便会将任务标记为failed。在此之后,JVM子进程将被杀死。任务失败的超时间隔通常为10分钟,可以以作业为基础(或以集群为基础)将mapred.task.timeout属性设置为以毫秒为单位的值。
超时(timeout)设置为0将关闭超时判定,所以长时间运行的任务永远不会被标记为failed。在这种情况下,被挂起的任务永远不会释放它的任务槽并随着时间的推移最终降低整个集群的效率。因此,尽量避免这种设置,同时充分确保每个任务能够定期汇报其进度。
Jobtracker被告知一个任务尝试失败后(通过tasktracker的心跳调用),将重新调度该任务的执行。Jobtracker会尝试避免重新调度以前尝试失败的tasktracker上的任务。此外,如果一个任务的失败次数超过4次,将不会再重试。这个值是可以设置的:对于map任务,运行任务的最多尝试次数由mapred.map.max.attempts属性控制;而对于reduce任务,则由mapred.reduce.max.attempts属性控制。在默认的情况下,如果任务任务失败次数大于4(或最多尝试次数被配置为4),整个作业都会失败。
对于一些应用程序,我们不希望一旦有少数几个任务失败就终止运行整个作业,因为即使有做任务失败,作业的一些结果可能还是可用的。在这种情况下,可以为作业设置在不触发作业失败的情况下允许任务失败的最大百分比。Map任务和reduce任务可以独立控制,分别通过mapred.max.map.failures.percent和mapred.max.reduce.failures.percent属性来设置。
任务尝试(task attempt)也是可以终止的(killed),这与失败不同。任务尝试可以被中止是因为它是一个推测副本,或因为它所处的tasktracker失败,导致jobtracker将它上面运行的所有任务尝试标记为killed。被中止的任务尝试不会被计入任务运行尝试次数(由mapred.map.max.attempts和mapred.reduce.max.attempts设置),因为尝试中止并不是任务的过错。
2. tasktracker失败
tasktracker失败是另一种失败模式。如果一个tasktracker由于崩溃或运行过于缓慢而失败,会停止向jobtracker发送心跳(或很少发送心跳)。Jobtracker会注意到已经停止发送心跳的tasktracker(假设它有10分钟没有接收到一个心跳。这个值由mapred.tasktracker.expiry.interval属性设置,以毫秒为单位)并将它从等待任务调度的tasktracker池中移除。如果是未完成的作业,jobtracker会安排此tasktracker上已经运行并成功完成的map任务重新运行,因为reduce任务无法访问它们的中间输出结果(都存放在失败的tasktracker的本地文件系统上)。任何正在运行的任务也都会被重新调度。
即使tasktracker没有失败,也可能被jobtracker列入黑名单。如果在一个特定的tasktracker上超过4个(通过mapred.max.tracker.failures设置)来自同一个作业的任务失败了,jobtracker就会将此记录为出错。如果tasktracker上面的失败任务数超过最小阈值(默认值是4,由mapred.max.tracker.blacklists设置)并远远高于集群中tasktracker的平均失败任务数,就会被列入黑名单。
列入黑名单的tasktracker不再被分配任务,但会继续和jobtracker通信。随着错误期满(每天一次的比率),tasktracker有机会再次运行作业。另外,如果
经典的MapReduce1中的失败的更多相关文章
- YARN中的失败分析
YARN中的失败分析 对于在YARN中运行的MapReduce程序,需要考虑以下几种实体的失败任务.application master.节点管理器.资源管理器 1. 任务运行失败 任务运行失败类似于 ...
- 经典的MapReduce1解析
MapReduce1任务图解 最顶层包含4个独立的实体客户端,提交MapReduce作业jobtracker,协调作业的运行.Jobtracker是一个Java应用程序,它的主类是JobTracker ...
- Android 编译Settings、Mms等模块,并Push到手机中安装失败
问题描述:在编译完Settings等相关模块后,并push到手机中安装失败(在手机中无法找到该应用),但是使用adb shell命令进入到手机中在System/app或者System/priv-app ...
- Swift中可能失败的构造器的传播(调用)和重写
import Foundation /* 可能失败构造器的传播(调用) 1.可能失败的构造器可以调用同一个类中的普通构造器 2.普通构造器不能调用同一个类中的可能失败构造器 3.结构体中, 普通构造器 ...
- (转)解决jdk1.8中发送邮件失败(handshake_failure)问题
解决jdk1.8中发送邮件失败(handshake_failure)问题 作者 zhisheng_tian 2016.08.12 22:44* 字数 1573 阅读 2818评论 6喜欢 9 暑假在家 ...
- 经典的java中return和finally问题!
经典的java中return和finally问题! 标签: 杂谈 分类: java学习 前一段时间 参加公司的笔试问了这个问题,回来一查才知道当时自己做错了,百思不得其解,上网查到下面的程序,但是运行 ...
- Airflow 重跑dag中部分失败的任务
重跑dag中部分失败的任务 例如 dagA 中, T1 >> T2 >> T3 >> T4 >> T5 ,其中 T1 T2 成功, T3 失败, T4 ...
- Effective Java 第三版——75. 在详细信息中包含失败捕获信息
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- ionic在iOS中打包失败
在ios中打包失败,遇上这样的错误 解决办法,查看index.html的权限是否是只读状态,如果是,改成可读可写,再次打包重试,成功!
随机推荐
- Unity3D delegate 用法
delegate:委托机制,不做一一说明: 功能需求1: 音量,为一事件为B: 改变音量如为0,为事件A.也触发事件B: 音量变,所有音乐,如场景,特效,角色,打斗.其所有音量都得变.为C: 思路: ...
- Android无线测试之—UiAutomator UiDevice API介绍五
屏幕旋转 一.屏幕旋转相关知识: 1)旋转方向:0度,90度(向左转),180度,270度(向右转) 2)重力感应器:重力感应器是旋转所依靠的 3)固定位置:指将屏幕方向固定在0度,90度或者180度 ...
- filter和find区别,元素遍历
转 filter和find区别 find()会在当前指定元素中查找符合条件的子元素,是对它的子集操作,而filter()则是在当前指定的元素集合中查找符合条件的元素,是对自身集合元素进行筛选. HTM ...
- SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)
(四)栏/字段 SharePoint中的字段(中文版中叫做"栏")与传统的数据栏类似,也有不同类型的区别,不过SharePoint中内置的栏类型除了按照数据类型(如数字.日期和时间 ...
- java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x87<b
实际开发中遇到的 情景: 解决方案: 复制的别人的博客,没测试, Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个 ...
- 打日志--以python为例
日志报错要去修,要不然是隐患,总有一天会爆炸 增加日志是排错的好方法,不要不舍得加日志,比如怕代码变难看,怕日志输出太多. python logging exc_info sys.exc_info() ...
- this.$apply()
chooseVideo(e) { this.fileInfo = {} let that = this wx.chooseVideo({ sourceType: ['album', 'camera'] ...
- cron_action
crontab using shell script to automate linux system maintenance tasks Linux中用crontab例行工作安排_Linux教程 ...
- QSystemSemaphore 系统级信号量
在之前的一篇文章中,我们讲过了QSemaphore类,其可以用于同步多线程.而今天要讲到的这个类,根据名字就可以猜测到,其可以在整个系统中使用,即它既可以用于多线程,也可以用于多线程.当然,这也意味着 ...
- MySQL中Btree和Hash的局限小结
在索引中,Btree索引和Hash索引的局限性,在这里粗略罗列一下 1 Btree局限 B-树中的节点都是顺序存储的,所以可以利用索引进行查找(找某些值),也可以对查询结果进行ORDER BY(注意O ...