hadoop debug设立

hadoop debug设置

要学习hadoop 那debug源码学习是最好的方式了,那如何debug呢

 

    首先找hadoop启动脚本,位于HADOOP_INSTALL_HOME下的bin目录中的hadoop文件

 

   在HADOOP_OPT 列表上增加这么一行即可

 

Java代码   hadoop debug设立
  1. 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动态调整功能。

 

Python代码   hadoop debug设立
  1. debug=${! #}   
  2. #eval "debug=\$$#"  另外一种获取最后一个参数的方式   
  3. if  [  "$debug"  =  "debug"  ]; then  
  4.   HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"   
  5. fi  

 

    将多余的debug参数去掉,同时需要修改启动脚本里的exec

 

Python代码   hadoop debug设立
  1. if  [  "$debug"  =  "debug"  ]; then  
  2. declare -a params  
  3. i=1   
  4. for   arg   in     "$@"   
  5.   do  
  6.      params[$i]=$arg  
  7.      ((i++))  
  8.   done  
  9. unset params["$#" ]  
  10. exec   "$JAVA"  $JAVA_HEAP_MAX $HADOOP_OPTS -classpath  "$CLASSPATH"  $CLASS  "${params[@]:1}"   
  11. else   
  12. exec   "$JAVA"  $JAVA_HEAP_MAX $HADOOP_OPTS -classpath  "$CLASSPATH"  $CLASS  "$@"   
  13. fi  

 

 

    这样在启动时 如果是

Java代码   hadoop debug设立
  1. hadoop  dfs -xx  debug  

 

    那就进入debug模式,否则正常运行模式。

更多信息请查看 java进阶网 http://www.javady.com