Tutorial su Apache Oozie: cos'è, flusso di lavoro, esempio - Hadoop
Cos'è OOZIE?
Apache Oozie è uno strumento di pianificazione del flusso di lavoro per Hadoop. È un sistema che gestisce il flusso di lavoro dei lavori dipendenti. Qui, gli utenti possono creare Grafici aciclici diretti di flussi di lavoro, che possono essere eseguiti in parallelo e in sequenza in Hadoop.
Si compone di due parti:
-
Motore del flusso di lavoro: la responsabilità di un motore del flusso di lavoro è archiviare ed eseguire flussi di lavoro composti da lavori Hadoop, ad esempio MapReduce, Pig, Hive.
- Motore del coordinatore: esegue lavori del flusso di lavoro in base a pianificazioni predefinite e disponibilità di dati.
Oozie è scalabile e può gestire l'esecuzione tempestiva di migliaia di flussi di lavoro (ciascuno composto da dozzine di lavori) in un cluster Hadoop.
Anche Oozie è molto flessibile. È possibile avviare, arrestare, sospendere e rieseguire facilmente i lavori. Oozie semplifica la riesecuzione dei flussi di lavoro non riusciti. Si può facilmente comprendere quanto possa essere difficile recuperare i lavori persi o falliti a causa di tempi di inattività o guasti. È anche possibile ignorare uno specifico nodo guasto.
Come funziona OOZIE?
Oozie viene eseguito come servizio nel cluster e i client inviano definizioni di flusso di lavoro per l'elaborazione immediata o successiva.
Il flusso di lavoro di Oozie è costituito da nodi di azione e di nodi del flusso di controllo.
An nodo di azione rappresenta un'attività del flusso di lavoro, ad esempio lo spostamento di file in HDFS, l'esecuzione di MapReduce, Pig o Alveare lavori, importando dati utilizzando Sqoop o eseguendo uno script di shell di un programma scritto in Java.
A nodo del flusso di controllo controlla l'esecuzione del flusso di lavoro tra le azioni consentendo costrutti come la logica condizionale in cui possono essere seguiti diversi rami a seconda del risultato del nodo di azione precedente.
Avvia nodo, Fine nodo e Nodo di errore rientrano in questa categoria di nodi.
Avvia nodo, designa l'inizio del lavoro del flusso di lavoro.
Fine nodo, segnala la fine del lavoro.
Nodo di errore indica il verificarsi di un errore e il corrispondente messaggio di errore da stampare.
Al termine dell'esecuzione di un flusso di lavoro, Oozie utilizza il callback HTTP per aggiornare il client con lo stato del flusso di lavoro. Anche l'ingresso o l'uscita da un nodo di azione può attivare la richiamata.
Esempio di diagramma del flusso di lavoro
Creazione del pacchetto e distribuzione di un'applicazione del flusso di lavoro Oozie
Un'applicazione del flusso di lavoro è costituita dalla definizione del flusso di lavoro e da tutte le risorse associate come file Jar MapReduce, script Pig ecc. Le applicazioni devono seguire una struttura di directory semplice e vengono distribuite in HDFS in modo che Oozie possa accedervi.
Di seguito è mostrata una struttura di directory di esempio:
<name of workflow>/</name> ??? lib/ ? ??? hadoop-examples.jar ??? workflow.xml
È necessario mantenere flusso di lavoro.xml (un file di definizione del flusso di lavoro) nella directory di livello superiore (directory principale con il nome del flusso di lavoro). La directory Lib contiene file Jar contenenti classi MapReduce. L'applicazione del flusso di lavoro conforme a questo layout può essere creata con qualsiasi strumento di creazione, ad esempio Ant o Maven.
Una build di questo tipo deve essere copiata su HDFS utilizzando un comando, ad esempio:
% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow
Passaggi per l'esecuzione di un lavoro del flusso di lavoro Oozie
In questa sezione vedremo come eseguire un lavoro del flusso di lavoro. Per eseguirlo, utilizzeremo lo strumento da riga di comando Oozie (un programma client che comunica con il server Oozie).
1. Esporta la variabile di ambiente OOZIE_URL che indica al comando oozie quale server Oozie utilizzare (qui ne utilizziamo uno in esecuzione localmente):
% export OOZIE_URL="http://localhost:11000/oozie"
2. Esegui il lavoro del flusso di lavoro utilizzando-
% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run
L'opzione -config si riferisce a un file locale Java delle proprietà contenente le definizioni per i parametri nel file XML del flusso di lavoro, nonché oozie.wf.application.path, che indica a Oozie la posizione dell'applicazione del flusso di lavoro in HDFS.
Contenuto di esempio del file delle proprietà:
nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>
3. Ottieni lo stato del lavoro del flusso di lavoro:
Lo stato del lavoro del flusso di lavoro può essere visualizzato utilizzando il sottocomando "lavoro" con l'opzione "-info" e specificando l'ID lavoro dopo "-info".
e.g., % oozie job -info <job id>
L'output mostra lo stato che è RUNNING, KILLED o SUCCEEDED.
4. I risultati dell'esecuzione corretta del flusso di lavoro possono essere visualizzati utilizzando il comando Hadoop come:
% hadoop fs -cat <location of result>
Perché usare Oozie?
Lo scopo principale dell'utilizzo di Oozie è gestire diversi tipi di lavori elaborati nel sistema Hadoop.
Le dipendenze tra i lavori sono specificate da un utente sotto forma di grafici aciclici diretti. Oozie utilizza queste informazioni e si occupa della loro esecuzione nell'ordine corretto specificato in un flusso di lavoro. In questo modo viene risparmiato il tempo dell'utente necessario per gestire il flusso di lavoro completo. Inoltre, Oozie prevede una disposizione per specificare la frequenza di esecuzione di un particolare lavoro.
Caratteristiche di Oozie
- Oozie dispone di API client e interfaccia a riga di comando che possono essere utilizzate per avviare, controllare e monitorare il lavoro Java applicazione.
- Utilizzando le sue API di servizi Web è possibile controllare i lavori da qualsiasi luogo.
- Oozie prevede la possibilità di eseguire lavori pianificati per l'esecuzione periodica.
- Oozie è predisposto per inviare notifiche via e-mail al completamento dei lavori.