通过eclipse调试MapReduce任务

简介:
利用MapReduce利器作开发,不论从思想上还是技能上都是新的体验。以下罗列下如何利用eclipse调试MR任务。

(本人环境:hadoop 1.0.2,部署在linux上,本地windows开发)



1、安装hadoop。

先在linux上安装好hadoop,为更接近线上环进,我的是安装成Cluster

注意要远程访问相关端口,conf/mapred-site.xml中localhost:9001中需要换成ip加端口。

sh bin/start-all.sh启动,先按文档命令行跑一下example的wordcount。

我安装好运行example遇到了XML解析的错(原因应该是${java.home}/lib/jaxp.properties没有设置,见:javax.xml.xpath.XPathFactory.newInstance(uri)的注释),后来手动加了xalan-j_2.7.0.jar、xercesImpl-2.7.1.jar、xml-apis-2.7.1.jar、xmlenc-0.52.jar、serializer-2.7.1.jar几个包解决。

2、下载hadoop eclipse plugin (最新只有0.20.3,不过也能使用),将jar放到eclipse/plugins下,启动eclipse

这个插件比较简陋,只有一个设置项:Window->Preferences->Hadoop Map/Reduce,设置Hadoop的安装路径,解压一份跟运行hadoop同版本的到本机并指向就行了(我的使用smb映射)

建ecplise工程,把WordCount的示例代码复制一份吧,有些hadoop相关的jar需要引用。

Run As->Run On Hadoop设置Map/Reduce Master的IP,端口为9000, DFS Master端口为9001

这样,不出意外的话就能在eclipse里运行Map/Reduce程序了。

3、打开debug。

因为Map/Reduce程序会被打成一个jar并拷到TaskTracker机器上(单独的进程)并开一个Child进程来跑JVM的,配置加到bin/下的脚本都是针对hadoop本身的进程,正确的配置如下:

在conf/mapred-site.xml中添加以下配置项:

>         <property>
>
>                 <name>mapred.child.java.opts</name>
>
>                 <!–<value>-Xmx200m -Xdebug -Xrunjdwp:transport=dt_socket,address=7788,server=y,suspend=y</value>–>
>
>                 <value>-Xmx200m</value>
>
>         </property>
>
>         <property>
>
>                 <name>mapred.tasktracker.map.tasks.maximum</name>
>
>                 <value>1</value>
>
>                 <description>tasktracker的map任务上限</description>
>
>         </property>
>
>         <property>
>
>                 <name>mapred.tasktracker.reduce.tasks.maximum</name>
>
>                 <value>1</value>
>
>                 <description>tasktracker的reduce任务上限</description>
>
>         </property>
>
>         <property>
>
>                 <name>mapred.task.timeout</name>
>
>                 <value>100000000</value>
>
>         </property>

其中的mapred.child.java.opts会在启动Child进程时设为启动参数。suspend=y取y/n分别表示是否挂起进程等待debug连进来。当然,这个选项还可以方便加其它JVM参数。

重启hadoop,这样运行示例,便可以看到7788端口被监听了。以下几条命令可能会用到:

> ./bin/stop-all.sh
>
> sleep 1s
>
> ./bin/start-all.sh
>
> sleep 1s
>
> ./bin/hadoop dfsadmin -safemode leave
>
> #杀掉hadoop进程或某些异常情况下hadoop会安全模式中不退出,HDFS的文件是不能被修改的(运行示例会无任何输出,但从日志中可以看到异常)这个命令强制退出。
>
> ./bin/hadoop dfs -rmr /user/dafu/out.txt
>
> echo done
>
>  

以上只在linux的命令行运行有效。eclipse插件其实是自己作为JobClient在运行,从eclipse中运行时会自己生成一个hadoop-site.xml文件(新版hadoop拆分为3个了,不过不影响执行),而且,在插件GUI设置界面,居然找不到mapred.child.java.opts等配置项,手工打开:workspace/.metadata.pluginsorg.apache.hadoop.eclipse,可以看到这里存放了插件帮我们打好的jar,在hadoop-conf-132297972833171678里可以找到执行的配置。打开目发locations里边的xml文件(hadoop-site.xml的模板文件),搜索mapred.child.java.opts并修改为前面设置的值。

接下来先 Run As->Run On Hadoop,再用eclipse远程连7788端口进行debug即可。

注:多个TaskTracker,可以断多台,应该是一样。

本文来源于"阿里中间件团队播客",原文发表时间"  2012-06-08"

相关文章
|
Java Android开发
在Eclipse环境下调试Java程序
在Eclipse环境下调试Java程序
203 1
|
10月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
236 1
|
10月前
|
Java Android开发
Eclipse Debug 调试
Eclipse Debug 调试
222 1
|
11月前
|
分布式计算 资源调度 数据可视化
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
156 1
|
11月前
|
分布式计算 资源调度 Hadoop
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
180 1
|
数据采集 SQL 分布式计算
|
SQL 分布式计算 数据处理
【Hive】所有的Hive任务都会有MapReduce的执行吗?
【4月更文挑战第17天】【Hive】所有的Hive任务都会有MapReduce的执行吗?
|
分布式计算 Java Hadoop
70 Azkaban MAPREDUCE任务
70 Azkaban MAPREDUCE任务
78 0
|
NoSQL IDE 开发工具
Eclipse配合GDB和jlinkGDBServer仿真调试STM32
Eclipse配合GDB和jlinkGDBServer仿真调试STM32
|
分布式计算 Java
Mapreduce执行机制之提交任务和切片原理
Mapreduce执行机制之提交任务和切片原理
154 0