【转载】hadoop之failed task任务和killed task任务
failed task可理解为自杀,也就是task本身出了问题而自杀;killed task可理解为是他杀,也就是jobtracker认为这个任务的执行是多余的,所以把任务直接杀掉。起初用hadoop的时候经常在一个 complete的job中看到几个failed 或者是 killed task,还经常好奇为什么有的时候task的失败不会影响到整个job的失败,而有的时候就会使整个job的失败,到底failed和killed task对整个job的影响是什么?
failed task
failed task出现的原因可分为以下几种情况:
1 child
task失败,比如map/reduce任务中抛出了异常,child JVM会将这个error汇报给tasktracker,tasktracker再回将这个error汇报给jobtracker
2 child
JVM失败,比如启动child
task的JVM本身出现了bug,导致进程直接死掉,此时tasktracker会知道child JVM已经退出,并汇报给jobtracker此次task attempt失败
3 任务超时,如果某个任务很长时间都没有更新状态,则认为任务超时。有的任务虽然执行时间非常长,但它不停的在更新自己的状态,所以系统也不会认为这是个超时任务
4
tasktracker由于软件或硬件的原因直接挂掉了。对于这种情况,tasktracker会停止向jobtracker发送心 跳,jobtracker会认为这是个dead node并把该节点加入黑名单,从此不再给这个节点分配任务,直到问题被修复后tasktracker重新汇报心跳。我遇到最囧的情况就是当各节点 hosts不一致的时候,会出现tasktracker向jobtasker发送心跳,但jobtracker不能正确向tasktracker,形成了 半死不活的节点~。
hadoop本身的一个设计理念就是在普通的pc硬件上构建高可靠性的系统,任何failed task都不会引起整个job的失败,因为所有失败的任务都会被重新执行(reschedule execution),只有当重新执行的次数超过4次,才会把这任务标记为失败,导致整个job的失败。
killed task
在介绍killed task之前,先介绍一下speculative execution。举个简单的例子,如果某个job有2000个map task,已经完成了1999个,只剩下一个task由于硬件比较慢而成为拖尾任务,为了减少拖尾任务对整个job运行时间的影响,jobtracker 会重新启动一个一模一样的duplicate task和原有的task并行的执行,这样有一个task执行成功,整个map过程就会结束。speculative execution只有个处理拖尾任务的优化策略,并不能提高系统的可靠性。
介绍完speculative
execution后我们来看看killed task的情况。killed
task可能在两种情况下发生,一个是speculative execution中两个并行duplicate task中如果有一个执行成功,另一个将被kill掉;第二种情况是如果某个tasktracker挂了,那么正在该节点上面跑的任务都将被标记为 killed
转自 http://hi.baidu.com/krazymm/blog/item/c21db2183d0db88687d6b683.html
【转载】hadoop之failed task任务和killed task任务的更多相关文章
- hadoop记录-MapReduce之如何处理失败的task(转载)
1.1作业某个任务阻塞了,长时间占用资源不释放 1.2在MapTask任务运行完毕,ReduceTask运行过程中,某个MapTask节点挂了,或者某个MapTask结果存放的那磁盘坏掉了 在Task ...
- (转载)Hadoop map reduce 过程获取环境变量
来源:http://www.linuxidc.com/Linux/2012-07/66337.htm 作者: lmc_wy Hadoop任务执行过程中,在每一个map节点或者reduce节点能获取 ...
- hadoop MapReduce - 从作业、任务(task)、管理员角度调优
Hadoop为用户作业提供了多种可配置的参数,以允许用户根据作业特点调整这些参数值使作业运行效率达到最优. 一 应用程序编写规范 1.设置Combiner 对于一大批MapReduce ...
- Task.Factory.StartNew和Task.Run
在系统中单开线程进行操作,经常用到Task,发现Task主要有以下两种方法 Task.Factory.StartNew(() => { }); Task.Run(() => { }); 初 ...
- 捕获Task.WhenALl返回的Task的Exception
如果有一个任务抛出异常,则Task.WhenAll 会出错,并把这个异常放在返回的Task 中.如果多个任务抛出异常,则这些异常都会放在返回的Task 中.但是,如果这个Task 在被await 调用 ...
- .NET 中 如果一个Task A正在await另一个Task B,那么Task A是什么状态
新建一个.NET Core控制台程序,输入如下代码: using System; using System.Threading; using System.Threading.Tasks; class ...
- await Task.Yield()和await Task.CompletedTask有什么不同
有时候我们在代码中要执行一些非常耗时的操作,我们不希望这些操作阻塞调用线程(主线程)的执行,因为调用线程(主线程)可能还有更重要的工作要做,我们希望将这些非常耗时的操作由另外一个线程去执行,这个时候就 ...
- 【转载 Hadoop&Spark 动手实践 2】Hadoop2.7.3 HDFS理论与动手实践
简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Go ...
- [转载]hadoop SecondNamenode详解
SecondNamenode名字看起来很象是对第二个Namenode,要么与Namenode一样同时对外提供服务,要么相当于Namenode的HA.真正的了解了SecondNamenode以后,才发现 ...
随机推荐
- MyBatis 动态SQL注意事项
- 图片上传jQuery插件(兼容IE8)
图片上传jQuery插件(兼容IE8) 代码来源 :https://github.com/zilan93/uploadImg html <!DOCTYPE html> <ht ...
- LevelDb日知录之五:MemTable详解
[LevelDb日知录之五:MemTable详解] LevelDb日知录前述小节大致讲述了磁盘文件相关的重要静态结构,本小节讲述内存中的数据结构Memtable,Memtable在整个体系中的重要地位 ...
- Cocoa Touch(三):图形界面UIKit、Core Animation、Core Graphics
UIKit 视图树模型 1.视图树模型 计算机图形实际上是一个视图树模型,每个视图都有一个本地坐标系.每个本地坐标系的组成部分是:原点在父坐标系中的位置,每个基在父坐标系中的位置,由此就可以根据向量的 ...
- 16.3Sum Closest (Two-Pointers)
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- [leetcode]301. Remove Invalid Parentheses 去除无效括号
Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...
- [SoapUI]怎样获取上一个Test Step的名字
def currentStepInd = context.currentStepIndex def previousStep = testRunner.testCase.getTestStepAt(c ...
- Mac 安装GCC
OS X上安装Homebrew和GCC的图文攻略 2016年08月31日 11:21:27 白马负金羁 阅读数:11380 标签: OS XGCCHomebrew 更多 个人分类: 应用技巧 版权 ...
- Oracle 错误集锦
1.plsql进行更新操作时卡死的解决办法 https://blog.csdn.net/laoyingat/article/details/79379270
- nodejs顺序执行shell
最近工作中需要用到nodejs编写脚本来顺序执行自动化测试用例,编写代码如下: var runCommand = function (command){ child_process.exec(comm ...