在独立模式下运行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]"
然后我创建了一个远程调试配置,如下所示:
我运行命令行的工作,和它说什么它应该:
Listening for transport dt_socket at address: 5000
然后我回到eclipse并运行调试配置。它步入我的main()函数像它应该:
但是,它没有击中任何我在映射或减速设置的断点。
这里有什么问题? hadoop如何在独立模式下工作,但不是伪分布模式?是否可以在伪分布模式下使用hadoop进行远程调试?如果没有,那么在Eclipse中调试我的mapreduce代码的“正确”方法是什么?
问题是,在伪分布式模式下,与独立模式相比,映射器和简化器(更精确地说所有守护进程)都在其自己的JVM中运行,因此您无法仅使用它们调试它们一个驻留在另一个JVM中的Eclipse实例。如果您有本地Hadoop设置,那么在独立模式下调试您的代码。此外,您可以使用自定义计数器 日志记录或MRUnit来找出问题的根源。 –
感谢您的咨询!写了几个脚本来在独立和伪分布之间切换,现在一切都像魅力一样工作。谢谢! – sangfroid
如何在独立模式下运行hadoop? 另外,如果可能的话,您可以共享那些在独立模式和伪分布模式之间切换的脚本吗? –