在独立模式下运行 hadoop 时,我对 Eclipse 的远程调试没有任何问题。但是,当我在伪分布式模式下运行 hadoop 时,它不起作用。以下是我在伪分布式模式下尝试使用 hadoop 进行 eclipse 远程调试的方法:
我在我的 hadoop 脚本中添加了一行,如下所示:
#added this line to enable remote debugging
HADOOP_OPTS="$HADOOP_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000"
# run it
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
然后我创建一个远程调试配置,如下所示:
我从命令行运行作业,它说明了它应该做什么:
Listening for transport dt_socket at address: 5000
然后我回到 Eclipse 并运行调试配置。它像它应该那样进入我的 main() 函数:
但是,它没有命中我在映射器或减速器中设置的任何断点。
这里有什么问题?它如何在独立模式下与 hadoop 一起工作,而不是伪分布式模式?是否可以在伪分布式模式下使用 hadoop 进行远程调试?如果不是,那么在 Eclipse 中调试我的 mapreduce 代码的“正确”方法是什么?