为什么要学习远程debug?
以前都是在一个进程进行debughadoop很多进程,是一个集群,想调试某一个集群,要通过远程debug调试。hadoop是很多进程JPDA简介
........怎样配置远程调试
dt_socket 表示使用套接字传输address=8000server=ysuspend=y需要在$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件中:#远程调试namenodeexport HADOOP_NAMENODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=y(运行的时候将被挂起)"#远程调试datanodeexport HADOOP_DATANODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=9888,server=y,suspend=y(运行的时候将被挂起)"修改完成后 重新启动
stop-dfs.shstart-dfs.sh
jps
[root@hadoop1 ~]# jps
4400 ResourceManager31708 -- main class information unavailable31791 -- main class information unavailable4492 NodeManager2906 31900 SecondaryNameNode32001 Jps为什么不显示main class的信息呢?
因为main class 已经被挂起在windows下进行调试
windows开启eclipse
只要eclipse中有源码NameNode.class 找到main方法 debug Configuration Name:XXXX Host:192.168.8.101 Port:8888 debug
通过jps查看,发现namenode已经启动
然后找到DataNode.classHost:192.168.8.101 Port:9888 debugjps
已经启动datanode
sbin下面 hadoop-daemon.sh 单独启动一个hadoop进程
hadoop-daemon.sh start datanode 启动datanode进程 ---------------------------------------------------NameNodeRpcServer.class找到 getBlockLocations这是服务端,客户端调用的时候会进来debug HDFSDemo.java