之前雄心勃勃的从GitHub上下了Hadoop源码,想要通读涨涨姿势,甚至想自己写一个简易版本。
不料代码啃起来味同嚼蜡,在读了基本的RPC之后,就此搁置。
作者:木鸟杂记 https://www.qtmuniao.com, 转载请注明出处
后来,抱着没有干不好的事,只有打开方式不对的心态,换个姿势,再学一次。
这次计划如下:
- 首先,将代码在本地调试。
- 然后,按模块进行debug。
今天主要说第一块的探索,花了两个晚上:>。
git fork
下源码,git clone
到本地,通过git tag --list
查看所有标签,找到0.1.0版本。
并且checkout出来。- 配置JAVA_HOME,HADOOP_HOME, PATH环境变量。
- 下载安装ant,并且配置环境变量(ANT_HOME,PATH)
- Eclipse新建Java Project,然后选择Java Project From Existing Ant Buildfile,
从现有文件夹中打开,选择hadoop所在文件夹,它会自动识别出build.xml,然后新建Ant工程。 - 右击build.xml,run as-> ant built,选第二个,进行配置(选对运行文件夹以及build文件,如果
不行就在含build.xml目录中执行命令ant,然后就会生成build文件夹,并且根据conf文件夹模板生成
必要的conf文件。 - 修改hadoop脚本(在**${HADOOP_HOME}/bin**里),为了不破坏原来文件,
cp hadoop hadoop-debug
。
然后在此脚本中,将最后一行运行命令,加上一些用于调试的参数。修改如下- 修改前
1
2run it
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@" - 修改后
1
2
3run it
exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=9090,server=y,suspend=y
JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@" - -Xdebug指明是调试,-Xrunjdwp引出后面参数。transport:通信方式,address:端口。
- 修改前
- 然后选择一个模块运行,比如NameNode:
bin/hadoop-debug namenode -format
。 - 在Eclipse中选择Debug->Debug configurations->Remote Java Application,选择对工程,localhost
以及对应端口就行。记得在代码中加断点,然后就可以愉快地运行了。
夜深啦,今天先到这里。