本文仅作为笔记,本人并未实践,若有实践者,请评论告知结果,谢谢。
mapreduce程序调试除了在代码中添加日志来判断分析问题外,hadoop还提供了IsolationRunner工具,但是需要eclipse的远程调试功能。
集群下实现mapreduce任务的单步跟踪:1、保存失败任务的临时数据和目录。
设置keep.failed.task.files为true
设置此参数后hadoop会保留此任务的临时数据和目录。如:运行时的job.xml配置文件,map任务的数据数据split.dat,reduce任务需要的输入数据file.out。
*调试完成后应设置回默认false,以避免产生过多的垃圾文件占满磁盘。
2、启动hadoop节点的远程调试端口。
hadoop运行环境中设置环境变量以连接IDE。
export HADOOP_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8888"
hadoop产生的debug信息通过端口8888对外发送。
3、重新运行待调试的任务。
通过mapreduce web界面找到出错任务的所在节点,并登陆该节点。
在节点上找到出错的任务运行时的目录,此目录参数由mapred.local.dir决定,为mapred.local.dir/taskTracker/jobcache/job-ID/task-attemp-ID。
job-ID,task-attemp-ID信息可以在web界面找到。
进入此工作目录,执行:
hadoop org.apache.hadoop.mapred.IsolationRunner ../job.xml
4、启动调试代码并设置断点。
在eclipse启动一个远程调试进程,连接到运行任务节点的8888端口,然后就可以跟单机调试一样设置断点和单步调试mapreduce程序了