分布式系统,程序语言,算法设计

Hadoop-0.1.0代码调试运行

之前雄心勃勃的从GitHub上下了Hadoop源码,想要通读涨涨姿势,甚至想自己写一个简易版本。
不料代码啃起来味同嚼蜡,在读了基本的RPC之后,就此搁置。

作者:青藤木鸟 https://www.qtmuniao.com, 转载请注明出处

后来,抱着没有干不好的事,只有打开方式不对的心态,换个姿势,再学一次。
这次计划如下:

  1. 首先,将代码在本地调试。
  2. 然后,按模块进行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
      2
      # run it
      exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
    • 修改后
      1
      2
      3
      # run 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
    以及对应端口就行。记得在代码中加断点,然后就可以愉快地运行了。

夜深啦,今天先到这里。