Java 当被cron调用时,Hadoop作业失败

Java 当被cron调用时,Hadoop作业失败,java,shell,cron,hadoop,Java,Shell,Cron,Hadoop,我创建了以下用于调用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@my

我创建了以下用于调用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
Hadoop作业成功执行并返回退出状态“0”

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

$ ./path/to/job.sh
0 22 * * * /path/to/job.sh
但是,现在作业并没有提交给Hadoop,我得到了一个退出状态“1”

这里需要注意的几点:

  • 配置cron作业的用户帐户是UserA
  • UserA也是Hadoop系统用户
  • 群集专用于运行此作业
  • 该脚本是可执行的

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

从cron运行的环境可能与常规shell不同。您可能需要检查,例如JAVA_HOME、PATH等。

从cron运行的环境可能与常规shell不同。您可能需要检查,例如JAVA_HOME、PATH等。

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


造成我的问题的原因是cron不会提供$HOME/.bashrc的源代码。所以cron无法看到它内部的环境变量。在job.sh中设置所有这些环境变量后,cron会正确调用与hadoop相关的命令。

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

0 22 * * * /path/to/job.sh
造成我的问题的原因是cron不会提供$HOME/.bashrc的源代码。所以cron无法看到它内部的环境变量。在job.sh中设置所有这些环境变量后,cron将正确调用与hadoop相关的命令

0 22 * * * /path/to/job.sh
我认为您的命令中丢失了

0 22 * * * ./path/to/job.sh
它有用吗

我认为您的命令中丢失了

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

它能工作吗?

如果在/etc/profile中设置JAVA\u HOME和HADOOP\u HOME。加

/等/简介


在你的工作中。如果您在/etc/profile中设置JAVA\u HOME和HADOOP\u HOME,这将有所帮助。

。加

/等/简介


在你的工作中。这将有所帮助。

在job.sh中设置JAVA\u HOME、HADOOP\u HOME后,然后:

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


在job.sh中设置JAVA\u HOME、HADOOP\u HOME之后,查看job.log中的内容,然后:

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


查看您的作业中的内容。日志
cron
日志或来自
cron
的电子邮件对Hadoop系统用户说了什么?其中一个或两个位置都应该有错误消息。
cron
日志或从
cron
发送给Hadoop系统用户的电子邮件会说什么?其中一个或两个位置都应该有错误消息。可能是这样。但是,hadoop配置包含JAVA_主位置。而且,我认为,当我给出调用hadoop命令的绝对路径时,路径变量可能不是原因。但是,我仍然尝试了将JAVA_HOME=/path/to/JAVA/HOME和path=/path/to/hadoop/bin/导出。但是,还是没有成功。我的退出状态为“1”。您知道退出状态“1”意味着什么吗?可能是这样。但是,hadoop配置包含JAVA_主位置。而且,我认为,当我给出调用hadoop命令的绝对路径时,路径变量可能不是原因。但是,我仍然尝试了将JAVA_HOME=/path/to/JAVA/HOME和path=/path/to/hadoop/bin/导出。但是,还是没有成功。我的退出状态为“1”。您知道退出状态“1”意味着什么吗?您的意思是添加工作目录吗?这将是“0..***cd/somedir;/path/to/job.sh”的原因。发布时,作业将在cron home dir(最有可能是用户home)中执行。您的意思是添加工作目录吗?这将是“0..***cd/somedir;/path/to/job.sh”的原因。发布时,作业将在cron home dir中执行(很可能是用户home)