Выполнение Apache Oozie в кластерах Azure HDInsight с Корпоративным пакетом безопасности
Apache Oozie — это система рабочих процессов и координации, управляющая заданиями Apache Hadoop. Служба Oozie интегрирована со стеком Hadoop и поддерживает следующие задания:
- Apache MapReduce
- Apache Pig
- Apache Hive
- Apache Sqoop
Вы также можете использовать Oozie для планирования системных заданий, например Java-программ и сценариев оболочки.
Предварительные требования
Кластер Azure HDInsight Hadoop с Корпоративным пакетом безопасности (ESP). Ознакомьтесь со статьей Настройка кластера HDInsight с корпоративным пакетом безопасности с помощью доменных служб Azure Active Directory.
Примечание
Подробные инструкции по использованию Oozie в кластерах без пакета ESP см. в статье Использование рабочих процессов Apache Oozie в Azure HDInsight под управлением Linux.
Подключение к кластеру ESP
Дополнительные сведения о Secure Shell (SSH) см. в статье Подключение к HDInsight (Hadoop) с помощью SSH.
Подключитесь к кластеру HDInsight с помощью протокола SSH:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
Чтобы проверить успешность аутентификации Kerberos, используйте команду
klist
. Если она не пройдена, запустите проверку подлинности Kerberos с помощью командыkinit
.Войдите в шлюз HDInsight, чтобы зарегистрировать токен OAuth, необходимый для доступа к Azure Data Lake Store:
curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
Код отклика состояния 200 ОК указывает на успешную регистрацию. Проверьте имя пользователя и пароль, если получен ответ о неуспешной авторизации (например, 401).
Определение рабочего процесса
Определения рабочих процессов Oozie записываются на языке определения процессов Apache Hadoop (hPDL). hPDL — это язык определения процессов XML. Для определения рабочего процесса выполните следующие действия:
Настройте рабочую область пользователя домена.
hdfs dfs -mkdir /user/<DomainUser> cd /home/<DomainUserPath> cp /usr/hdp/<ClusterVersion>/oozie/doc/oozie-examples.tar.gz . tar -xvf oozie-examples.tar.gz hdfs dfs -put examples /user/<DomainUser>/
Замените
DomainUser
именем пользователя домена. ЗаменитеDomainUserPath
путем к домашнему каталогу для пользователя домена. ЗаменитеClusterVersion
версией платформы данных, используемой вашим кластером.Для создания и открытия файла выполните следующий запрос:
nano workflow.xml
Открыв редактор nano, введите следующий код XML в качестве содержимого файла:
<?xml version="1.0" encoding="UTF-8"?> <workflow-app xmlns="uri:oozie:workflow:0.4" name="map-reduce-wf"> <credentials> <credential name="metastore_token" type="hcat"> <property> <name>hcat.metastore.uri</name> <value>thrift://<active-headnode-name>-<clustername>.<Domain>.com:9083</value> </property> <property> <name>hcat.metastore.principal</name> <value>hive/_HOST@<Domain>.COM</value> </property> </credential> <credential name="hs2-creds" type="hive2"> <property> <name>hive2.server.principal</name> <value>${jdbcPrincipal}</value> </property> <property> <name>hive2.jdbc.url</name> <value>${jdbcURL}</value> </property> </credential> </credentials> <start to="mr-test" /> <action name="mr-test"> <map-reduce> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <prepare> <delete path="${nameNode}/user/${wf:user()}/examples/output-data/mrresult" /> </prepare> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> <property> <name>mapred.mapper.class</name> <value>org.apache.oozie.example.SampleMapper</value> </property> <property> <name>mapred.reducer.class</name> <value>org.apache.oozie.example.SampleReducer</value> </property> <property> <name>mapred.map.tasks</name> <value>1</value> </property> <property> <name>mapred.input.dir</name> <value>/user/${wf:user()}/${examplesRoot}/input-data/text</value> </property> <property> <name>mapred.output.dir</name> <value>/user/${wf:user()}/${examplesRoot}/output-data/mrresult</value> </property> </configuration> </map-reduce> <ok to="myHive2" /> <error to="fail" /> </action> <action name="myHive2" cred="hs2-creds"> <hive2 xmlns="uri:oozie:hive2-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <jdbc-url>${jdbcURL}</jdbc-url> <script>${hiveScript2}</script> <param>hiveOutputDirectory2=${hiveOutputDirectory2}</param> </hive2> <ok to="myHive" /> <error to="fail" /> </action> <action name="myHive" cred="metastore_token"> <hive xmlns="uri:oozie:hive-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> </configuration> <script>${hiveScript1}</script> <param>hiveOutputDirectory1=${hiveOutputDirectory1}</param> </hive> <ok to="end" /> <error to="fail" /> </action> <kill name="fail"> <message>Oozie job failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end" /> </workflow-app>
Замените
clustername
именем кластера.Чтобы сохранить файл, нажмите Ctrl+X. Нажмите клавишу Y. Затем нажмите клавишу ВВОД.
Рабочий процесс состоит из двух частей:
Учетные данные. Этот раздел принимает учетные данные, которые используются для проверки подлинности действий Oozie:
В этом примере используется проверка подлинности для действий Hive. Дополнительные сведения см. в статье о проверке подлинности действий.
Служба учетных данных позволяет действиям Oozie олицетворять пользователя для доступа к службам Hadoop.
Действие. В этом разделе содержатся три действия: map-reduce, действия сервера Hive 2 и сервера Hive 1:
Действие map-reduce запускает пример из пакета Oozie для выполнения операции map-reduce, в результате которой вы получаете общее количество слов.
Действия сервера Hive 2 и сервера Hive 1 выполняют запрос к примеру таблицы Hive, поставляемой с кластером HDInsight.
Действия Hive используют учетные данные, определенные в разделе учетных данных, для проверки подлинности с помощью ключевого слова
cred
в элементе действия.
Выполните следующую команду, чтобы скопировать файл
workflow.xml
в/user/<domainuser>/examples/apps/map-reduce/workflow.xml
.hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Замените
domainuser
на свое имя пользователя для домена.
Определение файла свойств для задания Oozie
Для создания и изменения нового файла свойств задания используйте следующий оператор:
nano job.properties
Открыв редактор nano, используйте следующий код XML в качестве содержимого файла:
nameNode=adl://home jobTracker=headnodehost:8050 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/[domainuser]/examples/apps/map-reduce/workflow.xml hiveScript1=${nameNode}/user/${user.name}/countrowshive1.hql hiveScript2=${nameNode}/user/${user.name}/countrowshive2.hql oozie.use.system.libpath=true user.name=[domainuser] jdbcPrincipal=hive/<active-headnode-name>.<Domain>.com@<Domain>.COM jdbcURL=[jdbcurlvalue] hiveOutputDirectory1=${nameNode}/user/${user.name}/hiveresult1 hiveOutputDirectory2=${nameNode}/user/${user.name}/hiveresult2
- Используйте URI
adl://home
для свойстваnameNode
, если в качестве основного хранилища кластера используется Azure Data Lake Storage 1-го поколения. Если вы используете хранилище BLOB-объектов, укажитеwasb://home
. Если вы используете Azure Data Lake Storage 2-го поколения, укажитеabfs://home
. - Замените
domainuser
на свое имя пользователя для домена. - Замените
ClusterShortName
коротким именем кластера. Например, если имя кластера — sechadoopcontoso.azurehdisnight.net (https:// [пример ссылки] ),clustershortname
представляет собой первые шесть букв имени кластера: sechad. - Замените
jdbcurlvalue
на URL-адрес JDBC из файла конфигурации Hive. Например, jdbc:hive2://headnodehost:10001/;transportMode=http. - Чтобы сохранить файл, нажмите Ctrl+X, введите
Y
, а затем нажмите клавишу ВВОД.
Этот файл свойств должен присутствовать локально при выполнении заданий Oozie.
- Используйте URI
Создание пользовательских скриптов Hive для заданий Oozie
Вы можете создать два скрипта Hive для сервера Hive 1 и Hive 2, как показано в следующих разделах.
Файл сервера Hive 1
Создайте и измените файл для действий сервера Hive 1:
nano countrowshive1.hql
Создайте скрипт:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Сохраните файл в распределенную файловую систему Apache Hadoop (HDFS):
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Файл сервера Hive 2
Создайте и измените поле для действий сервера Hive 2:
nano countrowshive2.hql
Создайте скрипт:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
Сохраните файл в HDFS:
hdfs dfs -put countrowshive2.hql countrowshive2.hql
Отправка заданий Oozie
Отправка заданий Oozie для кластеров ESP аналогична отправке заданий Oozie в кластерах без пакета ESP.
Дополнительные сведения см. в статье Использование Oozie с Hadoop для определения и запуска рабочих процессов в Azure HDInsight под управлением Linux.
Результаты отправки заданий Oozie
Задания Oozie выполняются от имени пользователя. Поэтому в журналах аудита Apache Hadoop YARN и Apache Ranger задания отображаются как выполненные олицетворенным пользователем. Выходные данные интерфейса командной строки для заданий Oozie выглядят аналогично следующему коду:
Job ID : 0000015-180626011240801-oozie-oozi-W
------------------------------------------------------------------------------------------------
Workflow Name : map-reduce-wf
App Path : adl://home/user/alicetest/examples/apps/map-reduce/wf.xml
Status : SUCCEEDED
Run : 0
User : alicetest
Group : -
Created : 2018-06-26 19:25 GMT
Started : 2018-06-26 19:25 GMT
Last Modified : 2018-06-26 19:30 GMT
Ended : 2018-06-26 19:30 GMT
CoordAction ID: -
Actions
------------------------------------------------------------------------------------------------
ID Status Ext ID ExtStatus ErrCode
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@:start: OK - OK -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@mr-test OK job_1529975666160_0051 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive2 OK job_1529975666160_0053 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive OK job_1529975666160_0055 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@end OK - OK -
-----------------------------------------------------------------------------------------------
Журналы аудита Ranger для действий сервера Hive 2 показывают, что задания Oozie выполняли действие от имени пользователя. Представления Ranger и YARN доступны только для администратора кластера.
Настройка авторизации пользователей в Oozie
В Oozie уже есть конфигурация авторизации пользователей, которая может запретить пользователям останавливать или удалять задания другого пользователя. Чтобы включить эту конфигурацию, задайте для параметра oozie.service.AuthorizationService.security.enabled
значение true
.
Дополнительные сведения см. в статье об установке и настройке Apache Oozie.
Для таких компонентов, как сервер Hive 1, где подключаемый модуль Ranger недоступен или не поддерживается, возможна только недетализированная авторизация HDFS. Авторизация с высокой степенью детализации доступна только через подключаемые модули Ranger.
Получение веб-интерфейса Oozie
Веб-интерфейс Oozie позволяет получить информацию о состоянии задания Oozie в кластере. Чтобы получить веб-интерфейс, в кластерах ESP выполните действия ниже:
Добавить граничный узел и включить проверку подлинности SSH Kerberos.
Следовать инструкциям в веб-интерфейсе Oozie, чтобы включить туннелирование SSH для граничного узла и получить доступ к пользовательскому веб-интерфейсу.