Oozie: Flujos de Trabajo en Hadoop

Última actualización: 29/10/2023 – Oscar Fernandez

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.

Deja una respuesta