对hadoop进行远程debug
来源:互联网 发布:js编辑器下载 编辑:程序博客网 时间:2024/05/21 22:55
在对hadoop的代码进行hack或者编写自己的mapreduce程序的时候,经常需要对代码进行debug,但是由于hadoop是一个分布式的系统,而且很多的进程都是多线程的,对它的代码进行debug就变得很麻烦,而且运用IBM之前contrib的哪个eclipse-plugin工具也很不方便,至今我仍然没有用那玩意跟到过任何进入hadoop内部的代码。不过由于java当中本身就通过jdwp提供了远程debug的功能,所以不妨用jdwp来debug hadoop的关键进程。
方法:
在${HADOOP_HOME}/bin 目录下,保存了用来启动和停止所有hadoop daemon进程的脚本,其中有一个hadoop-debug脚本,在这个脚本中,前面的代码无非就是判断用户输入的参数,然后根据参数来判断需要对哪个daemon进行debug,其中就包括对JobTracker,TaskTracker,Datanode,Namenode等,最关键的部分在最后一行:
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
它其实就是利用之前设置好的许多环境变量来修改当前进程为hadoop的daemon进程。这里还没有远程debug的设置。
要让它支持远程debug,之需要修改最后这一行的运行命令:
exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=$port,server=y,suspend=y $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
这样,在这个daemon进程启动的时候,就会监听某个用户指定的端口,来将当前进程的debug数据通过该端口的socket发送给远端。此时比如要debug datanode,就只需要运行:
$> ./hadoop-debug 8999 datanode
那么datanode进程就会启动,并监听8999端口的debug连接信息。
此时,在远程的机器上,运行eclipse,并在自己的包含hadoop代码的工程中设置远程debug参数:
run -> Debug Configuration...
在弹出的对话框中,双击Remote Java Application,新建一个远程debug的instance,然后在connect标签中填写好已经运行了hadoop daemon程序的机器的ip或者机器名,并填写正确的端口(8999),点击apply,debug,就可以连通远程的hadoop 的datanode进程,开始代码的跟踪调试了
方法:
在${HADOOP_HOME}/bin 目录下,保存了用来启动和停止所有hadoop daemon进程的脚本,其中有一个hadoop-debug脚本,在这个脚本中,前面的代码无非就是判断用户输入的参数,然后根据参数来判断需要对哪个daemon进行debug,其中就包括对JobTracker,TaskTracker,Datanode,Namenode等,最关键的部分在最后一行:
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
它其实就是利用之前设置好的许多环境变量来修改当前进程为hadoop的daemon进程。这里还没有远程debug的设置。
要让它支持远程debug,之需要修改最后这一行的运行命令:
exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=$port,server=y,suspend=y $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
这样,在这个daemon进程启动的时候,就会监听某个用户指定的端口,来将当前进程的debug数据通过该端口的socket发送给远端。此时比如要debug datanode,就只需要运行:
$> ./hadoop-debug 8999 datanode
那么datanode进程就会启动,并监听8999端口的debug连接信息。
此时,在远程的机器上,运行eclipse,并在自己的包含hadoop代码的工程中设置远程debug参数:
run -> Debug Configuration...
在弹出的对话框中,双击Remote Java Application,新建一个远程debug的instance,然后在connect标签中填写好已经运行了hadoop daemon程序的机器的ip或者机器名,并填写正确的端口(8999),点击apply,debug,就可以连通远程的hadoop 的datanode进程,开始代码的跟踪调试了
- 对hadoop进行远程debug
- 【hadoop】 2007-远程debug
- hadoop源码远程debug
- hadoop之远程debug
- hadoop之远程debug
- Kerberos对hadoop进行错误调测debug
- Eclipse进行远程Debug代码
- 怎样用Eclipse进行远程debug
- 如何对hadoop作业的某个task进行debug单步跟踪
- 如何对hadoop作业的某个task进行debug单步跟踪
- 如何对hadoop作业的某个task进行debug单步跟踪
- 如何对hadoop作业的某个task进行debug单步跟踪
- 如何对hadoop作业的某个task进行debug单步跟踪
- 如何对android进行debug
- 对erlang程序进行debug
- Hadoop/HBase Remote Debug (远程调试) 设置
- 转: 如何进行远程Debug WebPart
- 用Eclipse进行远程Debug代码
- Spring DataSource配置方式
- IOS 入门开发之导航栏按钮切换(三)
- Excel 所有版本最大行,列数
- 程序员的应该必备能力
- CHARINDEX 函数、InStr 函数、PATINDEX 函数、stuff函数
- 对hadoop进行远程debug
- Java 线程池的原理与实现
- WML相关资源
- oogle:中国开发者通过移动广告可年收入上千万
- 将SQL查询结果以字符串形式返回
- linux 下 firefox install flash player
- 排列和组合算法 C语言经典实现
- 内存映射文件
- 【经验分享】Javascript几个小技巧。