TaskTracker在启动虚拟机运行任务时会从作业提交文件中获取虚拟机启动参数,因此通过在作业中指定child启动参数远程调试child。
org.apache.hadoop.mapred.TaskRunner.getVMArgs(TaskAttemptID, File, List<String>, long) 在该函数中构造虚拟机的启动参数。
获取
String javaOpts = getChildJavaOpts(conf,
JobConf.DEFAULT_MAPRED_TASK_JAVA_OPTS);
public static final String DEFAULT_MAPRED_TASK_JAVA_OPTS = "-Xmx200m";
public String getChildJavaOpts(JobConf jobConf, String defaultValue) {
return jobConf.get(JobConf.MAPRED_TASK_JAVA_OPTS, defaultValue);
}
public static final String MAPRED_TASK_JAVA_OPTS = "mapred.child.java.opts";
作业说明文件中指定的参数
job.getConfiguration().set("mapred.child.java.opts", "-Xmx200m -Xdebug -Xrunjdwp:transport=dt_socket,address=8790,server=y,suspend=y");