我已经安装了hadoop1.0.4。我修改了/usr/bin/hadoop文件,添加了以下内容:
hadoop\u调试=“-agentlib:jdwp=transport=dt_socket,服务器=y,挂起=y,地址=5000“
elif[“$command”=“jar”];然后
class=org.apache.hadoop.util.runjar
hadoop\u opts=“$hadoop\u opts$hadoop\u client\u opts”
elif[“$command”=“jar debug”];然后
class=org.apache.hadoop.util.runjar
hadoop\u opts=“$hadoop\u opts$hadoop\u client\u opts$hadoop\u debug”
command=“jar”
这样我可以运行“hadoop jar somejar.jar someclass”以正常启动,或者运行“hadoop jar debug somejar.jar someclass”以调试模式启动。这是可行的,除非我想将命令行参数传递到我的类中(比如在wordcount示例中)。例如运行:
“hadoop jar调试wordcount.jar wordcount inputdir outputdir”
如果在主类的第一行上有一个断点,则表明string[]args是一个空字符串(这显然会导致程序稍后失败)。如果我使用普通jar命令运行它,它就可以正常工作(因此显然,使用普通jar可以很好地传递命令行参数)。
有人知道这是怎么回事吗?我被卡住了。提前谢谢。
1条答案
按热度按时间ecbunoof1#
为将来遇到此问题的任何人更新:
如果java远程调试器是在侦听错误的ip地址(即侦听远程namenode而不是localhost)时启动的,jrd仍将启动,但不会传入命令行参数。