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.

  • 🔘 Două motoare: Un motor de flux de lucru rulează grafice de joburi Hadoop; un motor de coordonare le declanșează la timp sau la sosirea datelor.
  • ☑️ Tipuri de noduri: Nodurile de acțiune efectuează muncă; nodurile de control, cum ar fi nodurile de decizie, bifurcație și joncțiune, direcționează calea.
  • Trei tipuri de locuri de muncă: Fluxul de lucru, coordonatorul și joburile din pachet se acumulează într-un flux complet de date.
  • 🧪 Implementare: O aplicație de flux de lucru este un director care conține fișierul workflow.xml și un folder lib, copiate în HDFS.
  • 🛠️ Linie de comanda: Setați OOZIE_URL, trimite cu oozie job -run, apoi interoghează oozie job -info până când raportează SUCCEEDED.
  • ⚠️ Starea proiectului: Oozie a fost retrasă în podul Apache în 2025, așa că noile conducte folosesc de obicei Apache Airflow.

Tutorial Apache Oozie care acoperă fluxul de lucru, joburile de coordonator și programarea Hadoop

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ă.

Planificatorul de fluxuri de lucru Apache Oozie care rulează joburi Hadoop dependente ca un graf aciclic direcționat

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ă.

Exemplu de diagramă a fluxului de lucru Oozie care prezintă nodul de început, nodul de acțiune, gestionarea erorilor și nodul de sfârșit

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.

Întrebări frecvente

Nu. Software-ul Apache Foundation a retras Oozie în februarie 2025 și a finalizat mutarea la Attic în aprilie 2025. Versiunea finală este 5.2.1 din februarie 2021, iar depozitul este doar pentru citire, deși documentația rămâne online.

Asistenții inteligenți artificiali transformă o pipeline descrisă într-o configurație de planificare, explică de ce un grafic de joburi s-a blocat și rezumă jurnalele clusterului într-o cauză principală probabilă. Util pentru prima schiță și pentru triaj, nu pentru aprobarea unui program de producție.

Copilot scrie rapid fișiere workflow.xml plauzibile, dar adesea inventează nume de elemente sau o versiune greșită a schemei. Validați XML-ul generat în raport cu schema 5.2.1 și rulați-l mai întâi pe un cluster de testare.

Un coordonator combină o frecvență, o oră de început și o oră de sfârșit cu definițiile setului de date. Se declanșează numai atunci când ceasul ajunge la următorul interval și fiecare set de date de intrare declarat există în HDFS, astfel încât datele întârziate întârzie rularea.

Trimiteți din nou jobul cu acțiunea de reexecutare și ID-ul jobului original, denumind nodurile care trebuie omise sau repetate. Oozie reutilizează acțiunile finalizate, astfel încât doar partea rămasă a graficului să ruleze.

PREP înseamnă că jobul a fost acceptat, dar nu a fost pornit, de obicei pentru că calea aplicației în HDFS este greșită sau timpul de materializare nu a sosit încă. SUSPENDED înseamnă că cineva l-a întrerupt sau o acțiune a eșuat și fluxul de lucru a fost reținut.

Serverul rulează cu propriul principal și keytab, iar clienții se autentifică prin SPNEGO prin HTTP. Fluxurile de lucru poartă token-uri de delegare, astfel încât fiecare acțiune ajunge la HDFS și YARN ca utilizator care a trimis datele, nu ca server.

Cron execută o comandă și o uită. Un planificator tracks dependențele dintre joburi, așteaptă ca datele de intrare să ajungă, înregistrează starea fiecărei acțiuni și vă permite să rulați din nou doar partea care a eșuat.

Rezumați această postare cu: