2012-08-30 52 views
1

在独立模式下运行hadoop时,Eclipse的远程调试没有问题。但是,当我以伪分布模式运行hadoop时,它不起作用。以下是我尝试日食与伪分布式模式的Hadoop远程调试:Eclipse远程调试无法在伪分布式模式下使用hadoop

我添加一行来我的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 "[email protected]" 

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

creating a remote debugging configuration

我运行命令行的工作,和它说什么它应该:

Listening for transport dt_socket at address: 5000 

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

enter image description here

但是,它没有击中任何我在映射或减速设置的断点。

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

+2

问题是,在伪分布式模式下,与独立模式相比,映射器和简化器(更精确地说所有守护进程)都在其自己的JVM中运行,因此您无法仅使用它们调试它们一个驻留在另一个JVM中的Eclipse实例。如果您有本地Hadoop设置,那么在独立模式下调试您的代码。此外,您可以使用自定义计数器 日志记录或MRUnit来找出问题的根源。 –

+0

感谢您的咨询!写了几个脚本来在独立和伪分布之间切换,现在一切都像魅力一样工作。谢谢! – sangfroid

+0

如何在独立模式下运行hadoop? 另外,如果可能的话,您可以共享那些在独立模式和伪分布模式之间切换的脚本吗? –

回答

1

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

2

可以指定:

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

将启动在调试模式中的地图任务。另请参阅Debugging multiple hadoop jvms with Eclipse

相关问题