Oozie: Flujos de Trabajo en Hadoop

  • Tiempo de lectura:10 minutos de lectura
  • Autor de la entrada:
  • Última modificación de la entrada:14/07/2024

En el ecosistema Hadoop, existen varias herramientas y componentes que facilitan el procesamiento y la administración de datos a gran escala. Uno de estos componentes es Oozie, una herramienta de flujo de trabajo que ayuda a coordinar y ejecutar tareas en un clúster de Hadoop.

Trabajos en Hadoop con Oozie

En este artículo, exploraremos Oozie en detalle y entenderemos cómo se puede utilizar para administrar y programar flujos de trabajo en Hadoop.

¿Qué es Oozie?

Oozie es una herramienta para implementar flujos de trabajo de código abierto desarrollada por la Apache Software Foundation.

Proporciona un sistema para definir y ejecutar flujos de trabajo que involucran diversas acciones, como ejecución de tareas de MapReduce, acciones de Pig, Hive o Spark, entre otras.

Oozie se basa en el lenguaje XML para definir los flujos de trabajo y utiliza un coordinador para programar y ejecutar estas tareas en el clúster de Hadoop.

Con su capacidad para integrarse con diferentes componentes de Hadoop, Oozie se ha convertido en una opción popular para el desarrollo y la gestión de flujos de trabajo en entornos de big data.

Componentes de Oozie

Definición del flujo de trabajo (Workflow Definition)

El flujo de trabajo se especifica en un archivo XML, donde se definen las acciones y el orden en que deben ejecutarse. Cada acción en el flujo de trabajo está asociada con un tipo de acción específico.

Estas acciones se ejecutan secuencialmente según la lógica definida en el archivo XML.

Coordinador (Coordinator)

El coordinador es responsable de la programación y de la ejecución de los flujos de trabajo en función de ciertos desencadenantes o condiciones. Puede programar la ejecución de los flujos en intervalos regulares, a una hora específica o según la disponibilidad de datos.

Motor de Oozie (Oozie Engine)

Oozie logo

El motor de Oozie es el núcleo de la herramienta. Es responsable de la interpretación y ejecución del flujo de trabajo definido en el archivo XML. Este motor coordina y ejecuta las acciones requeridas por el flujo de trabajo y administra su estado.

Base de datos de metadatos (Metadata Database)

Oozie también utiliza una base de datos de metadatos para almacenar información sobre los flujos de trabajo, coordinadores, acciones y su estado.

Esta base de datos es necesaria para realizar un seguimiento del progreso de los flujos de trabajo y proporcionar información sobre las ejecuciones anteriores.

Ejemplo de flujo de trabajo en Oozie con Spark

Para utilizar Oozie, primero debemos definir un flujo de trabajo en XML. El archivo XML contendrá las acciones necesarias y la lógica para ejecutarlas. Cada acción se define como un paso dentro del flujo de trabajo, y se pueden especificar dependencias entre acciones.

Una vez que se ha creado el archivo XML, se puede cargar en Oozie utilizando la interfaz de línea de comandos o la interfaz web de Oozie. El coordinador se encargará de programar la ejecución del flujo de trabajo según lo programado.

Oozie permite ejecutar flujos de trabajo que incluyen tareas de Spark.

<workflow-app xmlns="uri:oozie:workflow:0.5" name="ejemplo-workflow">
    <start to="spark-node"/>
    
    <action name="spark-node">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>jobtracker.example.com:8021</job-tracker>
            <name-node>hdfs://namenode.example.com:8020</name-node>
            <master>yarn</master>
            <mode>client</mode>
            <name>MySparkJob</name>
            <class>com.example.MySparkJobClass</class>
            <jar>/user/usuario/ejemplo/my-spark-job.jar</jar>
            <spark-opts>--executor-memory 1g --num-executors 2</spark-opts>
            <arg>arg1</arg>
            <arg>arg2</arg>
        </spark>
        <ok to="end"/>
        <error to="fail"/>
    </action>

    <kill name="fail">
        <message>Error en el flujo de trabajo</message>
    </kill>

    <end name="end"/>
</workflow-app>

En este ejemplo, se define un workflow en Oozie para ejecutar una tarea de Spark:

  1. <start to="spark-node"/>: Inicia el flujo de trabajo y se conecta a la tarea de Spark.
  2. <action name="spark-node">: Define la tarea de Spark con unos parámetros:
  • master define el modo en que se ejecutará Spark (en este caso, yarn).
  • class especifica la clase de la aplicación Spark que se ejecutará.
  • jar es la ubicación del archivo JAR que contiene la aplicación.
  • arg son argumentos específicos que se pasarán a la aplicación Spark.
  1. <ok to="end"/> y <error to="fail"/>: Estas etiquetas especifican las transiciones que deben seguirse si la tarea de Spark se completa con éxito o falla.
  2. <kill name="fail">: Define la etapa de fallo y proporciona un mensaje de error.
  3. <end name="end"/>: Define la etapa de finalización del flujo de trabajo.

Curso recomendado de Oozie

En Udemy, tienes un buen curso online para aprender Oozie desde cero:

curso Oozie recomendado

De 0 a 1: el marco de orquestación Oozie

Este curso te guiará para aprender a crear flujos de trabajo, triggers y pipelines de datos. Tanto si eres analista, administrador de sistemas o ingeniero de datos, te resultará útil para usar esta tecnología en el ámbito profesional.

Preguntas Frecuentes

¿Qué es un archivo properties en Oozie?

Este archivo contiene las configuraciones y parámetros necesarios para ejecutar un flujo de trabajo o un trabajo de coordinación. Este archivo especifica los valores de las variables utilizadas en el flujo de trabajo, como rutas de archivos, nombres de tablas, y parámetros de configuración específicos.

¿Cómo se maneja la tolerancia a fallos en Oozie?

Oozie ofrece mecanismos como el reinicio automático de trabajos fallidos y la capacidad de reanudar flujos de trabajo desde el punto de fallo. Además, permite definir acciones de manejo de errores utilizando nodos de control para finalizar el flujo de trabajo de manera controlada.

¿Qué es un Bundle en Apache Oozie?

Un Bundle en Apache Oozie es una agrupación de trabajos coordinadores y de flujo de trabajo que se ejecutan como una única unidad lógica. Los Bundles permiten la gestión y programación conjunta de múltiples trabajos coordinados, facilitando la administración de flujos de trabajo complejos que dependen unos de otros.

Deja una respuesta