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. 从零认识Java Package

    Java Package为何被设计?如果你没想过,我这里或许可以提供一种视角. 想象一下,作为一个语言的设计者,你一定会考虑一个问题:变量名的冲突.为了解决这个问题,C++引入了命名空间(namesp ...

  2. JDBC(四)

    1 Apache DBUtils框架 1.1 DBUtils简介 commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本非常低,并且使用db ...

  3. awk 实用技巧

    awk 用法:awk ' pattern {action} ' 变量名 含义ARGC 命令行变元个数ARGV 命令行变元数组FILENAME 当前输入文件名FNR 当前文件中的记录号FS 输入域分隔符 ...

  4. 【转】GPS误差来源

    一.与GPS卫星有关的误差 1.卫星时钟误差 即使卫星是非常的精密复杂,它可以计算出一些极微小的讯息信息,如原子钟(Cesium) 即是如此一个精准的装置,但是精准并不代表完美,因此仍会有一些微小的误 ...

  5. java for循环增强(foreach)

    for循环增强,在此之前还不知道foreach有这样的功能,先鄙视一下自己,留给自己看: 功能: ***若List用foreach : [  for(Student stu : list)  ]这种形 ...

  6. IDEA tomcat启动异常 org.apache.catalina.startup.ContextConfig parseWebXml

    启动Tomcat发现有异常,总是无法启动,具体的异常日志为下图 具体的解决方法为:在tomcat的conf/content.xml中加上<Loader delegate="true&q ...

  7. client / page / offset / screen X / Y

    1.clientX / clientY 相对于可视窗口左上角,不包括菜单栏与滚动条 2.pageX / pageY 相对于网页左上角,不包括菜单栏,包括滚动条 3.offsetX / offsetY ...

  8. 怎么理解np.random.seed()?

    在使用numpy时,难免会用到随机数生成器.我一直对np.random.seed(),随机数种子搞不懂.很多博客也就粗略的说,利用随机数种子,每次生成的随机数相同. 我有两个疑惑:1, 利用随机数种子 ...

  9. Windows Server 2016-Active Directory域服务概述

    活动目录(AD)是一种目录服务是微软用于开发Windows域网络.它被包含在大多数Windows Server 操作系统中作为一组进程和服务.最初,Active Directory只负责集中式域管理. ...

  10. windows下apache服务器开启压缩和网页缓存

    找到配置文件:http.conf apache开启压缩 一.开启配置,去除下面代码前面的#号LoadModule deflate_module modules/mod_deflate.soLoadMo ...