Hadoop学习之配置Eclipse远程调试Hadoop
来源:互联网 发布:java 图片尺寸 编辑:程序博客网 时间:2024/05/19 17:59
构建完成Hadoop项目后,接下来就应该跟踪Hadoop的运行情况,比如在命令行执行hadoop namenode–format时执行了Hadoop的那些代码。当然也可以直接通过阅读源代码的方式来做到这一点,但跟踪代码的执行情况更加直观,更容易理解。
动手配置Eclipse调试Hadoop之前,先大概学习一下JPDA(Java Platform Debugger Architecture,Java平台调试结构)。JPDA是一个多层的调试架构,使工具开发者可以容易地创建跨平台的,跨VM实现和JDK版本的调试器。JPDA包含三层:
- JVM TI:Java VM ToolInterface,定义了VM提供的调试服务。
- JDWP:Java DebugWire Protocol,定义了调试器进程和debuggee之间的通讯。Debuggee是正在被调试的进程,包含正在被调试的应用程序,运行该应用 程序的VM和后端的调试器。
- JDI:Java DebugInterface,定义了高层次的Java接口,该接口允许工具开发者容易地编写远程调试器应用程序。
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 调试器,并在端口6601上监听。做完上述的修改后再打开Eclipse,点击Run菜单下的Debug Configurations子菜单,如下图所示:
先选择Remote Java Application,然后点击上面的New launch configuration按钮,出现下图所示的对话框,在右侧分别输入相应的信息,比如主机名称和端口号,端口与上面修改hadoop文件时address指定的值保持一致。
做完上述的配置后,在命令上执行hadoop命令,比如hadoopnamenode –format,命令行的输出显示正在端口6601上监听:
[hadoop@hadoop conf]$ hadoop namenode -formatListening 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.outListening for transport dt_socket at address: 6601
点击上图右下侧的Debug按钮,开始调试Hadoop,调试的情况如下图所示,可以设置断点跟踪代码的执行情况。
上面所讲的只是如何调试NameNode,DataNode的调试与此类似,不再赘述,而MapReduce作业的调试还有待进一步的研究。
- Hadoop学习之配置Eclipse远程调试Hadoop
- Hadoop学习笔记之在Eclipse中远程调试Hadoop
- Hadoop学习笔记之在Eclipse中远程调试Hadoop
- Hadoop学习笔记之在Eclipse中远程调试Hadoop
- Hadoop学习笔记之在Eclipse中远程调试Hadoop
- Hadoop学习笔记之在Eclipse中远程调试Hadoop
- [Hadoop] Eclipse 远程调试 Hadoop
- eclipse hadoop远程调试
- eclipse远程调试hadoop
- hadoop学习(六)--------eclipse远程调试
- Eclipse远程调试hadoop源码
- eclipse 远程调试hadoop代码
- eclipse远程调试hadoop程序
- (大数据之hadoop)hadoop远程调试
- 在Eclipse中远程调试Hadoop
- eclipse远程方式调试hadoop-yarn
- Eclipse远程调试Hadoop接续上篇
- eclipse远程调试Tomcat, Hadoop集群等
- CSS:CSS3 计数器
- CoovaChilli-1.3.0编译时出现main-opt.c:781: error: ‘ptr’ may be used uninitialized in this function的解决方法
- Java中数组的特性
- 多线程(二)
- 新手上路
- Hadoop学习之配置Eclipse远程调试Hadoop
- Java中数组的类型
- 如何快速向Mysql插入大量数据?
- ZOJ 1151 Word Reversal反转单词 (string字符串处理)
- Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
- String[]的直接父类就是Object而不是Object[]
- UiAutomator 中文输入实现
- glibc源代码的阅读
- 使用惰性控件ViewStub实现布局动态加载