Я создал следующий сценарий оболочки для вызова задания hadoop:
#!/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
- Пользователь A также является пользователем системы Hadoop
- Кластер предназначен для выполнения этого задания
- Сценарий исполняемый
Я хотел бы знать, почему задание не выполняется, когда cron вызывает его?