在网上想找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阶段了。
以上是自己在学习过程中的调试经验,希望对大家有帮助,语言和图解都比较粗糙,有些地方难免有遗漏,还望多多指正。
分享到:
相关推荐
赠送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; 赠送...
赠送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 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 ...
赠送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依赖信息...
赠送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;...
同时,插件还支持直接提交任务到本地或远程Hadoop集群,实现快速测试与调试。 4. **日志查看**:当程序运行时,插件可以实时显示MapReduce作业的执行进度和日志信息,方便开发者追踪问题所在。 5. **资源管理**:...
赠送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依赖信息文件:...
# 解压命令 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
hadoop-common-2.2.0-bin-master(包含windows端开发Hadoop和Spark需要的winutils.exe),Windows下IDEA开发Hadoop和Spark程序会报错,原因是因为如果本机操作系统是windows,在程序中使用了hadoop相关的东西,比如写入...
赠送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依赖信息文件:...
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....
赠送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; 包含翻译后...
在Windows上安装Hadoop,首先需要下载`hadoop-common-2.7.3-bin-master-windows`压缩包,解压后设置环境变量`HADOOP_HOME`,指向解压后的目录。例如,如果解压路径为`C:\hadoop\common\2.7.3`,则在系统环境变量中...
Hadoop 2.7.3是Hadoop的一个版本,其中包含了`hadoop-common-2.7.3-bin`这个模块,这个模块是Hadoop的基本组件集合,提供了在不同操作系统上运行Hadoop所需的各种工具和库。 标题中提到的`hadoop.dll`和`winutils....
这个压缩包“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所有二进制文件的主目录,对于在Windows 10环境下运行Hadoop,特别是winutils.exe和hadoop.dll的正确配置至关重要。理解这些组件的作用以及如何...
总结来说,"hadoop-common-2.7.1-bin-master.zip"不仅包含了使Hadoop能在Windows环境下运行的必要组件,更是一个全面的工具集,涵盖了Hadoop运行所需的各种基础服务和功能。理解和掌握这些知识点,对于在实际项目中...
赠送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; 赠送...