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模式。如jobtracker和tasktracker运行在不同机器,即可观察。

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的运行的轨迹。

Eclipse远程调试hadoop源码的更多相关文章

  1. eclipse远程调试Hadoop

    环境需求: 系统:window 10 eclipse版本:Mars Hadoop版本:2.6.0 资源需求:解压后的Hadoop-2.6.0,原压缩包自行下载:下载地址 丑话前头说: 以下的操作中,e ...

  2. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  3. [导入]Eclipse 导入/编译 Hadoop 源码

    http://www.cnblogs.com/errorx/p/3779578.html 1.准备工作 jdk: eclipse: Maven: libprotoc :https://develope ...

  4. Linux+eclipse+gdb调试postgresql源码

    pg内核源码解析课上用的vs调试pg源码, VS用起来确实方便,但是配置调试环境着实有点麻烦.首先得装个windows系统,最好是xp,win7稍微麻烦点:最好使用vs05,08和10也可以,但是比0 ...

  5. Hadoop学习之配置Eclipse远程调试Hadoop

    构建完毕Hadoop项目后,接下来就应该跟踪Hadoop的运行情况,比方在命令行运行hadoop namenode–format时运行了Hadoop的那些代码.当然也能够直接通过阅读源码的方式来做到这 ...

  6. Hadoop学习记录(7)|Eclipse远程调试Hadoop

    1.创建Hadoop项目 2.创建包.类 这里使用hdfs.WordCount为例 3.编写自定Mapper和Reducer程序 MyMapper类 static class MyMapper ext ...

  7. 远程调试Hadoop

    远程调试对应用程序开发十分有用,那如何调试Hadoop源码?这里介绍如何用IDE远程调试Hadoop源码.本文以IntelliJ IDEA作为IDE,以调试Jobhistory WEB UI代码为例进 ...

  8. Android动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  9. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...

随机推荐

  1. Centos7搭建zookeeper集群

    centos7与之前的版本都不一样,修改主机名在/ect/hostname 和/ect/hosts 这两个文件控制 首先修改/ect/hostname vi /ect/hostname 打开之后的内容 ...

  2. C#高性能大容量SOCKET并发(八):通讯协议

    协议种类 开发Socket程序有两种协议类型,一种是用文本描述的,类似HTTP协议,定义字符集,好处是兼容性和调试方便,缺点是解析文本会损耗一些性能:一种是用Code加结构体,定义字节顺序,好处是性能 ...

  3. 【转】12 TOP Command Examples in Linux

    12个top命令 1. # top 2. # top,后输入shift+O,在“Current Sort Field:”中选左边的field对应的字母进行排序. 3. # top -u tecmint ...

  4. 从iconfont下载项目所需的图标资源

    前端开发中,经常会用到各种各样的图标(icon).这些icon,如果每个都要自己去做,那真的是耗时又耗力.但是,有了阿里巴巴矢量图标库这样的平台后,一切都变得简单了起来. 本文以此平台为例,演示如何搜 ...

  5. PHP正则匹配与文件编码关系

    虽然多数高手认为正则会影响程序效率,但是做数据采集的时候,却很难避免使用正则, 强大的正则表达式用起来很舒服,但是在匹配中文的时候,会出现,明明正则表达式没问题,字符数据里包含符合正则表达式的数据,可 ...

  6. Angular2学习笔记四(之Http通信)

    前言: 在这里,我描述三个场景,即系统的注册与登录,及登录后的操作: 1.注册场景,前端页面传入用户名密码,通过一个api接口传到后台,在后台对这用户及密码进行保存: 2.登录场景,前端用户传入用户名 ...

  7. MySQL修改密码的三种方法

      MySQL修改密码的三种方法 1.方法1: 2.方法2: 3.方法3:        

  8. BZOJ 4195: [Noi2015]程序自动分析 [并查集 离散化 | 种类并查集WA]

    题意: 给出若干相等和不等关系,判断是否可行 woc NOI考这么傻逼的题飞快打了一个种类并查集交上了然后爆零... 发现相等和不等看错了异或一下再叫woc90分 然后发现md$a \neq b, a ...

  9. 2018/1/15 JAVA多线程相关

    本文不说synchronized相关,它就是JAVA的一个保留关键字,jdk自己实现了它,但说真的,可应用场景真的少,相比lock接口,它还是被淘汰好吧; 首先,说说lock接口,lock接口是一个工 ...

  10. GitLab简单使用

    [权限] ①已经搭建了Gitlab服务器,并已开通  http://git.******.com 权限(每个公司的git地址不一致),登陆到git中去: ②已经开通了项目权限(有专人负责开通): 当开 ...