Ejecución de Apache Oozie en clústeres Azure HDInsight con Enterprise Security Package
Apache Oozie es un sistema de coordinación y flujos de trabajo que administra trabajos de Apache Hadoop. Oozie se integra con la pila de Hadoop y admite los siguientes trabajos:
- Apache MapReduce
- Apache Pig
- Apache Hive
- Apache Sqoop
Oozie también puede usarse para programar trabajos específicos de un sistema, como scripts de shell o programas Java.
Requisito previo
Un clúster Azure HDInsight Hadoop con Enterprise Security Package (ESP). Consulte Configuración de clústeres de HDInsight con Enterprise Security Package.
Nota
Para obtener instrucciones detalladas sobre el uso de Oozie en clústeres que no son ESP, vea el artículo sobre el uso de flujos de trabajo de Apache Oozie en Azure HDInsight basado en Linux.
Conexión a un clúster ESP
Para más información, consulte Conexión a través de SSH con HDInsight (Hadoop).
Conéctese al clúster de HDInsight con SSH:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
Para verificar la autenticación Kerberos correcta, utilice el comando
klist
. Si no es así, utilicekinit
para iniciar la autenticación Kerberos.Inicie sesión en la puerta de enlace de HDInsight para registrar el token de OAuth necesario para acceder a Azure Data Lake Storage:
curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
Un código de respuesta de estado 200 Correcto indica que el registro se ha realizado con éxito. Compruebe el nombre de usuario y la contraseña si recibe una respuesta, como puede ser la 401.
Definición del flujo de trabajo
Las definiciones de flujo de trabajo de Oozie se escriben en el lenguaje de definición de proceso de Apache Hadoop (hPDL). hPDL es un lenguaje de definición de procesos XML. Use los pasos siguientes para definir el flujo de trabajo:
Configuración del área de trabajo del usuario de dominio:
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>/
Reemplace
DomainUser
con el nombre de usuario del dominio. ReemplaceDomainUserPath
con la ruta de acceso del directorio principal del usuario de dominio. ReemplaceClusterVersion
con la versión de su plataforma de datos de clúster.Use la instrucción siguiente para crear y editar un archivo nuevo:
nano workflow.xml
Cuando se abra el editor nano, escriba el siguiente XML como contenido del archivo:
<?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>
Reemplace
clustername
por el nombre del clúster.Para guardar el archivo, seleccione Ctrl+X. Escriba Y. Luego seleccione Entrar.
El flujo de trabajo se divide en dos partes:
Credencial. Esta sección toma las credenciales que se usarán para autenticar las acciones de Oozie:
En este ejemplo se usa la autenticación para las acciones de Hive. Para más información, consulte Action Authentication (Autenticación de acciones).
El servicio de credenciales permite a las acciones de Oozie suplantar al usuario para obtener acceso a los servicios de Hadoop.
Action (Acción). Esta sección tiene tres acciones: map-reduce, Hive server 2 y Hive server 1:
La acción map-reduce ejecuta un ejemplo desde un paquete de Oozie para asignación-reducción que genera el recuento de palabras agregado.
Las acciones Hive server 2 y Hive server 1 ejecutan una consulta en una tabla de Hive de ejemplo proporcionada con HDInsight.
Las acciones Hive usan las credenciales definidas en la sección de credenciales para la autenticación mediante la palabra clave
cred
en el elemento action.
Use el comando siguiente para copiar el archivo
workflow.xml
en/user/<domainuser>/examples/apps/map-reduce/workflow.xml
:hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Reemplace
domainuser
con el nombre de usuario para el dominio.
Definición del archivo de propiedades para el trabajo de Oozie
Use la instrucción siguiente para crear y editar un archivo nuevo para las propiedades del trabajo:
nano job.properties
Cuando se abra el editor nano, use el siguiente XML como contenido del archivo:
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
- Use la URI
adl://home
para la propiedadnameNode
si usa Azure Data Lake Storage Gen1 como almacenamiento de clúster principal. Si usa Azure Blob Storage, cámbiela awasb://home
. Si usa Azure Data Lake Storage Gen2, cámbiela aabfs://home
. - Reemplace
domainuser
con el nombre de usuario para el dominio. - Reemplace
ClusterShortName
por el nombre corto del clúster. Por ejemplo, si el nombre del clúster es https:// [vínculo de ejemplo] sechadoopcontoso.azurehdisnight.net,clustershortname
son los seis primeros caracteres del clúster: sechad. - Reemplace
jdbcurlvalue
con la dirección URL de JDBC de la configuración de Hive. Un ejemplo es jdbc:hive2://headnodehost:10001/;transportMode=http. - Para guardar el archivo, seleccione Ctrl+X, escriba
Y
y, a continuación, seleccione Entrar.
Este archivo de propiedades tiene que estar presente localmente al ejecutar trabajos de Oozie.
- Use la URI
Creación de scripts personalizados de Hive para trabajos de Oozie
Puede crear los dos scripts de Hive para Hive server 1 y Hive server 2 como se muestra en las secciones siguientes.
Archivo de Hive server 1
Cree y edite un archivo para las acciones de tipo Hive server 1:
nano countrowshive1.hql
Cree el script:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Guarde el archivo en el Sistema de archivos distribuido de Apache Hadoop (HDFS):
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Archivo de Hive server 2
Cree y edite un archivo para las acciones de tipo Hive server 2:
nano countrowshive2.hql
Cree el script:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
Guarde el archivo en HDFS:
hdfs dfs -put countrowshive2.hql countrowshive2.hql
Envío de trabajos de Oozie
El envío de trabajos de Oozie para clústeres ESP es como el envío de trabajos de Oozie en los clústeres no ESP.
Para obtener más información, vea Uso de Apache Oozie con Apache Hadoop para definir y ejecutar un flujo de trabajo en Azure HDInsight basado en Linux.
Resultados de un envío de trabajos de Oozie
Los trabajos de Oozie se ejecutan para el usuario. Tanto los registros de auditoría YARN de Apache Hadoop como los de Apache Ranger muestran los trabajos que se ejecutan como el usuario suplantado. La salida de la interfaz de línea de comandos de un trabajo de Oozie es similar al código siguiente:
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 -
-----------------------------------------------------------------------------------------------
Los registros de auditoría de Ranger para las acciones Hive server 2 muestran a Oozie ejecutando la acción por el usuario. Las vistas de Ranger y YARN son visibles solamente para el administrador de clúster.
Configuración de la autorización de usuario en Oozie
Oozie por sí solo tiene una configuración de autorización de usuario que puede impedir a los usuarios detener o eliminar trabajos de otros usuarios. Para habilitar esta configuración, establezca oozie.service.AuthorizationService.security.enabled
en true
.
Para obtener más información, vea Apache Oozie Installation and Configuration (Instalación y configuración de Apache Oozie).
Para los componentes como Hive server 1, donde el complemento Ranger no está disponible o no es compatible, solo es posible usar la autorización HDFS general. La autorización más específica solo está disponible mediante los complementos Ranger.
Obtención de la interfaz de usuario web de Oozie
La interfaz de usuario web de Oozie ofrece una vista basada en web en el estado de los trabajos de Oozie en el clúster. Para obtener la interfaz de usuario web, lleve a cabo los pasos siguientes en clústeres ESP:
Agregue un nodo perimetral y habilite la autenticación SSH Kerberos.
Siga los pasos en Interfaz de usuario web de Oozie para habilitar la tunelización de SSH al nodo perimetral y tener acceso a la interfaz de usuario web.