`
329937021
  • 浏览: 124245 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hadoop下远程调试Child子进程 --- 原创

 
阅读更多

在网上想找Hadoop远程调试Child子进程的文章,但是都没有见到具体步骤是如何操作的,对于初学者来说,要想真正理解MapReduce的shuffle的过程,对Child子进程的调试是必不可少的一项任务,至少对我来说是这样。费了九牛二虎之力,最后终于调试成功,在这里写下经验,分享给后面的hadoop学习爱好者。

我的环境:hadoop-0.20.2

                    ubuntu 11.04

                   在eclipse下安装了hadoop插件进行调试

                   这里要说一下,我的eclipse版本是很老的eclipse3.3.1,hadoop插件版本是hadoop-0.20.2中自带的插件,路径:/hadoop-0.20.2/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin.jar,直接这个插件拷贝到eclipse的plugin目录后重启eclipse就可。之所以使用eclipse3.3.1版本的eclipse是因为,hadoop-0.20.2的eclipse插件对eclipse版本要求较高,需要版本匹配才能运行,我试过在eclipse helio中安装这个插件,但是不能使用,其他版本的eclipse我暂时还没试过,不好意思。

前言

1、hadoop的安装和启动过程我在这里就不详述了,可以参考官方文档 http://hadoop.apache.org/common/docs/r0.19.2/cn/quickstart.html

2、hadoop的eclipse插件的安装和使用过程我这里也不详述了,可以参考网上的很多文章,比如:http://blog.sina.com.cn/s/blog_537770820100byho.html

一、tasktracker的debug模式配置和Chlid子进程的debug模式配置

1.1、先对tasktracker进行debug,在hadoop.sh中找到 elif [ "$COMMAND" = "tasktracker" ] ,并添加tasktracker的调试端口如下:

elif [ "$COMMAND" = "tasktracker" ] ; then
  CLASS=org.apache.hadoop.mapred.TaskTracker
  HADOOP_OPTS="$HADOOP_OPTS $HADOOP_TASKTRACKER_OPTS
    -agentlib:jdwp=transport=dt_socket,address=8200,server=y,suspend=y"




1.2、看下图,在eclipse hadoop插件的参数配置中,修改mapred.child.java.opts的参数值为(红线部分):-Xmx 200m -agentlib:jdwp=transport=dt_socket,address=8883,server=y,suspend=y

红线部分表示Child子进程的启动端口为8883,这里的suspend=y是必须的,表示Child子进程启动后会等待远程的debug信息发送过来后再执行代码,因此在发送debug信息之前我们可以在eclipse中下断点,这一点很重要。

二、debug模式启动程序和断点

2.1  我使用的是最简单的WordCount例子来进行讲解,如下图

Run on Hadoop后出来的结果如下,让你选择你自己的配置信息,这里要保证1.2节中配置的项处在第一个选择,这样当你要debug代码的时候,可以选择你配置过的那个,默认是第一个配置项。

2.2   在JvmManager类的第249行和250行各下一个断点,如下图

spawnNewJvm表示重启一个Child子进程,这里是重点。在ubuntu控制台中执行如下命令:ps -aux | grep java,会发现有一个child子进程启动了,如下图

attempt_201201272353_0003_m_000005_0 -1032262400 这是进程号,在eclipse的debug窗口下,也可以看到这个进程

这时候,进程启动了,但是还没执行代码。在通过eclipse的远程调试链接到我们刚启动的Child子进程之前我们要先在Child.java的代码中下断点,如下:

在113行下个断点,下完断点后我们在我们在eclipse下远程调试,链接到这个进程,我们之前设定的端口是8883,如下图:

注意,按上面的步骤走的话务必在113行这里下断点,JvmTask myTask = umbilical.getTask(jvmId);这段代码是通过taskTracker获取对应的Map任务,但是别忘记我们之前在taskTracker上下了断点,taskTracker正处于debug模式,这时候执行这段代码,Child进程会被阻塞。按F6让debug往下走,Child进程阻塞在了taskTracker处,这时候我们回到eclipse的debug窗口,找到taskTracker进程并选中(如下图),按F5让taskTracker往下走,这时候Child子进程就会解除阻塞走过113行就OK了。

继续在MapTask的run(final JobConf job, final TaskUmbilicalProtocol umbilical)方法里面下断点,Child子进程就能调试到MapReduce的Shffle阶段了。

以上是自己在学习过程中的调试经验,希望对大家有帮助,语言和图解都比较粗糙,有些地方难免有遗漏,还望多多指正。

 

分享到:
评论
2 楼 爱岩修 2014-04-02  
以后粘贴别人的帖子,记得留下链接,这里我先帮你补上了:http://blog.csdn.net/lixiaodong037/article/details/7216529
1 楼 爱岩修 2014-04-02  
这篇文章好多的“看下图”都没有图哦

相关推荐

    hadoop-mapreduce-client-jobclient-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-mapreduce-client-jobclient-2.6.5.jar; 赠送原API文档:hadoop-mapreduce-client-jobclient-2.6.5-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-jobclient-2.6.5-sources.jar; 赠送...

    hadoop-yarn-common-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-yarn-common-2.6.5.jar 赠送原API文档:hadoop-yarn-common-2.6.5-javadoc.jar 赠送源代码:hadoop-yarn-common-2.6.5-sources.jar 包含翻译后的API文档:hadoop-yarn-common-2.6.5-javadoc-...

    hadoop-common-2.6.0-bin-master.zip

    `hadoop-common-2.6.0-bin-master.zip` 是一个针对Hadoop 2.6.0版本的压缩包,特别适用于在Windows环境下进行本地开发和测试。这个版本的Hadoop包含了对Windows系统的优化,比如提供了`winutils.exe`,这是在Windows...

    Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码

    Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop ...

    hadoop-mapreduce-client-common-2.6.5-API文档-中英对照版.zip

    赠送jar包:hadoop-mapreduce-client-common-2.6.5.jar; 赠送原API文档:hadoop-mapreduce-client-common-2.6.5-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-common-2.6.5-sources.jar; 赠送Maven依赖信息...

    hadoop-yarn-client-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-yarn-client-2.6.5.jar; 赠送原API文档:hadoop-yarn-client-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-client-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-client-2.6.5.pom;...

    hadoop2x-eclipse-plugin-master

    同时,插件还支持直接提交任务到本地或远程Hadoop集群,实现快速测试与调试。 4. **日志查看**:当程序运行时,插件可以实时显示MapReduce作业的执行进度和日志信息,方便开发者追踪问题所在。 5. **资源管理**:...

    hadoop-mapreduce-client-core-2.5.1-API文档-中文版.zip

    赠送jar包:hadoop-mapreduce-client-core-2.5.1.jar; 赠送原API文档:hadoop-mapreduce-client-core-2.5.1-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-core-2.5.1-sources.jar; 赠送Maven依赖信息文件:...

    flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar

    # 解压命令 tar -zxvf flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar.tar.gz # 介绍 用于CDH部署 Flink所依赖的jar包

    flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

    flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

    hadoop-common-2.2.0-bin-master.zip

    hadoop-common-2.2.0-bin-master(包含windows端开发Hadoop和Spark需要的winutils.exe),Windows下IDEA开发Hadoop和Spark程序会报错,原因是因为如果本机操作系统是windows,在程序中使用了hadoop相关的东西,比如写入...

    hadoop-mapreduce-client-app-2.7.3-API文档-中英对照版.zip

    赠送jar包:hadoop-mapreduce-client-app-2.7.3.jar; 赠送原API文档:hadoop-mapreduce-client-app-2.7.3-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-app-2.7.3-sources.jar; 赠送Maven依赖信息文件:...

    flink-shaded-hadoop-2-uber-2.7.5-10.0.jar.zip

    Apache Flink 是一个流行的开源大数据处理框架,而 `flink-shaded-hadoop-2-uber-2.7.5-10.0.jar.zip` 文件是针对 Flink 优化的一个特殊版本的 Hadoop 库。这个压缩包中的 `flink-shaded-hadoop-2-uber-2.7.5-10.0....

    hadoop-yarn-api-2.5.1-API文档-中文版.zip

    赠送jar包:hadoop-yarn-api-2.5.1.jar; 赠送原API文档:hadoop-yarn-api-2.5.1-javadoc.jar; 赠送源代码:hadoop-yarn-api-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-api-2.5.1.pom; 包含翻译后...

    hadoop-common-2.7.3-bin-master-windows

    在Windows上安装Hadoop,首先需要下载`hadoop-common-2.7.3-bin-master-windows`压缩包,解压后设置环境变量`HADOOP_HOME`,指向解压后的目录。例如,如果解压路径为`C:\hadoop\common\2.7.3`,则在系统环境变量中...

    hadoop-common-2.7.3-bin-master包含hadoop.dll、winutils.exe

    Hadoop 2.7.3是Hadoop的一个版本,其中包含了`hadoop-common-2.7.3-bin`这个模块,这个模块是Hadoop的基本组件集合,提供了在不同操作系统上运行Hadoop所需的各种工具和库。 标题中提到的`hadoop.dll`和`winutils....

    hadoop-common-2.2.0-bin-master(包含windows端开发Hadoop2.2需要的winutils.exe)

    这个压缩包“hadoop-common-2.2.0-bin-master”是Hadoop 2.2.0版本的公共库二进制版本,包含了在Windows平台上开发和运行Hadoop所需的一些关键工具,特别是对于开发者来说非常重要的`winutils.exe`。 `winutils.exe...

    hadoop-common-2.6.0-bin-master

    总结起来,"hadoop-common-2.6.0-bin-master"是一个包含Hadoop Common所有二进制文件的主目录,对于在Windows 10环境下运行Hadoop,特别是winutils.exe和hadoop.dll的正确配置至关重要。理解这些组件的作用以及如何...

    hadoop-common-2.7.1-bin-master.zip

    总结来说,"hadoop-common-2.7.1-bin-master.zip"不仅包含了使Hadoop能在Windows环境下运行的必要组件,更是一个全面的工具集,涵盖了Hadoop运行所需的各种基础服务和功能。理解和掌握这些知识点,对于在实际项目中...

    hadoop-yarn-server-resourcemanager-2.6.0-API文档-中文版.zip

    赠送jar包:hadoop-yarn-server-resourcemanager-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-resourcemanager-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-resourcemanager-2.6.0-sources.jar; 赠送...

Global site tag (gtag.js) - Google Analytics