• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

尼古拉斯豆

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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命令进行诊断。

posted on 2012-03-28 11:31  尼古拉斯豆  阅读(424)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3