首页 文章

当cron调用时,Hadoop作业失败

提问于
浏览
1

我创建了以下用于调用hadoop作业的shell脚本:

#!/bin/bash
/opt/hadoop/bin/hadoop jar /path/to/job.jar com.do.something <param-1> ... <param-n> &
wait %1
STATUS=$?
if [ $STATUS -eq 0 ]
then    
    echo "SUCCESS" | mailx -s "Status: "$STATUS -r "mail@mysite.com" "mail@mysite.com"
    exit $STATUS
else
    echo "FAILED" | mailx -s "Status: "$STATUS -r "mail@mysite.com" "mail@mysite.com"
    exit $STATUS
fi

当我像这样手动运行上面的脚本时:

$ ./path/to/job.sh

Hadoop作业成功执行并返回退出状态“0” .

现在,为了每天自动执行作业,我已经配置了一个cron作业来运行上面的脚本,如下所示:

0 22 * * * /path/to/job.sh

但是,现在作业没有提交给Hadoop,我的退出状态为“1” .

这里有几点需要注意:

  • 配置cron作业的用户帐户是UserA

  • UserA也是Hadoop系统用户

  • 群集专用于运行此作业

  • 该脚本是可执行的

我想知道为什么当cron调用它时作业没有运行?

5 回答

  • 0
    0 22 * * * /path/to/job.sh
    

    我想你在命令中丢失了 "." .

    0 22 * * * ./path/to/job.sh
    

    它有用吗?

  • 0

    从cron运行的env可能与你的常规shell不同 . 你可能想检查一下,例如JAVA_HOME,PATH等

  • 0

    我也遇到过类似的问题 . 我使用$ HOME / .bashrc来设置环境变量,例如JAVA_HOME,HADOOP_HOME和PATH . 我也可以手动运行我的job.sh . 但是当cron调用job.sh时,无法正确调用job.sh中的hadoop相关命令 .

    我的问题的原因是cron不会来源$ HOME / .bashrc . 所以cron里面的环境变量是看不到的 . 在job.sh中设置所有这些环境变量后,cron会正确调用hadoop相关命令 .

  • 1

    如果在/ etc / profile中设置JAVA_HOME和HADOOP_HOME . 加

    . / etc / profile文件

    在你的job.sh.这会有所帮助 .

  • 0

    在job.sh中设置JAVA_HOME,HADOOP_HOME后,然后:

    0 22 * * * sh -x $ HOME / path / to / job.sh> $ HOME / job.log 2>&1

    看看你的职位.log

相关问题