我创建了以下用于调用 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 调用它时作业没有运行?
最佳答案
0 22 * * * /path/to/job.sh
我认为您在命令中丢失了 "."
。
0 22 * * * ./path/to/job.sh
有用吗?
关于java - 由 cron 调用时 Hadoop 作业失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3332917/