Java 当被cron调用时,Hadoop作业失败
我创建了以下用于调用hadoop作业的shell脚本: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
#!/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)