我在单机、仅限本地的设置中运行 hadoop,我正在寻找一种在 eclipse 中调试映射器和缩减器的好用、无痛的方法。 Eclipse 运行 mapreduce 任务没有问题。但是,当我去调试时,它给了我这个错误:
12/03/28 14:03:23 WARN mapred.JobClient: No job jar file set. User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
好的,所以我会做一些研究。显然,我应该使用 eclipse 的远程调试工具,并将其添加到我的 hadoop-env.sh
中:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000
我这样做了,我可以在 Eclipse 中单步执行我的代码。唯一的问题是,由于“suspend=y”,我无法使用命令行中的“hadoop”命令来执行诸如查看作业队列之类的操作;它挂起,我想是因为它正在等待调试器附加。另外,当我处于这种模式时,我无法运行“hbase shell”,可能是出于同样的原因。
所以基本上,如果我想在“ Debug模式”和“正常模式”之间来回切换,我需要更新hadoop-env.sh
并重新启动我的机器。主要疼痛。所以我有几个问题:
有没有更简单的方法在 eclipse 中调试 mapreduce 作业?
为什么 eclipse 可以很好地运行我的 mapreduce 作业,但为了调试我需要使用远程调试?
有没有办法告诉 hadoop 对 mapreduce 作业使用远程调试,但对所有其他任务在正常模式下运行? (例如“hadoop 队列” 或“hbase shell”)。
有没有更简单的方法来切换
hadoop-env.sh
配置而无需重新启动我的机器? hadoop-env.sh 默认是不可执行的。这是一个更普遍的问题:当我在仅本地模式下运行 hadoop 时到底发生了什么?我的机器上是否有任何“始终在线”并执行 hadoop 作业的进程?或者 hadoop 只在我从命令行运行“hadoop”命令时才做事吗?当我从 eclipse 运行 mapreduce 作业时,eclipse 在做什么?我必须在我的
pom.xml
中引用hadoop-core
才能使我的项目正常运行。 eclipse 是将作业提交到我安装的 hadoop 实例,还是以某种方式从我的 maven 缓存中的hadoop-core-1.0.0.jar
运行它?
这是我的主类:
public class Main {
public static void main(String[] args) throws Exception {
Job job = new Job();
job.setJarByClass(Main.class);
job.setJobName("FirstStage");
FileInputFormat.addInputPath(job, new Path("/home/sangfroid/project/in"));
FileOutputFormat.setOutputPath(job, new Path("/home/sangfroid/project/out"));
job.setMapperClass(FirstStageMapper.class);
job.setReducerClass(FirstStageReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
最佳答案
在 /bin/hadoop
(hadoop-env.sh
) 脚本中进行更改。检查以查看触发了什么命令。如果命令是jar
,则只添加远程调试配置。
if [ "$COMMAND" = "jar" ] ; then
exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8999 $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
else
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
fi
关于java - 如何从 eclipse 调试 hadoop mapreduce 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9915808/