Hadoop分布式调试脚本不能与Hadoop 2一起使用

时间:2015-06-24 05:51:55

标签: debugging hadoop mapreduce distributed

我正在尝试使用Distributed debug脚本来调试失败的MR作业,但是面临机制本身的问题。问题如下。

  1. 有了hadoop 0.20.2的东西很好,脚本按预期工作
  2. 使用Hadoop 1.1.1系统搜索Hadoop安装目录下的脚本,而不是DC位置。 (问题)
  3. 使用Hadoop 2.6.0,没有任何反应。系统忽略该脚本,就好像没有配置任何内容一样。 (问题)

    请帮我解决这个问题。

    我使用的代码如下。

        JobConf conf = new JobConf(DebugScriptDemoJobOld.class);
        conf.setJobName("debugscript demo");
    
        conf.setOutputKeyClass(Text.class);
        conf.setOutputValueClass(Text.class);
    
        conf.setMapperClass(OldErrorMap.class);
        conf.setNumReduceTasks(0);
    
        conf.setInputFormat(TextInputFormat.class);
        conf.setOutputFormat(TextOutputFormat.class);
    
        setupFailedTaskScript(conf);
    
        FileInputFormat.setInputPaths(conf, new Path("/input.txt"));
        FileOutputFormat.setOutputPath(conf, new Path("/outds"));
    
        JobClient.runJob(conf);
    
    }
    
    private static final String FAILED_MAP_SCRIPT_NAME = "map-fail";
    private static final String HDFS_SCRIPT_DIR = "/debug";
    private static final String HDFS_FAILED_MAP_SCRIPT = HDFS_SCRIPT_DIR + "/" + FAILED_MAP_SCRIPT_NAME;
    private static final String LOCAL_FAILED_MAP_SCRIPT = "/home/kaustabh/Work/" + FAILED_MAP_SCRIPT_NAME;
    
    public static void setupFailedTaskScript(JobConf conf) throws IOException {
    
        FileSystem fs = FileSystem.get(conf);
        Path debugDir = new Path(HDFS_SCRIPT_DIR);
    
        if (fs.exists(debugDir)) {
            fs.delete(debugDir, true);
        }
    
        fs.mkdirs(debugDir);
    
        fs.copyFromLocalFile(new Path(LOCAL_FAILED_MAP_SCRIPT), new Path(HDFS_FAILED_MAP_SCRIPT));
    
        //DistributedCache.createSymlink(conf);
    
        URI fsUri = fs.getUri();
        String mapUriStr = fsUri.toString() + HDFS_FAILED_MAP_SCRIPT + "#" + FAILED_MAP_SCRIPT_NAME;
        URI mapUri = null;
        try {
            mapUri = new URI(mapUriStr);
        } catch (URISyntaxException use) {
            throw new IOException(use);
        }
        DistributedCache.addCacheFile(mapUri, conf);
        DistributedCache.createSymlink(conf);
        conf.setMapDebugScript("./" + FAILED_MAP_SCRIPT_NAME);
    }
    
  4. 谢谢和问候, Kaustabh

1 个答案:

答案 0 :(得分:1)

你可以使用Jumbune来调试MapReduce,你可以在mapper或reducer上应用验证,检测哪个控制结构是罪魁祸首,并记录密钥&值不正确。