用IsolationRunner 重新运行出错的任务

用IsolationRunner 重新运行出错的任务
引用:https://blog.csdn.net/cwyspy/article/details/10004995
https://blog.csdn.net/cffyh/article/details/6549065
基于日志文件的调试是通过普通的历史记录来重建事件,有时,事件并不能提供足够的信息让我们可以追溯失败的原因,但是Hadoop有一个名为IsolationRunner的工具,这个工具可以隔离失败的任务,并再一个节点上用完全相同的输入重新运行它,你可以添加一个调试器再任务运行时控制它,并收集有关失败的原因的证据。
要想对失败的task进行单独重跑,肯定是有前提的,大家知道,对于map而言,其输入数据是来自分布式文件系统(通常是HDFS)中输入数据的某个 split,所以如果想要重跑map task,其输入数据就需要被保留下来。同样对于reduce而言,其输入是从所有map的中间结果shuffle到该reduce的数据,如果想要重跑 reduce task,这些数据也就需要保留下来。所以为了提供对失败的task进行单独重跑的功能,作业执行过程中的中间结果,或者每个map的输入数据对应的 split数据,就需要被保留下来。**为此hadoop提供了一个作业的配置选项:keep.failed.task.files(mapred_site.xml中配置),该选项默认为 false,表示对于失败的task,其运行的临时数据和目录是不会被保存的,**这也是hadoop在支持这项功能前默认的做法,因为如果失败的task的 临时文件和目录被保留的过多,会占据tasktracker上过多的磁盘空间和文件数,造成磁盘浪费。
如何进行在失败的节点中重跑task任务?

**1. 到task出错的tasktracker机器 上找到失败的task的目录环境
在 tasktracker中,对于每一个task都会有一个单独的执行环境,其中包括其work目录,其对应的中间文件,以及其运行时需要用到的配置文件等。这些 目录是由tasktracker的配置决定,配置选项为: mapred.local.dir. 该选项可能是一个逗号分隔的路径list,每个 list都是tasktracker对在其上执行的task建立工作目录的根目录。比如如果mapred.local.dir=/disk1 /mapred/local,/disk2/mapred/local,那么task的执行环境就是mapred.local.dir /taskTracker/jobcache/job-ID/task-attempt-ID
找到该task的执行工作目录后,就可以进入到 该目录下,然后其中就会有该task的运行环境,通常包括一个work目录,一个job.xml文件,以及一个task要进行操作的数据文件(对map来 说是split.dta,对reduce来说是file.out)。
找到环境以后,就可以重跑task了
cd work
hadoop org.apache.hadoop.mapred.IsolationRunner …/job.xml
这样,IsolationRunner就会读取job.xml的配置(这里的job.xml相当 于提交客户端的hadoop-site.xml配置文件与命令行-D配置的接合),然后对该map或者reduce进行重新运行。

2
debug
到这里为止,已经实现了task单独重跑,但是还是没有解决对其进行单步断点debug。这里利用到的其实是jvm的远程 debug的功能。方式如下:
在重跑task之前,export一个环境变 量:export HADOOP_OPTS="agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8888"
这 样,hadoop的指令就会通过8888端口将debug信息发送出去然后在自己本地的开发环境IDE中(比如 eclipse),launch一个远程调试,并在代码中打一个断点,就可以对在tasktracker上运行的独立map或者reduce task进行远程单步调试了。

1 在jobtracker监控web页面上找到 task失败的机器,并确保keep.failed.task.files为true

在这里插入图片描述
2 上到该tasktracker,并找到该 task运行环境
在这里插入图片描述
在这里插入图片描述
3 进到该task运行环境的work目录(如果没有,可以自己创建

4 export jvm远程调试环境变量
在这里插入图片描述
5 运行IsolationRunner
在这里插入图片描述
6 在自己的开发机IDE环境中launch一个远 程调试进程
在这里插入图片描述
7 单步跟踪示意
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值