Tutorial de Apache Oozie: qué es, flujo de trabajo, ejemplo – Hadoop

¿Qué es OOZIE?

Apache Oozie es un programador de flujo de trabajo para Hadoop. Es un sistema que ejecuta el flujo de trabajo de trabajos dependientes. Aquí, los usuarios pueden crear Gráficos acíclicos dirigidos de flujos de trabajo, que se pueden ejecutar en paralelo y secuencialmente en Hadoop.

Está formado por dos partes:

  • Motor de flujo de trabajo: la responsabilidad de un motor de flujo de trabajo es almacenar y ejecutar flujos de trabajo compuestos por trabajos de Hadoop, por ejemplo, MapReduce, Pig, Hive.
  • motor coordinador: Ejecuta trabajos de flujo de trabajo basados ​​en cronogramas predefinidos y disponibilidad de datos.

Oozie es escalable y puede gestionar la ejecución oportuna de miles de flujos de trabajo (cada uno compuesto por docenas de trabajos) en un clúster Hadoop.

OZIE

Oozie también es muy flexible. Se pueden iniciar, detener, suspender y volver a ejecutar trabajos fácilmente. Oozie hace que sea muy fácil volver a ejecutar flujos de trabajo fallidos. Uno puede comprender fácilmente lo difícil que puede ser ponerse al día con los trabajos perdidos o fallidos debido a tiempos de inactividad o fallas. Incluso es posible omitir un nodo fallido específico.

¿Cómo funciona OOZIE?

Oozie se ejecuta como un servicio en el clúster y los clientes envían definiciones de flujo de trabajo para su procesamiento inmediato o posterior.

El flujo de trabajo de Oozie consta de nodos de acción y la nodos de flujo de control.

An nodo de acción representa una tarea de flujo de trabajo, por ejemplo, mover archivos a HDFS, ejecutar MapReduce, Pig o Colmena trabajos, importar datos usando Sqoop o ejecutar un script de shell de un programa escrito en Java.

A nodo de flujo de control controla la ejecución del flujo de trabajo entre acciones al permitir construcciones como la lógica condicional en la que se pueden seguir diferentes ramas dependiendo del resultado del nodo de acción anterior.

Nodo de inicio, Nodo final y Nodo de error caen bajo esta categoría de nodos.

Nodo de inicio, designa el inicio del trabajo de flujo de trabajo.

nodo final, señala el final del trabajo.

Nodo de error designa la aparición de un error y el mensaje de error correspondiente que se imprimirá.

Al final de la ejecución de un flujo de trabajo, Oozie utiliza la devolución de llamada HTTP para actualizar al cliente con el estado del flujo de trabajo. La entrada o salida de un nodo de acción también puede desencadenar la devolución de llamada.

Ejemplo de diagrama de flujo de trabajo

Ejemplo de diagrama de flujo de trabajo

Empaquetado e implementación de una aplicación de flujo de trabajo Oozie

Una aplicación de flujo de trabajo consta de la definición del flujo de trabajo y todos los recursos asociados, como archivos Jar de MapReduce, scripts de Pig, etc. Las aplicaciones deben seguir una estructura de directorio simple y se implementan en HDFS para que Oozie pueda acceder a ellos.

A continuación se muestra un ejemplo de estructura de directorio:

<name of workflow>/</name>
??? lib/
? ??? hadoop-examples.jar
??? workflow.xml

Es necesario mantener flujo de trabajo.xml (un archivo de definición de flujo de trabajo) en el directorio de nivel superior (directorio principal con el nombre del flujo de trabajo). El directorio Lib contiene archivos Jar que contienen clases de MapReduce. La aplicación de flujo de trabajo que se ajuste a este diseño se puede crear con cualquier herramienta de compilación, por ejemplo, Ant o Maven.

Dicha compilación debe copiarse a HDFS mediante un comando, por ejemplo:

% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow

Pasos para ejecutar un trabajo de flujo de trabajo de Oozie

En esta sección, veremos cómo ejecutar un trabajo de flujo de trabajo. Para ejecutar esto, usaremos la herramienta de línea de comandos de Oozie (un programa cliente que se comunica con el servidor de Oozie).

1. Exporte la variable de entorno OOZIE_URL que le indica al comando oozie qué servidor Oozie usar (aquí estamos usando uno que se ejecuta localmente):

% export OOZIE_URL="http://localhost:11000/oozie"

2. Ejecute el trabajo de flujo de trabajo usando-

% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run

La opción -config se refiere a un local Java archivo de propiedades que contiene definiciones para los parámetros en el archivo XML del flujo de trabajo, así como oozie.wf.application.path, que le indica a Oozie la ubicación de la aplicación de flujo de trabajo en HDFS.

Contenido de ejemplo del archivo de propiedades:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>

3. Obtenga el estado del trabajo del flujo de trabajo.

El estado del trabajo del flujo de trabajo se puede ver usando el subcomando "trabajo" con la opción "-info" y especificando la identificación del trabajo después de "-info".

e.g., % oozie job -info <job id>

La salida muestra el estado, que es EN EJECUCIÓN, MUERTO o EXITOSO.

4. Los resultados de la ejecución exitosa del flujo de trabajo se pueden ver usando el comando Hadoop como:

% hadoop fs -cat <location of result>

¿Por qué utilizar Oozie?

El objetivo principal de utilizar Oozie es gestionar diferentes tipos de trabajos que se procesan en el sistema Hadoop.

Las dependencias entre trabajos las especifica un usuario en forma de gráficos acíclicos dirigidos. Oozie consume esta información y se encarga de su ejecución en el orden correcto según lo especificado en un flujo de trabajo. De esa manera, se ahorra tiempo al usuario para administrar el flujo de trabajo completo. Además, Oozie tiene una disposición para especificar la frecuencia de ejecución de un trabajo en particular.

Características de Oozie

  • Oozie tiene una API de cliente y una interfaz de línea de comandos que se puede utilizar para iniciar, controlar y monitorear el trabajo desde Java .
  • Al utilizar sus API de servicios web, se pueden controlar los trabajos desde cualquier lugar.
  • Oozie tiene disposiciones para ejecutar trabajos programados para ejecutarse periódicamente.
  • Oozie tiene la posibilidad de enviar notificaciones por correo electrónico una vez finalizados los trabajos.