Задание Hadoop не выполняется при вызове cron - PullRequest
1 голос
/ 26 июля 2010

Я создал следующий сценарий оболочки для вызова задания 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 вызывает его?

Ответы [ 5 ]

1 голос
/ 07 августа 2012
0 22 * * * /path/to/job.sh

Я думаю, что вы потеряли "." в вашей команде.

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

это работает?

0 голосов
/ 26 марта 2013

после установки JAVA_HOME, HADOOP_HOME в job.sh, затем:

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

посмотрите, что в вашем job.log

0 голосов
/ 26 марта 2013

Если вы установили JAVA_HOME и HADOOP_HOME в своем / etc / профиле.Добавить

./ etc / profile

в вашем job.sh.Это поможет.

0 голосов
/ 24 ноября 2010

Я также столкнулся с подобной проблемой.Я использовал $ HOME / .bashrc для установки переменных среды, таких как JAVA_HOME, HADOOP_HOME и PATH.Я также могу запустить свой job.sh вручную.Но связанные с hadoop команды внутри job.sh не могут быть правильно вызваны, когда job.sh вызывается cron.

Причиной моей проблемы является то, что cron не будет иметь источник $ HOME / .bashrc.Так что переменные окружения внутри него не видны cron.После установки всех этих переменных среды в job.sh команды, связанные с hadoop, корректно вызываются cron.

0 голосов
/ 26 июля 2010

среда запуска из cron может отличаться от вашей обычной оболочки. Вы можете проверить это, например, JAVA_HOME, PATH и т. Д.

...