我们在使用hadoop的时候,会经常遇到程序崩溃的情况,比如程序出core(出core的时候会报134错误)。程序出core之后,我们希望得到程序的core文件,或者是错误日志。但是hadoop程序的运行时环境,一般在程序结束后,就会自动删除,所以很难直接得到core文件。 这里介绍几种方法,用于获取core文件:
(1) 保留出错现场
设置hadoop的jobconf参数keep.failed.task.files=true,当程序出错时,可以保留现以供debug使用。保留现场之后,通过job信息,可以找到出core的task所在节点,然后使用lftp登陆节点,就可以将core下载下来了。
(2)使用debug脚本
CUR_PATH=`pwd`
JOBID=`echo ${CUR_PATH} |awk -F"/" '{print \$(NF-2)}'`
ATTEMP=`echo ${CUR_PATH} |awk -F"/" '{print \$(NF-1)}'`
CORE_PATH="/user/xlord/tem
(1) 保留出错现场
设置hadoop的jobconf参数keep.failed.task.files=true,当程序出错时,可以保留现以供debug使用。保留现场之后,通过job信息,可以找到出core的task所在节点,然后使用lftp登陆节点,就可以将core下载下来了。
(2)使用debug脚本
hadoop提供了设置出错脚本的方法,可以通过 -mapdebug "sh debug.sh" (或者使用mapred.map.task.debug.script来指定) 来指定程序出错后进行处理的脚本。在脚本中添加上传core文件的代码即可,示例代码如下:
#!/bin/bashCUR_PATH=`pwd`
JOBID=`echo ${CUR_PATH} |awk -F"/" '{print \$(NF-2)}'`
ATTEMP=`echo ${CUR_PATH} |awk -F"/" '{print \$(NF-1)}'`
CORE_PATH="/user/xlord/tem