Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse远程调试不';t在伪分布式模式下使用hadoop_Java_Eclipse_Debugging_Hadoop_Remote Debugging - Fatal编程技术网

Java Eclipse远程调试不';t在伪分布式模式下使用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

在独立模式下运行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 "$@"
然后我创建一个远程调试配置,如下所示:

#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中运行良好,但在集群模式(伪分布式模式)下不工作