Hadoop skip mode
对于一个一直在某条记录上失败的任务,tasktracker将运行一下task attempt得到相应的结果。
1.任务失败
2.任务失败
3.开启skipping mode。任务失败,但是失败记录由tasktracker保存。
4.仍然启用skipping mode。任务继续运行,但跳过上一次尝试中失败的记录。
在默认情况下,skipping是关闭的,我们用SkipBadRecord类单独为map和reduce任务启用此功能.
为了给skipping mode足够多得尝试次数来检测并跳过一个输入分片中的所有坏记录,需要增加最多的task attempt次数(通过mapred.map.max.attrmpts和map.reduce.max.attempts进行设置)
如果hadoop数据集中有不合规格的数据,或者某些数据会引起程序崩溃,可以设置跳过模式,程序代码可以不处理这些异常,把异常抛出去让程序崩溃,hadoop框架会重新执行程序,并跳过会记录,参看http://hadoop.apache.org/common/docs/current/mapred_tutorial.html#Skipping+Bad+Records 。 但是这里没有给出代码例子,我尝试过几次都不能正常工作。经过一番排查,终于确定了可以正常工作的代码模式。
下面是可以工作的代码片断:
public class PwdSorter extends Configured implements Tool {
......
public int run(String[] args) throws Exception {
SkipBadRecords.setMapperMaxSkipRecords(getConf(), 5);
JobConf jobConf = new JobConf(getConf(), getClass());
......
}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new PwdSorter(), args);
System.exit(res);
}
}
要点是 SkipBadRecords.setMapperMaxSkipRecords 要在 new JobConf 之前。如果这两个语句的顺序颠倒的话,skip mode不能正常工作。,缺省错误数据记录在 output/_logs/skip 目录,存储的格式是sequence file。可以用hadoop fs -text命令进行诊断。
浙公网安备 33010602011771号