Skip to main content
Oozie_Hadoop

Oozie: Programando Jobs en Hadoop

Tiempo de Lectura: 4 minutos

 

Una funcionalidad indispensable en cualquier proyecto de sistemas es el poder programar ejecuciones o acciones que realicen distintas tareas en ciertos periodos de tiempo. Por ejemplo, ejecutar la carga de nuestra bodega diariamente, ejecutar transformaciones de datos o incluso la publicación de la misma…todo esto es posible también con nuestra arquitectura Hadoop, el proyecto el cual te permite realizar este tipo de acciones es Oozie.

Qué es Oozie?

Es un proyecto el cual nos permite planificar workflows o Flujos de trabajo para administrar jobs de Apache Hadoop. Por ejemplo, tal vez tengas un Job de MapReduce el cual te gustaría ejecutar cada día a las 7 de la mañana…algo muy similar a los Cron Jobs de Unix.

Oozie combina múltiples secuencias de Jobs dentro de una unidad lógica de trabajo llamada workflow en la cual podemos incluir cualquier tipo de tarea que necesitemos, Oozie está complemente integrado con los demás proyectos de Apache Hadoop, lo que le permite soportar varios tipos de Jobs Hadoop como por ejemploMap-Reduce, Streaming map-reduce, Pig, Hive, Sqoop y Distcp como también Jobs más específicos como Java programs y shell scripts.

Oozie es una herramienta muy completa, la cual también le permite a los administradores del cluster, construir transformaciones de datos complejos como resultado de múltiples componentes de tareas.

Oozie en el ecosistema Hadoop

Oozie al permitir ejecutar distintos tipos de Jobs de aplicaciones dentro del ecosistema Hadoop, es parte fundamental de cualquier proyecto y se encuentra transversalmente a todos los demás proyectos Hadoop, así que una aproximación a la arquitectura Hadoop con Oozie podría ser la siguiente:

Oozie_in_Hadoop

Cómo Trabaja Oozie?

Oozie posee internamente un modelo de ejecución llamado Directed Acyclic Graph DAGS. DAGS es un tipo de asistente que coordina y asiste la ejecución completa del workflow creado, utilizando el mínimo de recursos, lo que significa que no existen loops dentro del grafo del workflow por lo cual todas las tareas y dependencias se ejecutan de inicio a fin en un solo camino permitiendo una ejecución más limpia de los procesos.

En pocas palabras, Oozie ejecuta sus Jobs de manera secuencial dado una mejor administración y ejecución de las tareas en general.

Componentes de funcionamiento

Oozie workflow

Permite correr cualquier job. Es el componente que proporciona soporte para definir y ejecutar secuencias controladas de MapReduce, Hive y Pig Jobs.

Si quieres ejecutar un job, es necesario crear previamente un workflow definiendo un detalle de lo que se ejecutara y sus parámetros necesarios.

Como se comentó anteriormente, los workflow Jobs son DAG el cual permite especificar una secuencia de acciones a ejecutar.

Oozie Coordinator

Este componente permite gestionar los Jobs que están ejecutándose tanto por tiempo de ejecución como por disponibilidad de datos. Es quien le indica a Oozie en que momento se ejecutara y con que disponibilidad de datos.

Por ejemplo, si en la ejecución de un job dependemos de un archivo en particular, pues Oozie Coordinator validará por nosotros si el archivo existe y hasta que no esté disponible no se ejecutara.

Oozi Bundel

Este por el contrario permite agrupar múltiples Coordinators y distintos Workflows Job, brindando una ambiente de administración del ciclo de vida de los mismos.

Ejemplo de un workflow

Oozie Hadoop WorkFlow

El ejemplo anterior define un escenario cómo el siguiente:

  • Inicia el workflow con un job Mapreduce: si este obtiene un error se destruirá de lo contrario sigue su curso a la bifurcación
  • Luego, el resultado anterior ejecuta en dos Jobs distintos: no en MapReduce y otro en script Pig.
  • Su resultado es unificado para pasar a las decisiones, aquí se ejecutará cuantas veces ea necesario un job Mapreduce (supongamos que validamos disponibilidad de datos, hasta que no tenga la cantidad necesario de registros no continua, por se ejecutará cuantas veces sea necesario)
  • Una vez termina el anterior, se ejecuta un job programado en Java el cual almacenará el resultado en el File System de Hadoop
  • Se da por terminado el workflow.

