hadoop debug设立
hadoop debug设置
要学习hadoop 那debug源码学习是最好的方式了,那如何debug呢
首先找hadoop启动脚本,位于HADOOP_INSTALL_HOME下的bin目录中的hadoop文件
在HADOOP_OPT 列表上增加这么一行即可
- HADOOP_OPTS= "$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
eclipse里debug的时候选择Remote Java Application 端口设置为8787就可以了。
启动hadoop的时候他就会在8787端口监听,直到有人连接过来才会继续前进。
貌似这样是可以debug了,不过呢在debug与非debug之间不是很方便的切换过来,例如每次都需要修改debug那一行的参数列表,希望能够动态调整就好了,类似加个debug启动参数就进入debug模式,如果不加debug就是正常启动模式。利用前一篇讲shell技巧里的获取最后一个参数的功能,我们可以增加如下代码实现debug动态调整功能。
- debug=${! #}
- #eval "debug=\$$#" 另外一种获取最后一个参数的方式
- if [ "$debug" = "debug" ]; then
- HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
- fi
将多余的debug参数去掉,同时需要修改启动脚本里的exec
- if [ "$debug" = "debug" ]; then
- declare -a params
- i=1
- for arg in "$@"
- do
- params[$i]=$arg
- ((i++))
- done
- unset params["$#" ]
- exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "${params[@]:1}"
- else
- exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
- fi
这样在启动时 如果是
- hadoop dfs -xx debug
那就进入debug模式,否则正常运行模式。
更多信息请查看 java进阶网 http://www.javady.com