我正在尝试使用Distributed debug脚本来调试失败的MR作业,但是面临机制本身的问题。问题如下。
使用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);
}
谢谢和问候, Kaustabh
答案 0 :(得分:1)
你可以使用Jumbune来调试MapReduce,你可以在mapper或reducer上应用验证,检测哪个控制结构是罪魁祸首,并记录密钥&值不正确。