how to debug hadoop on local
更新日期:
介绍一下如何在伪分布式hadoop上,配置hadoop源码debug环境,以便学习
本文分2部分来介绍
- 配置源码显示,以便跟踪
- 创建远程debug hadoop的jvm
环境准备
配置eclipse hadoop源码工程
为了方便查看debug时所在的行号、变量、类什么的,我们需要先配置hadoop源码工程到eclipse里。1.解压源码包,将源码包里的这3个目录下的文件copy出来,放到一个新的org/apache/hadoop文件夹内,准备导入到eclipse里。
- src/core/org/apache/hadoop
- src/hdfs/org/apache/hadoop
- src/mapred/org/apache/hadoop
2.eclipse里新建一个java工程,导入刚才合并后的 org/apache/hadoop 内的文件 (此时刷新工程,会有很多红叉)
3.将hadoop源码里的lib文件夹下的所有jar包 copy出来 (同时网上找一个 ant.jar 添加进去),放到刚才我们新建的工程里,并配置eclipse build path 依赖这些jar
4.此时,还有1个报错,是因为eclipse默认禁止使用sun的jar包,需要在buildpath中添加一个规则,右击工程 属性->buildpath,如下:
开始debug
1.修改 hadoop-env.sh,在8001端口上,开启对namenode 的jvm调试。(如果学过j2ee,跟tomcat远程调试一样的道理)
1 | # Command specific options appended to HADOOP_OPTS when specified |
2.在我们eclipse hadoop源码工程中,打开 NameNode.java ,在280行打上一个断点。
3.在eclipse里新建远程调试(先别点debug按钮,因为此时hadoop还没运行)
4.运行hadoop,可以看到在8001开启了端口用于debug
5.此时,再点击hadoop工程的debug远程调试按钮,可以看到,断点已经生效
debug shell command
1.修改 bin/hadoop 脚本。
1 | elif [ "$COMMAND" = "fs" ] ; then |
在下面多加一句,然后重新启动Hadoop集群,这样在命令行的所有操作都可以在FsShell里断点了。
1 | HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8008" |