在开始描述Jobtracker,Tasktracker,Task失败之前,先回顾下Jobtracker,Tasktracker以及Task的功能。
一:概述
hadoop采用的是Master/Slaves结构。Master的作用就是对整个集群进行状态监控,任务调度,作业管理。Jobtracker就是MapReduce中的Master。同理,Slaves负责执行任务和执行任务状态的返回,也就是TaskTracker
Jobtracker:
1:通过heartbeat机制来监控作业状态,作业的进度,以及作业的健康程度。
2:负责把一个作业分解成多个任务。
3:资源的管理。
4:下达命令,由Tasktracker来执行。
Tasktracker:
1:Tasktracker就是Jobtracker和Task直接的桥梁(也可以理解为一个节点的mapreduce的管理者)。
2:Jobtracker负责收集该几点机器的信息比如:机器的健康信息,机器的资源使用情况。也包括任务的信息比如:任务的
进度和任务的健康情况。最后通过hearbeat机制发送给Jobtracker。
启动任务(LaunchTaskAction)、提交任务(CommitTaskAction)、杀死任务
(KillTaskAction)、杀死作业(KillJobAction)和重新初始化(TaskTrackerReinitAction)。
二:Task失败分析
1:Task失败原因和参数修改
Task任务失败的原因有两个:
1)Map端或者Reduce端导致的JVM异常退出从而导致Tasktracker把Task attempt标记为fail。
2)任务的挂起导致Tasktracker标记任务为fail。
JVM异常退出导致的任务失败:
Task分为MapTask和ReduceTask。大多数Task失败都是Map或者Reduce端发生异常而导致的。如果这种情况发生,JVM会在退出
之前向Tasktracker发送错误信息。错误信息记录在用户的日志中,并且Tasktracker会把这次任务尝试(task attemp)标记为fail。最
后释放槽以便能够执行其他任务。
还有中异常是JVM突然发生错误,比如JVM内部的错误,或者用户MapReduce代码原因。这种情况Tasktrack会注意到进程
已经退出,依然会把这次任务尝试(task attemp)标记fail。
任务挂起导致的任务失败:
当Tasktrack经过一段时间没有收到任务的进度更新,则会把这个任务标记为fail。在此之后,会把这个JVM子进程给kill掉,
任务的超时时间间隔通常为10分钟。此设置可以修改:把maped.task.timeout属性设置为自己想要的时间即可,单位好毫秒。
需要注意的是如果把超时时间设置为0,那么代表挂起的进程永远不会过时,不会被kill,导致挂起的槽永远不会释放它的槽,
导致其他任务无法获取它的槽,最终导致hadoop集群的效率低下。
最大力度减少任务失败的影响:
hadoop默认情况下,当一个任务连续4次都是失败的,那么会导致整个作业的失败(这个影响其实还是挺大的,浪费半天时间和精
力最终功亏一篑)。下面给出两个方案来解决这个问题:
maped.map.max.attemps,
如果修改的参数比较小,减少hadoop无谓的开销,如果修改比较大则可能下一次任务可能成功。ps:站在hadoop集群这方看这个
问题就是:1:执行失败就滚蛋,给老子省点资源,好多人等着作业呢:2:万一下次作业成功了呢,那么前面的工作也不算白费。
mapred-site.xml内的参数为
<property>
<name>mapred.max.map.failures.percent</name>
<value>5</value>
</property>
重启jobtracker (hadoop-daemon.sh stop/start jobtracker) 。
参数含义:
5代表的意思为百分比,假如有100个map,100*5%=5,则代表这如果有小于等于5个map任务失败,那么该作业会继续工作。
修改reduce端参数改为mapred.max.reduce.failures.percent即可。
三:Tasktracker失败分析
如果某tasktracker崩溃或者运行过于缓慢而执行,会停止或者很少想Jobtracker发送信息。Jobtracker会注意到tasktracker
已经停止向Jobtracker发送heartbeat信息(如果10分钟没有收到heartbeat信息,这由maped.tasktracker.expiry.interval
属性来设置),会将它从等待任务调度的tasktracker池中移出。
四:Jobtracker失败分析
Jobtracker失败是所以失败中最严重的一种,一定会导致整个作业的失败。