Tutorial de Apache Oozie: Diagrama de flujo de trabajo, Planificador

⚡ Resumen inteligente

Apache Oozie es el planificador de flujos de trabajo para Hadoop que ejecuta trabajos dependientes como grafos acíclicos dirigidos, combinando un motor de flujo de trabajo para acciones de MapReduce, Pig y Hive con un motor coordinador impulsado por el tiempo y la disponibilidad de datos.

  • 🔘 Dos motores: Un motor de flujo de trabajo ejecuta los gráficos de trabajos de Hadoop; un motor coordinador los activa según un cronograma o al recibir datos.
  • ☑️ Tipos de nodos: Los nodos de acción realizan el trabajo; los nodos de control, como decisión, bifurcación y unión, dirigen el camino.
  • ✅ Tres tipos de trabajo: El flujo de trabajo, el coordinador y los paquetes de tareas se combinan para formar una canalización de datos completa.
  • 🧪 Despliegue: Una aplicación de flujo de trabajo es un directorio que contiene workflow.xml y una carpeta lib, copiados en HDFS.
  • 🛠️ Línea de comando: Conjunto OOZIE_URL, envíe con oozie job -run, luego consulte oozie job -info hasta que informe SUCCEEDED.
  • ⚠️ Estado del proyecto: Oozie fue retirado al Apache Attic en 2025, por lo que los nuevos oleoductos suelen utilizar Apache Airflow.

Tutorial de Apache Oozie que abarca el flujo de trabajo, los trabajos del coordinador y la programación de Hadoop.

¿Qué es Apache Oozie?

Apache Oozie es un programador de flujos de trabajo para HadoopSe trata de un sistema que gestiona el flujo de trabajo de tareas dependientes. Aquí, los usuarios pueden crear grafos acíclicos dirigidos de flujos de trabajo, que pueden ejecutarse 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, Cerdo, Colmena.
  • Motor coordinador: Ejecuta tareas de flujo de trabajo en función de programaciones predefinidas y la disponibilidad de datos.

Oozie es escalable y puede gestionar la ejecución puntual de miles de flujos de trabajo (cada uno compuesto por docenas de tareas) en un clúster Hadoop. El siguiente diagrama muestra la ubicación del planificador en relación con el clúster y las tareas que gestiona.

Planificador de flujos de trabajo Apache Oozie que ejecuta trabajos Hadoop dependientes como un grafo acíclico dirigido.

Oozie también es muy flexible. Permite iniciar, detener, suspender y volver a ejecutar trabajos fácilmente. Además, facilita enormemente la repetición de flujos de trabajo fallidos. Es fácil comprender lo difícil que puede resultar recuperar trabajos perdidos o fallidos debido a interrupciones del servicio o fallos. Incluso es posible omitir un nodo específico que haya fallado.

Estado del proyecto: Apache Oozie fue retirado por Apache Software. Foundation en febrero de 2025 y el traslado a la Ático Apache Finalizado en abril de 2025. La versión final sigue siendo la 5.2.1 de febrero de 2021, y el repositorio de código fuente ahora es de solo lectura. Los clústeres existentes aún lo ejecutan, por lo que vale la pena conocer los detalles a continuación, pero las nuevas canalizaciones normalmente se crean con Apache Airflow.

¿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.

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

Un nodo de acción representa una tarea de flujo de trabajo, por ejemplo, mover archivos a HDFS, ejecutando un trabajo MapReduce, Pig o Hive, importando datos usando sqoopo ejecutar un script de shell o un programa escrito en Java.

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

Los nodos de inicio, fin y error pertenecen a esta categoría.

  • Nodo de inicio designa el inicio del trabajo de flujo de trabajo.
  • Nodo final indica el final del trabajo.
  • Nodo de error Indica la ocurrencia de un error y el mensaje de error correspondiente que se debe imprimir.

Al finalizar la ejecución de un flujo de trabajo, Oozie utiliza una devolución de llamada HTTP para informar al cliente sobre el estado del flujo de trabajo. La entrada o salida de un nodo de acción también puede activar la devolución de llamada.

