• Eclipse远程调试hadoop源码


    1. 修改对应调试端口

    之前的一篇blog里讲述了hadoop单机版调试的方法,那种调试只限于单机运行hadoop命令而已,对于运行整个hadoop环境而言是不可取的,因为hadoop会开启多个java进程,如果统一为一个端口启动,则启动会报错说端口被占用,同时对于jdwp agent而言也只能加载一次,故调试时单机只能有一个java进程开启debug模式,其实这个也足够了。

    通过分析hadoop的启动脚本不难发现,每个java进程的启动参数可以在hadoop-env.sh这个文件里传递进去,故为了增加调试选项可以在这个文件里增加如下几段:

    Java代码

    1.#HADOOP_NAMENODE_OPTS="-Xdebug-Xrunjdwp:transport=dt_socket,address=8788,server=y,suspend=y"

    2.#HADOOP_SECONDARYNAMENODE_OPTS="-Xdebug-Xrunjdwp:transport=dt_socket,address=8789,server=y,suspend=y"

    3.#HADOOP_DATANODE_OPTS="-Xdebug-Xrunjdwp:transport=dt_socket,address=8790,server=y,suspend=y"

    4.#HADOOP_BALANCER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8791,server=y,suspend=y"

    5.HADOOP_JOBTRACKER_OPTS="-Xdebug-Xrunjdwp:transport=dt_socket,address=8792,server=y,suspend=y"

    6.#HADOOP_TASKTRACKER_OPTS="-Xdebug-Xrunjdwp:transport=dt_socket,address=8793,server=y,suspend=y"print?

     

    suspend=y是必须的,表示Child子进程启动后会等待远程的debug信息发送过来后再执行代码,因此在发送debug信息之前我们可以在eclipse中下断点,这一点很重要。

    这里因为是单机运行一些java进程,故这里只保留一个进程开启debug模式,当有多个机器单独运行每个java进程时,可以按照功能来打开相对应的java debug模式。如jobtrackertasktracker运行在不同机器,即可观察。

     

    bin/start-all.sh

    如果脚本运行成功,可以看到shell命令行终端显示如下信息:

    Listening for tranport dt_socket ataddress:8792

    这时候表示JobTracker成功处于监听状态。JobTracker将一直处于监听状态,直到收到debug确认信息。所以此处eclipse的监听调试端口还未建立。



    但是此时jobtracker尚未启动。

    注释:只有在第三步输入远程端口,点击“Debug”按钮,jobTracker才启动,所以在hadoop源码中添加断点,运行一个job,程序就会自动暂停到断点位置,接下来再详细的操作见第三步。

    2.eclipse里导入源码

    新建Java工程。打开eclipse,进入eclipse界面,依次单击File——New——Java Project,并在弹出的对话框中取消选择“Use Defaultlocation”前面的勾号,然后选择hadoop安装目录的位置,默认情况下,工程名称与hadoop安装目录名称相同,可自行修改。



     在下一个界面设置,将下方的 Default outputfolder .../bin更改为.../build/eclipse-classes(或其他),以免 eclipse自动清空 bin 文件夹下手工编写的文件;点击 Finish按钮等待下载完成。此时会有很多文件标有红色叉号,属正常现象。

     

    3. 配置eclipse来远程调试

    启动eclipse,点击菜单的 Go to Run -> Debug Configurations在配置界面上找到Remote JavaApplication然后右键新建一个,并配置远程应用的链接信息(如对应Jobtracker的端口)



    这里主要是填好主机名及对应打开调试的端口号。

    最后一步点击 Apply保持配置然后点击Debug即可开始远程调试了



    注意的是调试要选用Debug perspective

     

    4.设置一些断点,比如

    远程调试JobTracker时,将断点设置在JobTracker.submitJob函数中。(左边双击代码JobTracker.java



     比如,

    上传文件:hadoop fs –mkdirinput

             Hadoop fs  -put file1.txt input

    运行wordcount例子:

          Hadoop jar hadoop-example.jar wordcount inputoutput

     运行过程中,因为设置了断点,会提示打开eclipse Debug perspective,可以看到程序中止的地方,可以查看相应文件夹下的变化,按F8可跳过断点继续执行程序。

    参考另一篇文章,就会通过设置断点的方式,来观察hadoop的运行的轨迹。


  • 相关阅读:
    设计模式-状态模式(25)
    设计模式-访问者模式(24)
    设计模式-观察者模式(22)
    设计模式-中介者模式(21)
    设计模式-行为型模式小结(20)
    设计模式-迭代器模式(19)
    Tomcat安装
    MySQL单表查询
    MySQL表操作
    MySQL表的完整性约束
  • 原文地址:https://www.cnblogs.com/kxdblog/p/4034270.html
Copyright © 2020-2023  润新知