Introducció a Apache Oozie

Apache Oozie és un sistema de coordinació de fluxos de treball per a la gestió de treballs Hadoop. Permet als usuaris definir i executar fluxos de treball que poden incloure diverses tasques com MapReduce, Pig, Hive, Sqoop, i altres. Oozie facilita la programació i la gestió de treballs complexos, assegurant que les tasques es compleixin en l'ordre correcte i gestionant les dependències entre elles.

Característiques clau d'Apache Oozie

  • Coordinació de fluxos de treball: Permet definir fluxos de treball que inclouen diverses tasques.
  • Programació de treballs: Suporta la programació de treballs basats en temps i en dades.
  • Gestió de dependències: Gestiona les dependències entre tasques, assegurant que es compleixin en l'ordre correcte.
  • Integració amb l'ecosistema Hadoop: Suporta diverses eines de l'ecosistema Hadoop com MapReduce, Pig, Hive, Sqoop, etc.

Components d'Apache Oozie

  1. Workflow

Un workflow és una definició de tasques que s'executen en un ordre específic. Es defineix en un fitxer XML i pot incloure tasques com MapReduce, Pig, Hive, Java, i altres.

  1. Coordinator

Un coordinator és una extensió del workflow que permet programar l'execució de treballs basats en temps o en dades. Això és útil per a treballs que necessiten executar-se periòdicament o quan es compleixen certes condicions de dades.

  1. Bundle

Un bundle és una col·lecció de coordinators que es poden gestionar com una unitat. Això permet gestionar treballs complexos que inclouen múltiples coordinators.

Exemple pràctic: Definició d'un Workflow

A continuació, es mostra un exemple de definició d'un workflow en Oozie que inclou una tasca MapReduce i una tasca Pig.

Fitxer XML del Workflow

<workflow-app name="example-wf" xmlns="uri:oozie:workflow:0.5">
    <start to="map-reduce-node"/>
    
    <action name="map-reduce-node">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.apache.hadoop.examples.WordCount$TokenizerMapper</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.apache.hadoop.examples.WordCount$IntSumReducer</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to="pig-node"/>
        <error to="fail"/>
    </action>
    
    <action name="pig-node">
        <pig>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>example.pig</script>
        </pig>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    
    <kill name="fail">
        <message>Workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    
    <end name="end"/>
</workflow-app>

Explicació del Workflow

  • : Defineix el punt d'inici del workflow, que és la tasca MapReduce.
  • : Defineix una tasca MapReduce.
    • : Conté la configuració de la tasca MapReduce.
    • : Si la tasca MapReduce es completa amb èxit, el workflow continua amb la tasca Pig.
    • : Si la tasca MapReduce falla, el workflow es dirigeix al node de fallada.
  • : Defineix una tasca Pig.
    • : Conté la configuració de la tasca Pig.
    • : Si la tasca Pig es completa amb èxit, el workflow finalitza.
    • : Si la tasca Pig falla, el workflow es dirigeix al node de fallada.
  • : Defineix el node de fallada que s'executa si alguna tasca falla.
  • : Defineix el punt final del workflow.

Exercici pràctic

Objectiu

Crear un workflow en Oozie que inclogui una tasca MapReduce i una tasca Hive.

Passos

  1. Definir el workflow en un fitxer XML.
  2. Configurar les tasques MapReduce i Hive.
  3. Executar el workflow en Oozie.

Solució

Fitxer XML del Workflow

<workflow-app name="example-wf" xmlns="uri:oozie:workflow:0.5">
    <start to="map-reduce-node"/>
    
    <action name="map-reduce-node">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.apache.hadoop.examples.WordCount$TokenizerMapper</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.apache.hadoop.examples.WordCount$IntSumReducer</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to="hive-node"/>
        <error to="fail"/>
    </action>
    
    <action name="hive-node">
        <hive xmlns="uri:oozie:hive-action:0.5">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>example.hql</script>
        </hive>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    
    <kill name="fail">
        <message>Workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    
    <end name="end"/>
</workflow-app>

Explicació del Workflow

  • : Defineix el punt d'inici del workflow, que és la tasca MapReduce.
  • : Defineix una tasca MapReduce.
    • : Conté la configuració de la tasca MapReduce.
    • : Si la tasca MapReduce es completa amb èxit, el workflow continua amb la tasca Hive.
    • : Si la tasca MapReduce falla, el workflow es dirigeix al node de fallada.
  • : Defineix una tasca Hive.
    • : Conté la configuració de la tasca Hive.
    • : Si la tasca Hive es completa amb èxit, el workflow finalitza.
    • : Si la tasca Hive falla, el workflow es dirigeix al node de fallada.
  • : Defineix el node de fallada que s'executa si alguna tasca falla.
  • : Defineix el punt final del workflow.

Conclusió

Apache Oozie és una eina poderosa per a la coordinació de fluxos de treball en l'ecosistema Hadoop. Permet gestionar treballs complexos amb múltiples tasques i dependències, facilitant la programació i l'execució de treballs de manera eficient. Amb la seva integració amb diverses eines de l'ecosistema Hadoop, Oozie és una eina essencial per a qualsevol desenvolupador o administrador que treballi amb Hadoop.

© Copyright 2024. Tots els drets reservats