Nodos de control y tipos de acciones de Oozie

Más allá de inicio, fin y error, el XML del flujo de trabajo admite un pequeño vocabulario de nodos de control que dan forma al gráfico.

  • decisión: Evalúa una expresión y dirige el flujo de trabajo hacia una de varias ramas, el equivalente a una instrucción switch.
  • tenedor: Divide la ruta para que dos o más acciones se ejecuten en paralelo.
  • unirse: Espera a que todas las ramas de una bifurcación coincidente terminen antes de continuar.
  • matar: Finaliza el flujo de trabajo inmediatamente y registra el mensaje de error.

Los nodos de acción abarcan el trabajo en sí, y cada uno tiene su propio elemento XML:

  • MapReduce, Pig, Hive y Sqoop Las acciones inician el trabajo Hadoop correspondiente.
  • Java ejecuta una clase principal en el clúster; shell y ssh ejecutar scripts.
  • fs realiza tareas de mantenimiento de HDFSping tales como mover, eliminar, crear directorio y cambiar permisos.
  • o enviar un email. notifica a los destinatarios y flujo de trabajo secundario llama a otra aplicación de flujo de trabajo.

Ejemplo de diagrama de flujo de trabajo

El diagrama a continuación traces un pequeño flujo de trabajo desde su nodo de inicio, a través de una acción MapReduce, hasta el nodo final o la ruta de error cuando la acción falla.

Ejemplo de diagrama de flujo de trabajo de Oozie que muestra el nodo de inicio, el nodo de acción, el manejo de errores y el nodo final.

Tipos de trabajos de Oozie

Oozie describe el trabajo en tres niveles. Cada capa envuelve a la que está debajo, por lo que un paquete controla, en última instancia, muchos flujos de trabajo individuales.

Tipo de empleo Lo que define Desencadenado por
Flujo de trabajo Un grafo acíclico dirigido de nodos de acción y control, escrito en workflow.xml. Envío manual o un coordinador
Director Un cronograma recurrente para un flujo de trabajo, con una hora de inicio, una hora de finalización y una frecuencia. Disponibilidad de la hora del reloj y de los datos de entrada
Formentera Bundle Un conjunto de aplicaciones coordinadoras gestionadas conjuntamente como una única canalización de datos. Un horario de inicio que se aplicó a todos sus coordinadores.

La distinción es importante en la práctica: un flujo de trabajo responde a la pregunta "¿qué se ejecuta?", un coordinador responde a la pregunta "¿cuándo se ejecuta?" y un paquete responde a la pregunta "¿qué comienza y termina juntos?".

Empaquetado e implementación de una aplicación de flujo de trabajo de 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 directorios simple y se implementan en HDFS para que Oozie pueda acceder a ellas.

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

<name of workflow>/
├── lib/
│   └── hadoop-examples.jar
└── workflow.xml

Es necesario mantener workflow.xml (un archivo de definición de flujo de trabajo) en el directorio raíz (el directorio padre que contiene el nombre del flujo de trabajo). El directorio lib contiene archivos JAR con clases MapReduce. Una aplicación de flujo de trabajo que cumpla con esta estructura se puede compilar 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. Exportar el OOZIE_URL variable de entorno, que le indica al comando oozie qué servidor Oozie usar (en este caso estamos usando uno que se ejecuta localmente):

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

2. Ejecute el trabajo de flujo de trabajo utilizando:

% 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. Obtén el estado del trabajo del flujo de trabajo.

El estado de una tarea de flujo de trabajo se puede consultar mediante el subcomando 'job' con la opción '-info', especificando el ID de la tarea después de '-info'.

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

La salida muestra un estado que puede ser uno de los siguientes: EJECUTÁNDOSE, TERMINADO o CORRECTO.

4. Los resultados de una ejecución exitosa del flujo de trabajo se pueden ver utilizando un comando de Hadoop como el siguiente:

% hadoop fs -cat <location of result>

¿Por qué utilizar Oozie?

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

