Tutorial Apache Oozie: Diagramă de flux de lucru, Planificator
⚡ Rezumat inteligent
Apache Oozie este planificatorul de fluxuri de lucru pentru Hadoop care rulează joburi dependente ca grafuri aciclice direcționate, combinând un motor de flux de lucru pentru acțiunile MapReduce, Pig și Hive cu un motor de coordonare condus de timpul și disponibilitatea datelor.
Ce este Apache Oozie?
Apache Oozie este un planificator de fluxuri de lucru pentru HadoopEste un sistem care rulează fluxul de lucru al joburilor dependente. Aici, utilizatorilor li se permite să creeze grafuri aciclice direcționate ale fluxurilor de lucru, care pot fi rulate în paralel și secvențial în Hadoop.
Se compune din două părți:
- Motor de flux de lucru: Responsabilitatea unui motor de flux de lucru este de a stoca și rula fluxuri de lucru compuse din joburi Hadoop, de exemplu, MapReduce, Porc, Stup.
- Motor de coordonare: Rulează sarcini de flux de lucru pe baza unor programări predefinite și a disponibilității datelor.
Oozie este scalabil și poate gestiona execuția la timp a mii de fluxuri de lucru (fiecare constând din zeci de joburi) într-un cluster Hadoop. Diagrama de mai jos arată unde se află planificatorul în raport cu clusterul și joburile pe care le gestionează.
Oozie este, de asemenea, foarte flexibil. Se pot porni, opri, suspenda și relua cu ușurință joburi. Oozie facilitează foarte mult reluarea fluxurilor de lucru eșuate. Se poate înțelege cu ușurință cât de dificil poate fi să recuperezi joburile ratate sau eșuate din cauza timpilor de nefuncționare sau a defecțiunilor. Este chiar posibil să sari peste un anumit nod eșuat.
Starea proiectului: Apache Oozie a fost retras de Apache Software Foundation în februarie 2025 și mutarea în Mansarda Apache finalizat în aprilie 2025. Versiunea finală rămâne 5.2.1 din februarie 2021, iar depozitul sursă este acum doar pentru citire. Clusterele existente îl rulează în continuare, motiv pentru care merită să cunoaștem mecanismele de mai jos, dar noile conducte sunt în mod normal construite pe Apache Airflow.
Cum funcționează Oozie?
Oozie rulează ca serviciu în cluster, iar clienții trimit definiții de flux de lucru pentru procesare imediată sau ulterioară.
Un flux de lucru Oozie constă din noduri de acțiune și noduri de control al fluxului.
Un nod de acțiune reprezintă o sarcină a fluxului de lucru, de exemplu, mutarea fișierelor în HDFS, rularea unui job MapReduce, Pig sau Hive, importul de date folosind Sqoopsau rularea unui script shell sau a unui program scris în Java.
Un nod de control al fluxului de lucru controlează execuția fluxului de lucru între acțiuni permițând construcții precum logica condiționată, în care pot fi urmate diferite ramificații în funcție de rezultatul unui nod de acțiune anterior.
Nodul de început, Nodul de sfârșit și Nodul de eroare se încadrează în această categorie de noduri.
- Start Node desemnează începutul lucrării fluxului de lucru.
- Nodul final semnalează sfârșitul lucrării.
- Nod de eroare desemnează apariția unei erori și mesajul de eroare corespunzător care va fi imprimat.
La sfârșitul execuției unui flux de lucru, Oozie folosește un apel invers HTTP pentru a actualiza clientul cu starea fluxului de lucru. Intrarea sau ieșirea dintr-un nod de acțiune poate, de asemenea, declanșa apelul invers.
Noduri de control Oozie și tipuri de acțiuni
Dincolo de început, sfârșit și eroare, XML-ul fluxului de lucru acceptă un vocabular mic de noduri de control care modelează graficul.
- decizie: Evaluează o expresie și trimite fluxul de lucru în josul uneia dintre mai multe ramuri, echivalentul unei instrucțiuni switch.
- furculiţă: Împarte calea astfel încât două sau mai multe acțiuni să se desfășoare în paralel.
- a te alatura: Așteaptă finalizarea fiecărei ramificații a unei furci corespunzătoare înainte de a continua.
- ucide: Termină imediat fluxul de lucru și înregistrează mesajul de eroare.
Nodurile de acțiune acoperă lucrarea în sine și fiecare are propriul element XML:
- hartă-reducere, porc, stup și sqoop acțiunile lansează jobul Hadoop corespunzător.
- Java rulează o clasă principală pe cluster; coajă și ssh rulează scripturi.
- fs efectuează menajera HDFSping cum ar fi mutare, ștergere, mkdir și chmod.
- e-mail notifică destinatarii și subflux de lucru apelează o altă aplicație de flux de lucru.
Exemplu de diagramă a fluxului de lucru
Diagrama de mai jos traccreează un mic flux de lucru de la nodul său de pornire, printr-o acțiune MapReduce, fie către nodul final, fie către calea de eroare atunci când acțiunea eșuează.
Tipuri de locuri de muncă Oozie
Oozie descrie munca pe trei niveluri. Fiecare strat îl încadrează pe cel de sub el, astfel încât un pachet controlează în cele din urmă multe fluxuri de lucru individuale.
| Tipul postului | Ceea ce definește | Declanșat de |
|---|---|---|
| Workflow | Un graf aciclic direcționat al nodurilor de acțiune și control, scris în workflow.xml | Trimitere manuală sau un coordonator |
| Coordonator | Un program recurent pentru un flux de lucru, cu o oră de început, o oră de sfârșit și o frecvență | Ora ceasului și disponibilitatea datelor de intrare |
| Pachet | O colecție de aplicații de coordonare gestionate împreună ca o singură conductă de date | O oră de începere aplicată tuturor coordonatorilor săi |
Distincția contează în practică: un flux de lucru răspunde la „ce se execută”, un coordonator răspunde la „când se execută”, iar un pachet răspunde la „ce începe și ce se termină împreună”.
Împachetarea și implementarea unei aplicații de flux de lucru Oozie
O aplicație de flux de lucru constă în definiția fluxului de lucru și toate resursele asociate, cum ar fi fișierele Jar MapReduce, scripturile Pig etc. Aplicațiile trebuie să urmeze o structură simplă de directoare și sunt implementate în HDFS, astfel încât Oozie să le poată accesa.
Un exemplu de structură de directoare este prezentat mai jos:
<name of workflow>/
├── lib/
│ └── hadoop-examples.jar
└── workflow.xml
Este necesar să păstrați fișierul workflow.xml (un fișier de definiție a fluxului de lucru) în directorul de nivel superior (directorul părinte care conține numele fluxului de lucru). Directorul lib conține fișiere Jar care conțin clase MapReduce. O aplicație de flux de lucru conformă cu acest layout poate fi construită cu orice instrument de construire, de exemplu, Ant sau Maven.
O astfel de compilare trebuie copiată în HDFS folosind o comandă, de exemplu:
% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow
Pași pentru rularea unui job de flux de lucru Oozie
În această secțiune, vom vedea cum să rulăm o lucrare de flux de lucru. Pentru a rula acest lucru, vom folosi instrumentul de linie de comandă Oozie (un program client care comunică cu serverul Oozie).
1. Exportați OOZIE_URL variabilă de mediu, care îi spune comenzii oozie ce server Oozie să utilizeze (aici folosim unul care rulează local):
% export OOZIE_URL="http://localhost:11000/oozie"
2. Executați jobul fluxului de lucru folosind:
% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run
Opțiunea -config se referă la un local Java fișierul de proprietăți care conține definiții pentru parametrii din fișierul XML de flux de lucru, precum și oozie.wf.application.path, care îi spune lui Oozie locația aplicației de flux de lucru în HDFS.
Exemplu de conținut al fișierului de proprietăți:
nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>
3. Obțineți starea jobului de flux de lucru.
Starea unui job de flux de lucru poate fi vizualizată folosind subcomanda „job” cu opțiunea „-info”, specificând ID-ul jobului după „-info”.
e.g., % oozie job -info <job id>
Ieșirea afișează o stare care poate fi RUNNING, KILLED sau SUCCEEDED.
4. Rezultatele executării cu succes a unui flux de lucru pot fi văzute folosind o comandă Hadoop, cum ar fi:
% hadoop fs -cat <location of result>
De ce să folosești Oozie?
Scopul principal al utilizării Oozie este de a gestiona diferite tipuri de joburi procesate într-un sistem Hadoop.
Dependențele dintre joburi sunt specificate de utilizator sub forma unor grafuri aciclice direcționate. Oozie consumă aceste informații și se ocupă de execuția lor în ordinea corectă, așa cum este specificată într-un flux de lucru. În acest fel, utilizatorul economisește timpul necesar pentru gestionarea unui flux de lucru complet. În plus, Oozie are o opțiune pentru a specifica frecvența de execuție a unui anumit job.
Caracteristicile lui Oozie
- Oozie are o API client și o interfață de linie de comandă care pot fi utilizate pentru a lansa, controla și monitoriza joburi dintr-un Java aplicație.
- Folosind API-urile sale pentru servicii web, se pot controla lucrările de oriunde.
- Oozie are o prevedere pentru a executa joburi programate să se execute periodic.
- Oozie are o opțiune de a trimite notificări prin e-mail la finalizarea lucrărilor.
Oozie vs. Apache Airflow
Deoarece Oozie este retras, majoritatea echipelor care evaluează un planificator astăzi compară ceea ce rulează deja cu Apache Airflow. Cele două instrumente rezolvă aceeași problemă din direcții opuse.
| Aspect | Apache Oozie | Flux de aer Apache |
|---|---|---|
| Limbaj de definiție | Fluxuri de lucru scrise ca XML | DAG-uri scrise ca Python cod |
| domeniu | Construit în jurul acțiunilor Hadoop precum MapReduce, Pig, Hive și Sqoop | Scop general, cu operatori pentru servicii cloud, baze de date și containere |
| Programare | Posturi de coordonator determinate de disponibilitatea timpului și a datelor | Intervale de programare plus senzori care așteaptă condițiile externe |
| Starea proiectului | Retras în podul Apache în 2025; versiunea finală 5.2.1 | Proiect Apache de nivel superior dezvoltat activ |
Oozie rămâne opțiunea mai simplă pe un cluster care îl rulează deja, deoarece acțiunile se mapează unu-la-unu pe componentele Hadoop. Airflow este alegerea practică pentru orice lucru nou, în special acolo unde o conductă se extinde dincolo de Hadoop.


