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. ( ! ) Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in D:\demo\code\yolo\index\index.php on li

    sql语句为:$sql="select count(*) from com where a_id=$v['id']"; 出现以下错误: 原因: 变量没有用花括号引起来 改为:  $ ...

  2. nginx把POST转GET请求解决405问题

    405重定向,然后把POST转GET upstream local { server 10.0.1.11:81; } server { listen 81; server_name testf.xxx ...

  3. Macaca拓展自己控件的方法

    https://github.com/macacajs/wd.py/blob/3bc4334bcb68733cb230b59d6164110053fd1c16/tests/macaca/test_ut ...

  4. JS小练习1

    要求: 一.定义"改变颜色"的函数 二.定义"改变宽高"的函数 三.定义"隐藏内容"的函数 四.定义"显示内容"的函数 ...

  5. CSS选择器的组合选择器之后代选择器和子元素选择器

    实例代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

  6. 浅谈计算机中的IO模型

    IO模型一共有5种: blocking IO #阻塞IO nonblocking IO #非阻塞IO IO myltiplexing #IO多路复用 signal driven IO #信号驱动IO ...

  7. linux下的打包与压缩

    linux压缩或解压缩工具有很多,除了已经很少有人使用的compress外,现在常用的还有tar,bzip2,xz 和gziplinux压缩或解压缩工具有很多,除了已经很少有人使用的compress外 ...

  8. CSS3动画详解(超详细)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 本文主要内容: 过渡:transition 2D 转换 trans ...

  9. .NET Core 2.0 问题杂记

    一. Ubuntu 14.04 安装 1.安装之前请先删除之前的.net core 版本 命令如下: 1.1 获取安装的.net core 版本 sudo apt --installed list | ...

  10. eclipse open call hierarchy无效

    问题: Eclipse中选中一个方法,右击选中open call hierarchy,不显示哪些地方调用了这个方法,却显示了这个方法里面调用了那些方法.前阵子还是好的,现在不知道为什么了. 解决: s ...