Eclipse远程调试在伪分布式模式下不能与hadoop一起使用

时间:2012-08-30 21:42:11

标签: java eclipse debugging hadoop remote-debugging

在独立模式下运行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 "$@"

然后我创建一个远程调试配置,如下所示:

creating a remote debugging configuration

我从命令行运行该作业,并说它应该是什么:

Listening for transport dt_socket at address: 5000

然后我回到eclipse并运行调试配置。它进入我的main()函数,就像它应该:

enter image description here

但是,它没有击中我在mapper或reducer中设置的任何断点。

这里有什么问题?为什么在独立模式下使用hadoop而不是伪分布模式呢?是否可以在伪分布式模式下使用hadoop进行远程调试?如果没有,那么在Eclipse中调试mapreduce代码的“正确”方法是什么?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您可以指定:

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

这将以调试模式启动map-task。另请参阅Debugging multiple hadoop jvms with Eclipse