Мы планируем создать работу Oozie, которая запускает команду Sqoop для посылки данных с сервера SQL на HDFS на почасовой основе. Но мы сталкиваемся с проблемой, как получить предупреждение, если эта работа проваливается между ними и как sqoop будет проверять, какие данные импортированы успешно и которые все еще ожидаются. Есть ли какой-либо процесс для поддержания транзакций и механизма повтора при импорте sqoop. А также мы предупреждаем об их провале.Как сохранить восстановление отказа во время импорта sqoop Задание
ответ
Вы можете настроить рабочий процесс Oozie для отправки электронной почты при сбое. Вы можете достичь этого, перенаправив тег ошибки из любого действия на действие отправки электронной почты.
Примером конфигурации электронной почты может быть следующее.
<action name="send-email">
<email xmlns="uri:oozie:email-action:0.1">
<to>${emailToAddress}</to>
<subject>Failed to import table.</subject>
<body>The following import has failed.
failed the workflow that was trying to perform job --exec import-${tableName}-${environment}-${format}-${db} --verbose
ID= ${wf:id()}
NAME= ${wf:name()}
APP PATH= ${wf:appPath()}
USER= ${wf:user()}
GROUP= ${wf:group()}
NAMENODE= ${nameNode}
JOBTRACKER = ${jobTracker}
QUEUE = ${queueName}
START DATE = ${start}
error message[${wf:errorMessage(wf:lastErrorNode())}]</body>
</email>
<ok to="fail-job"/>
<error to="fail-email"/>
</action>
Обратите внимание, что адрес электронной почты может быть разделен запятой. Чтобы письмо отправлялось правильно, вам также необходимо настроить почтовый клиент oozie правильно на пользовательском сайте oozie. Параметры, которые вы, возможно, необходимо настроить следующие:
Custom oozie-site
oozie.email.smtp.password
oozie.email.from.address
oozie.email.smtp.auth
oozie.email.smtp.host
oozie.email.smtp.port
oozie.email.smtp.username
oozie.service.ProxyUserService.proxyuser.falcon.groups
oozie.service.ProxyUserService.proxyuser.falcon.hosts
О повторить вверх от Oozie 3.1 вы можете настроить параметр повторных попыток и повторить интервал в каждом действии. Для достижения этой цели вы можете установить следующие параметры внутри тега действия
<action name="a" retry-max="2" retry-interval="1">
....
</action>
Больше информации на Oozie's documentation Вы можете узнать или изменить повторные попытки и интервал между повторным дефолтами по oozie-DEFAULT.XML. Общие значения по умолчанию указаны here
Я дал один ответ, связанный с повторением действия. Вы можете [проверить] (http://stackoverflow.com/a/38307943/2254048). Также я предоставил ссылку на документацию Oozie 4.2. – YoungHobbit
Это правда, что можно настроить автоматическую перезагрузку при сбое. Но проблема в том, как данные процесса sqoop, запись по записи или в пакетном процессе. Предположим, есть ли 10000 записей, и если исключение возникнет после 5000 записей, что произойдет? Поддерживает ли он какую-либо транзакцию или поддерживает любой флаг, который успешно обрабатывает записи, и не будет предпринимать никаких действий для тех, кто повторно выполняет задание. –
Может кто-то предоставить ваш опыт для вышеупомянутого вопроса от @AnkushBindra. Требуется ли удалить существующую запись перед перезапуском отказа? поиск предложений – kumsgs
У Оози есть опция для настройки/отправки электронной почты при сбое. – YoungHobbit
Большое спасибо за ваш ответ, есть ли какой-либо механизм повторных попыток или транзакций в случае импорта sqoop в случае сбоя между ними во время процесса передачи? –
Я дал один ответ, связанный с повторением действия. Вы можете [проверить] (http://stackoverflow.com/a/38307943/2254048). Также я предоставил ссылку на документацию Oozie 4.2. – YoungHobbit