Я создал файл sh
в сеансе haddop в моем главном EMR для выполнения задания Spark.
исполняемый файл выглядит примерно так же, как обычно:
spark-submit s3://bucket/file.sh
Теперь я пытаюсь создать задание cron для автоматического выполнения скрипта с определенной периодичностью. Что ж, после исследования я заметил, что EC2 AMI требует создания файла с расширением без в пути: /etc/cron.d/schedule
, а затем файл schedule
может содержать ожидаемое выполнение, поэтому я сделал это:
SHELL=/bin/bash
#PATH=/sbin:/bin:/usr/sbin:/usr/bin
PATH=/home/hadoop/
MAILTO=hadoop
HOME=/home/hadoop/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/20 11-22 * * * root /home/hadoop/file.sh > report.log
Я указал перед пользователем root
в моем файле scheduler
имя пользователя hadoop
, но после запроса в службу поддержки AWS они обращаются ко мне, чтобы настроить его как root
, дело в том, что теперь я получаю следующее сообщение об ошибке из журнала cron:
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <root@ip-10-10-1-240> /home/hadoop/file.sh > update.log
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/home/hadoop/>
X-Cron-Env: <MAILTO=hadoop>
X-Cron-Env: <HOME=/home/hadoop/>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
/home/hadoop/file.sh: line 6: spark-submit: command not found
Я полагаю, что корень не установил переменные среды SPARK, и поэтому не может понять spark-submit
. Как вы знаете, это немного чувствительное изменение и игра с переменными среды в EMR. Я не хочу ничего напортачить, поэтому, если у кого-то есть идея, как решить эту проблему, я ценю обратную связь.
Благодарю.
Почему вы заменяете PATH
на PATH=/home/hadoop/
? spark-submit
находится не там. Если вы не укажете полный путь к исполняемому файлу, он будет искать его в каталогах, указанных в переменной среды PATH
.
Запустите which spark-submit
в обычной оболочке, и он сообщит вам, где находится spark-submit
. Убедитесь, что каталог включен в PATH
. Например:
PATH=/home/hadoop:/usr/bin
Вы, вероятно, захотите сохранить исходный PATH
, чтобы другие скрипты и сам spark-submit
могли найти базовые исполняемые файлы, такие как ls
и другие.
В конце концов я добавил hadoop
в качестве пользователя-исполнителя и все :)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#PATH=/home/hadoop/:/usr/bin
MAILTO=hadoop
HOME=/home/hadoop/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/20 11-22 * * * hadoop /home/hadoop/file.sh > reportlog
10 11-23 * * * hadoop /home/hadoop/file2.sh > updatelog
проверка: PATH = / home / hadoop: / usr / bin Я дам вам знать