使用 IntelliJ 远程调试 HDFS

首先找到使用的 hadoop 脚本,例如在Apache的hadoop-1.0.0版本中,hadoop位于 ${HADOOP_HOME}/bin 目录下,本人使用的CDH4.4版本中该脚本则位于 /usr/lib/hadoop/bin目录下。

为了不影响原来的使用,将 bin 目录之下的hadoop脚本复制再复制一份。

cp hadoop hadoop-debug

打开 hadoop-debug 脚本,修改以下内容

#exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=9090,server=y,suspend=y $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"  

之后,就可以使用 hadoop-debug 命令进行 hadoop 操作的调试了。

例如,如果想调试 hadoop fs -ls 是怎么运行的。那么就可以在 hadoop 源码中的相关地方设置断点。之后,运行 hadoop-debug fs -ls /path/name/ 那么这时候,hadoop是不会运行的。hadoop会在9090端口等待调试器的链接,如果调试器未来到,则程序suspend。

之后就很简单了,在IntelliJ 中对远程主机(往往是本地)的 9090 端口进行远程调试,然后,就会跳到之前设置的断点了。

可以通过这个方法调试很多hadoop的操作,看看这些操作在HDFS上到底发生了什么。

你可能感兴趣的:(所思所学,hadoop,Debug)