用shell获得hadoop中mapreduce任务运行结果的状态

在近期的工作中,我需要用脚本来运行mapreduce,并且要判断运行的结果,根据结果来做下一步的动作。

开始我想到shell中获得上一条命令运行结果的方法,即判断"$?"的值

if [ $? -eq 0 ];then
    #do something
fi

但是有时候即便mapreduce运行失败了,也还是会进入判断结构中。

后来查阅了相关资料,得知hadoop中可以使用yarn的命令,来获得job的状态,包括job名称、完成百分比、当前状态等参数,其实就和yarn的web界面查看到的数据一模一样。

使用yarn命令查看job状态:

用shell获得hadoop中mapreduce任务运行结果的状态

我们要做的就只剩下截取“Final-State”后的字段,即可判断程序运行的最终结果了。这里我们要使用awk命令进行解析:

yarn application -status application_1468831024962_0278 | grep 'Final-State' | awk -F ':' '{print $2}'

其中 application_1468831024962_0278 是我的applicationID,你可以通过yarn application -list来获得applicationID。

运行结果如下:

用shell获得hadoop中mapreduce任务运行结果的状态

这样就很容易判断成功与否,进行下一步的处理了。