远程调试hadoop1源码(以调试namenode举例)

1.调试环境
1.1 远程linux运行的hadoop
1.2 本地windows的eclipse中导入hadoop源代码
1.3 本地windows的eclipse中有hadoop的自己写的代码

2.步骤
2.1修改远程linux运行的hadoop程序的hadoop-env.sh,
  把第21行注释掉,增加一行代码
  export HADOOP_NAMENODE_OPTS=

 "-Xdebug -Xrunjdwp:transport=dt_socket,address=9090,server=y,suspend=y"

2.2 在本地windows的eclipse中导入hadoop的源代码,在对应的NameNode类上增加断点,然后使用debug方式运行,具体配置见截图,这样要调试的本地代码就和服务端关联上
2.3 在本地windows的eclipse中使用debug方式运行自己写的代码。

3  详细解释如下:

3.1 配置文件hadoop-env.sh的说明

export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"  ---> 启动namenode参数
export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS" ---> 启动secondnamenode参数
export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS" ---> 启动datanode参数
export HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS" ---> 启动balancer 负载参数
export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS" ---> 启动jobtracker参数

调试namenode因此需要修改namenode启动参数:
#export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"  ---> 注释掉原来启动写法
export HADOOP_NAMENODE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9090,server=y,suspend=y" 

-Xdebug 以debug方式启动 
-Xrunjdwp: 引出如下选项参数
transport=dt_socket, 传输方式
address=9090, 访问端口,端口可以改动,设置为9090后在启动Hadoop集群下监听此端口等到客户端访问
server=y, 远程调试下,设置Hadoop作为服务器端
suspend=y 设置为追加模式  
调试那种类型的节点,仅需要将:

 export HADOOP_NAMENODE_OPTS=
"-Xdebug -Xrunjdwp:transport=dt_socket,address=9090,server=y,suspend=y"

修改成对应类型节点即可 eg: debug jobtracker  

export HADOOP_JOBTRACKER_OPTS=
"-Xdebug -Xrunjdwp:transport=dt_socket,address=9090,server=y,suspend=y"

3.2 启动Hadoop集群后 namenode jps结果如下:

[root@master bin]# jps
16254 SecondaryNameNode
16330 JobTracker
16563 Jps
Could not synchronize with target // 表示等待监听  连接debug端口即可解决 这里我们在eclipse中debug代码即可 ,连接后如下

[root@master bin]# jps
16254 SecondaryNameNode
18518 Jps
16330 JobTracker
16109 NameNode

3.3 在namenode修改hadoop-env.sh后启动集群,输出日志如下 看下图可以看到监听启动:


远程调试hadoop1源码(以调试namenode举例)
 

eclipse 将客户端代码和Hadoop源码关联设置如下:


远程调试hadoop1源码(以调试namenode举例)
 

eclipse中debug FileSystemHdfs,在nomenode下增加断点 效果显示如下:


远程调试hadoop1源码(以调试namenode举例)
 

相关推荐