hadoop学习(六)--------eclipse远程调试

上一节我们已经成功编译了hadoop源码,这样我们就可以根据需要在源代码里增加调试信息,跟踪hadoop的执行。这种方式需要对跟踪的对应模块代码进行修改,还要重新编译jar包,并替换share/hadoop目录下对应的jar包,然后重新启动要调试的hadoop服务才行,比较麻烦。所以我学习了一下如何用eclipse远程调试,这样就可以设置断点,十分方便。


1.关于JAVA远程调试的原理和设置,下面这篇文章讲解十分详细,可以先了解下:

http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/


2.hadoop2.6.0版本主要是

sbin/start-dfs.sh

sbin/start-yarn.sh这两个脚本。


简单了解一下这两个脚本的工作,下面以start-dfs.sh为例:

下面只列出关键代码:


DEFAULT_LIBEXEC_DIR="$bin"/../libexec
HADOOP_LIBEXEC_DIR=${HADOOP_LIBEXEC_DIR:-$DEFAULT_LIBEXEC_DIR}
. $HADOOP_LIBEXEC_DIR/hdfs-config.sh        //执行libexec/hdfs-config.sh脚本设置CLASSPATH,JAVA_OPTS等变量


#---------------------------------------------------------
# namenodes

NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes)  //获取hdfs namenodes相关配置

echo "Starting namenodes on [$NAMENODES]"

"$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
  --config "$HADOOP_CONF_DIR" \
  --hostnames "$NAMENODES" \
  --script "$bin/hdfs" start namenode $nameStartOpt         //启动namenode

#---------------------------------------------------------
# datanodes (using default slaves file)

if [ -n "$HADOOP_SECURE_DN_USER" ]; then
  echo \
    "Attempting to start secure cluster, skipping datanodes. " \
    "Run start-secure-dns.sh as root to complete startup."
else
  "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
    --config "$HADOOP_CONF_DIR" \
    --script "$bin/hdfs" start datanode $dataStartOpt               //启动datanode
fi

# eof


主要列出了其中的4个部分,我们现在以/bin/hdfs getconf -namenodes这部分代码为例,进行调试跟踪,这部分代码主要是从hdfs-site.xml配置文件里读取我们的配置。


3.再简单了解一下bin/hdfs代码,可以看到这个代码是根据不同的COMMAND参数执行不同的JAR包完成不同的工作。我们现在执行的COMMAND=getconf,所以只关注这部分的代码:

elif [ "$COMMAND" = "getconf" ] ; then
  CLASS=org.apache.hadoop.hdfs.tools.GetConf
  HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8103"


红色的部分为为了调试所加的内容,suspend=y表示等待调试器(这里是eclipse)连接,这样我们才能在启动时跟踪代码.其它部分的含义,可以参考:

http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/


这样我们就可以执行sbin/start-dfs.sh脚本,脚本会在执行到NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes) 这里是停止,等待eclipse调试器连接后继续调试方式运行,所以下面需要启动eclipse调试器连接上来。


4.eclipse端设置

Run->Debug Configurations->Remote Java Application里新建一项远程调试项:




Name:随便命名,因为跟踪的是hdfs-tools-getconf所以命名这个,便于区分

Project:选择跟踪的模块即可

Host,Port为我们在bin/hdfs里启动的调试地址和端口。


配置完成后,我们来设置一个断点:


这里我们跟踪GetConf.java里的

HdfsConfiguration.init();

设置好断点后,我们执行Debug,然后断点就断住了,然后我们就可以跟踪调试了。


如果想要调试其它命令或模块,原理相同,只要修改脚本对要调试跟踪的Jar包设置HADOOP_OPTS即可。

  HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8103"



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

self-motivation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值