Estados de un workflow

Oozie Workflow States

  • PREP: Cuando un Workflow job es creado por primera vez, su estado será PREP. EL workflow es definido pero no está en ejecución.
  • RUNNING: Cuando un Workflow job es iniciado su estado cambiará a RUNNING, éste permanecerá en estado RUNNING mientras no alcance su estado final, finalice con error o esté suspendido.
  • SUSPENDED: Un Workflow job en estado RUNNING puede ser suspendido SUSPENDED, estará en SUSPENDED mientras no se reanude su ejecución o sea terminado a la fuerza.
  • SUCCEDED: Cuando un Workflow job que está en RUNNING llega hasta el final del nodo sin problemas, su estado final será SUCCEDED.
  • KILLED: Cuando un Workflow job CREATED, RUNNING o SUSPENDED es terminado por el administrador o el propietario del Workflow job a la fuerza, su estado final será KILLED.
  • FAILED: Cuando un Workflow job en ejecución RUNNING falla con cualquier error inesperado, éste finalizará y su estado será FAILED.

Algunas características WorkFlow de Oozie

  • Un workflow Oozie es una aplicación DAG que coordina los siguientes tipos de acciones: hadoop, Pig, hive, sub-workflows, scripts Shell,etc.
  • Oozie no soporta ciclos o bucles en la definición de los workflows, las definiciones workflow solo pueden ser de tipo DAG.
  • Si en un despliegue de un workflow Oozie detecta un ciclo, el despliegue fallará.
  • Un workflow es un archivo que contiene la definición del workflow en XML con todos los archivos y acciones necesarias para ejecutar las acciones: archivos JAR para trabajos MapReduce, scripts para flujos de trabajos MapReduce, librería nativas, scripts Pig, scripts Hive y otros archivos de origen.
  • La definición de una workflow para Oozie está basado en XML y ésta es llamado HPDL (Hadoop Process Definition Language).
  • Los requerimiento mínimos para definir un Oozie workflow XML son nombre, punto de inicio y punto de finalización.
  • Los nodos del flujo de control proporcionan un camino a la ruta de ejecución
  • El nodo de inicio especifica un punto de inicio para Oozie Wrkflow
  • El nodo final especifica un punto de finalización para Oozie Wrkflow
  • Para un Oozie Workflow MapReduce, nosotros necesitamos definir una acción y dentro de la acción especificaciones con los parámetros del MapReduce.
  • Dentro de la acciones, nosotros también podemos proporcionar los tags <ok> y <error> directamente para la siguiente acción encado de tener una ejecución satisfactoria o con error.

Conclusión sobre Oozie

Programar tareas es una parte esencial de cualquier proyecto y Hadoop no se queda atrás, este particular proyecto nos permite automatizar a gran escala toda clase de tareas necesarias para nuestra carga de data, transformación de datos, almacenamiento y disponibilidad de los mismos y cuando lo necesitemos, es por eso que considero siempre que puedas incluir estas funcionalidades a tu arquitectura Hadoop.

 

Leaderboard-PackHadoop

 

¿Qué te pareció Oozie? ¿Consideras que debe ser tenido en cuenta en una solución Big Data con Hadoop? ¿Crees necesario tener en tu proyecto la programación y ejecución automática de tus tareas?

Especialista en Business Intelligence con experiencia en herramientas como Pentaho, Microsoft y Microstrategy. Inmerso en Big Data, las Nuevas Tendencias, el Futbol y la Música.

John Alexander

Especialista en Business Intelligence con experiencia en herramientas como Pentaho, Microsoft y Microstrategy. Inmerso en Big Data, las Nuevas Tendencias, el Futbol y la Música.

¿Y tú que opinas?

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *