Java Eclipse远程调试不';t在伪分布式模式下使用hadoop
在独立模式下运行hadoop时,Eclipse的远程调试没有问题。但是,当我在伪分布式模式下运行hadoop时,它不起作用。以下是我如何尝试在伪分布式模式下使用hadoop进行eclipse远程调试: 我在hadoop脚本中添加了一行,如下所示:Java Eclipse远程调试不';t在伪分布式模式下使用hadoop,java,eclipse,debugging,hadoop,remote-debugging,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,ad
#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 "$@"
然后我创建一个远程调试配置,如下所示:
#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()函数,就像它应该做的那样:
Listening for transport dt_socket at address: 5000
但是,它不会命中我在映射器或reducer中设置的任何断点
这里有什么问题?为什么它能在独立模式下与hadoop一起工作,而不是伪分布式模式?是否可以在伪分布式模式下使用hadoop进行远程调试?如果没有,在Eclipse中调试mapreduce代码的“正确”方法是什么?请参见上面罗兰的评论。远程调试只能在独立模式下工作。请参阅上面罗兰的评论。远程调试只能在独立模式下工作。您可以指定:
<property>
<name>mapred.map.child.java.opts</name>
<value>-Xdebug -Xrunjdwp:transport=dt_socket,address=5001,server=y,suspend=y</value>
</property>
mapred.map.child.java.opts
-Xdebug-Xrunjdwp:transport=dt_套接字,地址=5001,服务器=y,挂起=y
这将在调试模式下启动映射任务。另请参见,您可以指定:
<property>
<name>mapred.map.child.java.opts</name>
<value>-Xdebug -Xrunjdwp:transport=dt_socket,address=5001,server=y,suspend=y</value>
</property>
mapred.map.child.java.opts
-Xdebug-Xrunjdwp:transport=dt_套接字,地址=5001,服务器=y,挂起=y
这将在调试模式下启动映射任务。另请参见问题在于,与独立模式相比,在伪分布式模式下,映射器和还原器(更准确地说,所有守护进程)都在它们自己的JVM中运行,因此您不能仅使用驻留在另一个JVM中的一个Eclipse实例对它们进行调试。如果您有本地Hadoop设置,那么可以在独立模式下调试代码。此外,您可以使用自定义计数器、日志记录或MRUnit查找问题的根源。谢谢您的建议!编写了两个脚本在独立和伪分布式之间切换,现在一切都很顺利。谢谢如何在独立模式下运行hadoop?另外,如果可能的话,你能分享那些在独立模式和伪分布式模式之间切换的脚本吗?Hai…对我来说,它在独立模式下没有达到断点…你能分享你的调试方法吗..在我的用例中,代码在LocalJobRunner中运行良好,但在集群模式(伪分布式模式)下不工作问题在于,与独立模式相比,在伪分布式模式下,映射器和还原器(更准确地说,所有守护进程)都在它们自己的JVM中运行,因此您无法仅使用驻留在另一JVM中的一个Eclipse实例对它们进行调试。如果您有本地Hadoop设置,那么可以在独立模式下调试代码。此外,您可以使用自定义计数器、日志记录或MRUnit查找问题的根源。谢谢您的建议!编写了两个脚本在独立和伪分布式之间切换,现在一切都很顺利。谢谢如何在独立模式下运行hadoop?另外,如果可能的话,你能分享那些在独立模式和伪分布式模式之间切换的脚本吗?Hai…对我来说,它在独立模式下没有达到断点…你能分享你的调试方法吗..在我的用例中,代码在LocalJobRunner中运行良好,但在集群模式(伪分布式模式)下不工作