当前位置:  开发笔记 > 前端 > 正文

Hadoop skip mode 代码要点

如果Hadoop数据集中有不合规格的数据,或者某些数据会引起程序崩溃,可以设置跳过模式,程序代码可以不处理这些异常,把异常抛出去让程序崩溃,hadoop框架会重新执行程序,并跳过会记录,参看http://hadoop.apache.org/common/docs/current/mapred_tutorial.html#Skipping+Bad+Records。但是这里没有给出代码例子,我尝

如果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。

另外,如果用新的API,即 org.hadoop.mapreduce 包,这个包中没有 SkipBadRecords 类,用 mapred.SkipBadRecords 也能跳过怀记录。(修正:后来又试了一下,新的API Skip mode没成功,可能还是不能正常工作的,以前是记录错误的。)

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有