El usuario especifica las dependencias entre tareas mediante grafos acíclicos dirigidos. Oozie procesa esta información y se encarga de su ejecución en el orden correcto, según lo especificado en el flujo de trabajo. De esta forma, se ahorra tiempo al usuario al gestionar el flujo de trabajo completo. Además, Oozie permite especificar la frecuencia de ejecución de cada tarea.

Características de Oozie

  • Oozie tiene una API de cliente y una interfaz de línea de comandos que se pueden usar para iniciar, controlar y monitorear trabajos desde una Java .
  • Mediante sus API de servicio web, se pueden controlar los trabajos desde cualquier lugar.
  • Oozie dispone de una función para ejecutar tareas programadas para realizarse periódicamente.
  • Oozie dispone de una función para enviar notificaciones por correo electrónico una vez finalizados los trabajos.

Oozie contra Apache Airflow

Dado que Oozie ya no se utiliza, la mayoría de los equipos que evalúan un planificador hoy en día comparan sus sistemas actuales con Apache Airflow. Ambas herramientas resuelven el mismo problema desde perspectivas opuestas.

Aspecto apache oozie Flujo de aire Apache
Lenguaje de definición Flujos de trabajo escritos en XML DAGs escritos como Python código
<b></b><b></b> Construido en torno a acciones de Hadoop como MapReduce, Pig, Hive y Sqoop. De propósito general, con operadores para servicios en la nube, bases de datos y contenedores.
Programación Los puestos de coordinador están condicionados por el tiempo y la disponibilidad de datos. Intervalos programados más sensores que esperan condiciones externas
Estado del proyecto Retirado al Apache Attic en 2025; versión final 5.2.1 Proyecto Apache de alto nivel en desarrollo activo

Oozie sigue siendo la opción más sencilla en un clúster que ya lo ejecuta, ya que las acciones se corresponden directamente con los componentes de Hadoop. Airflow es la opción práctica para cualquier novedad, especialmente cuando una canalización se extiende más allá de Hadoop.

Preguntas Frecuentes

No. El software Apache Foundation Oozie se retiró en febrero de 2025 y la migración al ático se completó en abril de 2025. La versión final es la 5.2.1 de febrero de 2021 y el repositorio es de solo lectura, aunque la documentación permanece en línea.

Los asistentes de IA transforman una canalización descrita en una configuración de planificador, explican por qué se bloqueó un gráfico de tareas y resumen los registros del clúster para identificar la causa raíz probable. Son útiles para el primer borrador y para la evaluación inicial, pero no para aprobar un cronograma de producción.

Copilot genera rápidamente un archivo workflow.xml plausible, pero a menudo inventa nombres de elementos o utiliza una versión de esquema incorrecta. Valide el XML generado con el esquema 5.2.1 y realice una prueba en un clúster de prueba antes de ejecutarlo.

Un coordinador combina una frecuencia, una hora de inicio y una hora de finalización con definiciones de conjuntos de datos. Se activa solo cuando el reloj alcanza el siguiente intervalo y todos los conjuntos de datos de entrada declarados existen en HDFS, por lo que los datos tardíos retrasan la ejecución.

Vuelva a enviar la tarea con la acción de reejecución y el ID de tarea original, indicando los nodos que desea omitir o repetir. Oozie reutiliza las acciones completadas, por lo que solo se ejecuta la parte restante del gráfico.

PREP significa que el trabajo fue aceptado pero no iniciado, generalmente porque la ruta de la aplicación en HDFS es incorrecta o no ha llegado el momento de materialización. SUSPENDED significa que alguien lo pausó o que una acción falló y el flujo de trabajo se detuvo.

El servidor se ejecuta con su propio principal y clave, y los clientes se autentican mediante SPNEGO sobre HTTP. Los flujos de trabajo incluyen tokens de delegación, de modo que cada acción llega a HDFS y YARN como el usuario que la envía, no como el servidor.

Cron ejecuta un comando y lo olvida. Un planificador tracks dependencias entre trabajos, espera a que lleguen los datos de entrada, registra el estado de cada acción y permite volver a ejecutar solo la parte que falló.

Resumir este post con: