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

动手配置Eclipse调试Hadoop之前,先大概学习一下JPDA(Java Platform Debugger Architecture,Java平台调试结构)。JPDA是一个多层的调试架构,使工具开发人员能够easy地创建跨平台的,跨VM实现和JDK版本号的调试器。JPDA包括三层:

  • JVM TI:Java VM ToolInterface,定义了VM提供的调试服务。
  • JDWP:Java DebugWire Protocol,定义了调试器进程和debuggee之间的通讯。Debuggee是正在被调试的进程,包括正在被调试的应用程序,执行该应用        程序的VM和后端的调试器。
  • JDI:Java DebugInterface,定义了高层次的Java接口,该接口同意工具开发人员easy地编写远程调试器应用程序。

JPDA的结构图例如以下所看到的:

在简介了JPDA的基本信息后(很粗浅,更深入的学习能够參考Java的官方文档,地址为http://docs.oracle.com/javase/8/docs/technotes/guides/jpda/architecture.html#debuggee),以下就要看看该怎样使用JPDA进行程序的调试。

VM的实现须要命令行选项载入JDWP代理用于调试。从5.0開始,-agentlib:jdwp选项用于载入JDWP代理和指定JDWP代理的选项,5.0之前的版本号使用-Xdebug和-Xrunjdwp选项(5.0版本号也支持-Xdebug和-Xrunjdwp选项)。假设目标虚拟机是5.0或者更新的版本号,-agentlib:jdwp的使用方式为:-agentlib:jdwp=<sub-options>,5.0版本号之前的使用方式为:-Xdebug(启用调试)
-Xrunjdwp:<sub-options>。<sub-options>能够进一步指定,格式为:-agentlib:jdwp=<name1>[=<value1>],<name2>[=<value2>]...和 -Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...。当中的name能够为例如以下:help、transport、server、address、timeout、launch、onthrow、onuncaught、suspend。当中经常使用的几个为transport、server、address和suspend,transport是指调试器和被调试的VM之间的通信方法,其值能够为dt_socket和dt_shmem;server的值为y或者n,默认值为n,当值为y时,监听调试器程序的连接,否则在address指定的地址上连接调试器;address指定了连接的地址,假设server=y,则在该地址上监听连接,若server=n,则在该地址上连接调试器;suspend的值为y或者n,假设值为y则表示JVM在调试器连接到它之前都会处于暂停状态(更具体的内容能够參考官网文档http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.html)。以下看几个样例:

-Xdebug -Xrunjdwp:transport= dt_socket,address=1044,server=y,suspend=n
-agentlib:jdwp=transport=dt_socket,server=y,address=8000
-agentlib:jdwp=transport=dt_socket,address=myhost:8000

在学习了JPDA后,接下来就要配置Eclipse调试Hadoop。打开HADOOP_HOME/bin下的hadoop脚本,找到例如以下的代码:

elif [ "$COMMAND" = "namenode" ] ; then
CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode'
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS "

将其改为:

elif [ "$COMMAND" = "namenode" ] ; then
CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode'
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS -agentlib:jdwp=transport=dt_socket,server=y,address=6601,suspend=y"

新加入代码的意思为启用Java 调试器,并在port6601上监听。做完上述的改动后再打开Eclipse,点击Run菜单下的Debug Configurations子菜单,例如以下图所看到的:

先选择Remote Java Application,然后点击上面的New launch configurationbutton,出现下图所看到的的对话框,在右側分别输入对应的信息,比方主机名称和port号,port与上面改动hadoop文件时address指定的值保持一致。

做完上述的配置后,在命令上运行hadoop命令,比方hadoopnamenode –format,命令行的输出显示正在port6601上监听:

[hadoop@hadoop conf]$ hadoop namenode -format
Listening for transport dt_socket at address: 6601 [hadoop@hadoop bin]$ start-all.sh
starting namenode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-namenode-hadoop.out
Listening for transport dt_socket at address: 6601

点击上图右下側的Debugbutton,開始调试Hadoop,调试的情况例如以下图所看到的,能够设置断点跟踪代码的运行情况。

上面所讲的仅仅是怎样调试NameNode,DataNode的调试与此类似,不再赘述,而MapReduce作业的调试还有待进一步的研究。

Hadoop学习之配置Eclipse远程调试Hadoop的更多相关文章

  1. eclipse远程调试Hadoop

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

  2. 《Hadoop学习之路》学习实践二——配置idea远程调试hadoop

    背景:在上篇文章中按照大神“扎心了老铁”的博客,在服务器上搭建了hadoop的伪分布式环境.大神的博客上是使用eclipse来调试,但是我入门以来一直用的是idea,eclipse已经不习惯,于是便摸 ...

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

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

  4. Eclipse远程调试hadoop源码

    1. 修改对应调试端口 之前的一篇blog里讲述了hadoop单机版调试的方法,那种调试只限于单机运行hadoop命令而已,对于运行整个hadoop环境而言是不可取的,因为hadoop会开启多个jav ...

  5. IDEA远程调试hadoop程序

    远程调试Hadoop各组件 Hadoop学习之配置Eclipse远程调试Hadoop IDEA远程调试hadoop Hadoop 研发之远程调试详细剖析--WordCount V2.0 eclipse ...

  6. Eclipse远程调试HDP源代码

    使用的是自己编译的HDP2.3.0的源代码编译的集群,此文介绍如何使用Eclipse远程调试Hadoop内核源代码,以调试namenode为例进行介绍. 在/usr/hdp/2.3.0.0-2557/ ...

  7. Linux下使用Eclipse 远程调试

    1 开启端口 修改/apache-tomcat-7.0.40/bin/catalina.sh 在合适的位置(请自行判断,只要有JAVA_OPTS的设定前后即可)插入下面的设定:UI_DEBUG=&qu ...

  8. eclipse/intellij idea 远程调试hadoop 2.6.0

    很多hadoop初学者估计都我一样,由于没有足够的机器资源,只能在虚拟机里弄一个linux安装hadoop的伪分布,然后在host机上win7里使用eclipse或Intellj idea来写代码测试 ...

  9. 使用Windows上Eclipse远程调试Linux上的Hadoop

    一.设置Eclipse运行用户     如果以与Hadoop运行用户名(比如grid)不同的用户运行Eclipse,则无法对Hadoop运行用户所属的文件进行管理,运行Map/Reduce程序也会报& ...

随机推荐

  1. JAVA学习笔记 -- 包资源文件jar包裹

    初学者GUI,使用Eclipse出口jar包裹,不能显示最小化的图标集(hello.png根文件下的项目文件夹文件).码如下面: import javax.swing.JFrame; import j ...

  2. C#二进制字节数组操作功能 拦截字节数组SubByte

    C#二进制字节数组操作功能 拦截字节数组SubByte /// <summary> /// 截取字节数组 /// </summary> /// <param name=& ...

  3. 开发随笔——NOT IN vs NOT EXISTS

    原文:开发随笔--NOT IN vs NOT EXISTS 原文出处: http://blog.csdn.net/dba_huangzj/article/details/31374037  转载请引用 ...

  4. Android 应用程序启动过程源代码分析

    本文转自:http://blog.csdn.net/luoshengyang/article/details/6689748 前文简要介绍了Android应用程序的Activity的启动过程.在And ...

  5. 移动端 常见问题整理 iOS下的 Fixed + Input 调用键盘的时候fixed无效问题解决方案

    使用iScroll时,input等不能输入内容的解决方法 <script> function allowFormsInIscroll(){ [].slice.call(document.q ...

  6. hadoop-mapreduce在maptask执行分析

    MapTask执行通过执行.run方法: 1.生成TaskAttemptContextImpl实例,此实例中的Configuration就是job本身. 2.得到用户定义的Mapper实现类,也就是m ...

  7. (插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。

    近期 做些准备性得工作和有意思的事情.所以近期做了一个适合ios和android 错误信息捕捉的unity插件. 两个功能,app崩溃也就是闪退 是开发人员 非常头疼的一件事,还有就是一些莫名得错误 ...

  8. VB6基本数据库应用(五):数据的查找与筛选

    同系列的第五篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9633139 数据的查找与筛选 第4篇发布到现在已经过了4天,很抱歉,学 ...

  9. bootstrap之Click大事

    上一篇文章中谈到了bootstrap流程,本文开始把目光bootstrap它可以接受指令(从源代码视图的透视.因为appium该项目现在还处于不断更新,因此,一些指令已经实现.也许未来会实现一些.从视 ...

  10. 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)

    原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版) 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个e ...