1

在独立模式下运行 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 代码的“正确”方法是什么?

4

2 回答 2

2

请参阅上面的 Lorand 评论。远程调试只能在独立模式下工作。

于 2012-09-05T05:12:25.947 回答
2

您可以指定:

<property>
  <name>mapred.map.child.java.opts</name>
  <value>-Xdebug -Xrunjdwp:transport=dt_socket,address=5001,server=y,suspend=y</value>
</property>

这将以调试模式启动地图任务。另请参阅使用 Eclipse 调试多个 hadoop jvm

于 2013-07-18T08:35:47.917 回答