Apache Oozie-zelfstudie: workflowdiagram, scheduler

⚡ Slimme samenvatting

Apache Oozie is de workflowplanner voor Hadoop die afhankelijke taken uitvoert als gerichte acyclische grafieken. Het combineert een workflow-engine voor MapReduce-, Pig- en Hive-acties met een coördinatie-engine die wordt aangestuurd door tijd en beschikbaarheid van gegevens.

  • 🔘 Twee motoren: Een workflow-engine voert Hadoop-taakgrafieken uit; een coördinator-engine activeert deze volgens een schema of wanneer er gegevens binnenkomen.
  • ☑️ Knooppunttypen: Actieknooppunten voeren werk uit; besturingsknooppunten zoals beslissings-, splitsings- en verbindingsknooppunten sturen het pad.
  • ✅ Drie soorten banen: Workflow-, coördinatie- en bundeltaken vormen samen een complete datapipeline.
  • 🧪 implementatie: Een workflow-applicatie is een map met daarin het bestand workflow.xml en een map genaamd lib, die naar HDFS zijn gekopieerd.
  • ️ Commandoregel: Stel OOZIE_ inURLDien de taak in met `oozie job -run` en controleer vervolgens `oozie job -info` totdat het `SUCCEEDED` meldt.
  • ⚠️ Projectstatus: Oozie is in 2025 naar de Apache Attic verplaatst, dus nieuwe pipelines maken meestal gebruik van Apache Airflow.

Apache Oozie-zelfstudie over workflows, coördinatortaken en Hadoop-planning

Wat is Apache Oozie?

Apache Oozie is een workflowplanner voor HadoopHet is een systeem dat de workflow van afhankelijke taken uitvoert. Gebruikers kunnen hier gerichte acyclische grafieken van workflows maken, die parallel en sequentieel in Hadoop kunnen worden uitgevoerd.

Het bestaat uit twee delen:

  • Workflow-engine: De taak van een workflow-engine is het opslaan en uitvoeren van workflows die bestaan ​​uit Hadoop-taken, bijvoorbeeld: KaartVerminderen, Varken, Bijenkorf.
  • Coördinator-engine: Het voert workflowtaken uit op basis van vooraf gedefinieerde schema's en de beschikbaarheid van gegevens.

Oozie is schaalbaar en kan de tijdige uitvoering van duizenden workflows (elk bestaande uit tientallen taken) in een Hadoop-cluster beheren. Het onderstaande diagram laat zien waar de scheduler zich bevindt ten opzichte van het cluster en de taken die deze aanstuurt.

Apache Oozie workflow scheduler voert afhankelijke Hadoop-taken uit als een gerichte acyclische graaf.

Oozie is bovendien erg flexibel. Je kunt taken eenvoudig starten, stoppen, pauzeren en opnieuw uitvoeren. Oozie maakt het heel gemakkelijk om mislukte workflows opnieuw uit te voeren. Je kunt je gemakkelijk voorstellen hoe moeilijk het kan zijn om gemiste of mislukte taken in te halen als gevolg van downtime of een storing. Het is zelfs mogelijk om een ​​specifiek defect knooppunt over te slaan.

Projectstatus: Apache Oozie is door Apache Software uitgefaseerd. Foundation in februari 2025 en de verhuizing naar de Apache-zolder voltooid in april 2025. De laatste release blijft 5.2.1 van februari 2021, en de broncode-repository is nu alleen-lezen. Bestaande clusters draaien deze versie nog steeds, vandaar dat de onderstaande details nuttig zijn, maar nieuwe pipelines worden normaal gesproken gebouwd op Apache Airflow.

Hoe werkt Oozie?

Oozie draait als een service in het cluster en clients dienen workflowdefinities in voor onmiddellijke of latere verwerking.

Een Oozie-workflow bestaat uit actieknooppunten en controlestroomknooppunten.

Een actieknooppunt vertegenwoordigt een workflowtaak, bijvoorbeeld het verplaatsen van bestanden naar een bepaalde map. HDFS, het uitvoeren van een MapReduce-, Pig- of Hive-taak, het importeren van gegevens met behulp van Duik, of het uitvoeren van een shellscript of een programma geschreven in Java.

Een controlestroomknooppunt regelt de uitvoering van de workflow tussen acties door constructies zoals voorwaardelijke logica toe te staan, waarbij verschillende vertakkingen kunnen worden gevolgd afhankelijk van het resultaat van een eerder actieknooppunt.

Startknooppunt, eindknooppunt en foutknooppunt vallen onder deze categorie knooppunten.

  • Start Knooppunt geeft het begin van de werkstroomtaak aan.
  • Eindknooppunt geeft het einde van de taak aan.
  • Fout knooppunt Geeft aan wanneer er een fout is opgetreden en welk foutbericht er vervolgens moet worden afgedrukt.

Aan het einde van de uitvoering van een workflow gebruikt Oozie een HTTP-callback om de client op de hoogte te brengen van de workflowstatus. Het betreden of verlaten van een actieknooppunt kan de callback ook activeren.

Oozie-besturingsknooppunten en actietypen

Naast start, einde en fout ondersteunt de workflow-XML een beperkt aantal besturingsknooppunten die de grafiek vormgeven.

  • besluit: Evalueert een expressie en stuurt de workflow door naar een van de verschillende vertakkingen, vergelijkbaar met een switch-statement.
  • vork: Splitst het pad zodat twee of meer acties parallel worden uitgevoerd.
  • meedoen: Wacht tot elke tak van een bijpassende vork klaar is voordat hij verdergaat.
  • doden: Beëindigt de workflow onmiddellijk en registreert het foutbericht.

Actieknooppunten hebben betrekking op het werk zelf, en elk heeft zijn eigen XML-element:

  • map-reduce, pig, hive en sqoop De acties starten de bijbehorende Hadoop-taak.
  • Java voert een hoofdklasse uit op het cluster; schelp en ssh Scripts uitvoeren.
  • fs voert HDFS-huishoudster uitping zoals verplaatsen, verwijderen, mappen aanmaken en rechten wijzigen.
  • email stelt de ontvangers op de hoogte, en sub-workflow roept een andere workflow-applicatie aan.

Voorbeeld van een workflowdiagram

Het onderstaande diagram tracHet is een kleine workflow die begint bij het startknooppunt, via een MapReduce-actie, en eindigt bij het eindknooppunt of het foutpad wanneer de actie mislukt.

Voorbeeld van een Oozie-workflowdiagram met startknooppunt, actieknooppunt, foutafhandeling en eindknooppunt.

Soorten banen bij Oozie

Oozie beschrijft werk op drie niveaus. Elke laag omvat de laag eronder, waardoor een bundel uiteindelijk veel individuele workflows aanstuurt.

Soort baan Wat het definieert Veroorzaakt door
Workflow Een gerichte acyclische graaf van actie- en controleknooppunten, geschreven in workflow.xml. Handmatige indiening, of via een coördinator
Coördinator Een terugkerend schema voor één workflow, met een starttijd, eindtijd en frequentie. Beschikbaarheid van kloktijd en invoergegevens
Formentera Bundel Een verzameling coördinatorapplicaties die samen als één datapipeline worden beheerd. Er gold een aftraptijd voor alle coördinatoren.

Het onderscheid is in de praktijk belangrijk: een workflow beantwoordt de vraag "wat er wordt uitgevoerd", een coördinator beantwoordt de vraag "wanneer het wordt uitgevoerd", en een bundel beantwoordt de vraag "wat er samen start en stopt".

Het verpakken en implementeren van een Oozie-workflowtoepassing

Een workflowapplicatie bestaat uit de workflowdefinitie en alle bijbehorende resources, zoals MapReduce JAR-bestanden, Pig-scripts, enzovoort. Applicaties moeten een eenvoudige directorystructuur volgen en worden geïmplementeerd op HDFS, zodat Oozie er toegang toe heeft.

Hieronder ziet u een voorbeeld van een mappenstructuur:

<name of workflow>/
├── lib/
│   └── hadoop-examples.jar
└── workflow.xml

Het is noodzakelijk om het bestand workflow.xml (een workflowdefinitiebestand) in de hoofdmap te bewaren (de map die de naam van de workflow draagt). De map lib bevat JAR-bestanden met MapReduce-klassen. Een workflowapplicatie die aan deze structuur voldoet, kan met elke buildtool worden gebouwd, bijvoorbeeld Ant of Maven.

Een dergelijke build moet naar HDFS worden gekopieerd met behulp van een commando, bijvoorbeeld:

% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow

Stappen voor het uitvoeren van een Oozie-workflowtaak

In dit gedeelte zullen we zien hoe u een workflowtaak uitvoert. Om dit uit te voeren, zullen we het Oozie-opdrachtregelprogramma gebruiken (een clientprogramma dat communiceert met de Oozie-server).

1. Exporteer de OOZIE_URL Een omgevingsvariabele die het oozie-commando vertelt welke Oozie-server te gebruiken (in dit geval gebruiken we een server die lokaal draait):

% export OOZIE_URL="http://localhost:11000/oozie"

2. Voer de workflowtaak uit met:

% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run

De optie -config verwijst naar een lokaal Java Properties-bestand met definities voor de parameters in het workflow-XML-bestand, evenals oozie.wf.application.path, dat Oozie de locatie van de workflow-applicatie in HDFS vertelt.

Voorbeeldinhoud van het eigenschappenbestand:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>

3. De status van de workflowtaak opvragen.

De status van een workflowtaak kan worden bekeken met behulp van het subcommando 'job' met de optie '-info', waarbij de taak-ID na '-info' wordt opgegeven.

e.g., % oozie job -info <job id>

De uitvoer toont een status die één van de volgende waarden kan zijn: RUNNING, KILLED of SUCCEEDED.

4. De resultaten van een succesvolle workflow-uitvoering kunnen worden bekeken met een Hadoop-opdracht zoals:

% hadoop fs -cat <location of result>

Waarom Oozie gebruiken?

Het voornaamste doel van het gebruik van Oozie is het beheren van verschillende soorten taken die in een Hadoop-systeem worden verwerkt.

Afhankelijkheden tussen taken worden door een gebruiker gespecificeerd in de vorm van gerichte acyclische grafieken. Oozie gebruikt deze informatie en zorgt voor de uitvoering ervan in de juiste volgorde, zoals gespecificeerd in een workflow. Op die manier bespaart de gebruiker tijd bij het beheren van een complete workflow. Daarnaast biedt Oozie de mogelijkheid om de uitvoeringsfrequentie van een specifieke taak te specificeren.

Kenmerken van Oozie

  • Oozie beschikt over een client-API en een commandoregelinterface waarmee taken kunnen worden gestart, beheerd en gemonitord. Java toepassing.
  • Met behulp van de webservice-API's kan men taken overal vandaan beheren.
  • Oozie biedt de mogelijkheid om taken uit te voeren die periodiek moeten worden uitgevoerd.
  • Oozie biedt de mogelijkheid om e-mailmeldingen te versturen wanneer taken zijn afgerond.

Oozie versus Apache Airflow

Omdat Oozie niet meer wordt gebruikt, vergelijken de meeste teams die tegenwoordig een scheduler evalueren, hun huidige implementatie met Apache Airflow. Beide tools lossen hetzelfde probleem op vanuit tegengestelde invalshoeken.

Aspect Apache Oozie Apache-luchtstroom
Definitietaal Werkstromen geschreven als XML DAG's geschreven als Python code
strekking Gebouwd rondom Hadoop-acties zoals MapReduce, Pig, Hive en Sqoop. Algemeen gebruik, met operators voor cloudservices, databases en containers.
Scheduling Coördinatorfuncties worden bepaald door tijd en beschikbaarheid van gegevens. Geplande intervallen plus sensoren die wachten op externe omstandigheden.
Project status In 2025 naar de Apache-zolder verplaatst; laatste release 5.2.1 Actief ontwikkeld Apache-topniveauproject

Oozie blijft de eenvoudigere optie op een cluster waar het al draait, omdat de acties één-op-één overeenkomen met Hadoop-componenten. Airflow is de praktische keuze voor alles wat nieuw is, met name wanneer een pipeline verder reikt dan Hadoop.

Veelgestelde vragen

Nee. De Apache-software Foundation Oozie is in februari 2025 met pensioen gegaan en de verhuizing naar Attic is in april 2025 voltooid. De laatste release is 5.2.1 uit februari 2021 en de repository is alleen-lezen, hoewel de documentatie online beschikbaar blijft.

AI-assistenten zetten een beschreven pipeline om in een schedulerconfiguratie, leggen uit waarom een ​​jobgrafiek vastliep en vatten clusterlogs samen tot een waarschijnlijke oorzaak. Nuttig voor een eerste concept en voor het oplossen van problemen, niet voor het goedkeuren van een productieplanning.

Copilot genereert snel een plausibel workflow.xml-bestand, maar verzint vaak elementnamen of gebruikt de verkeerde schemaversie. Valideer de gegenereerde XML aan de hand van het 5.2.1-schema en voer eerst een test uit op een testcluster.

Een coördinator combineert een frequentie, starttijd en eindtijd met datasetdefinities. Hij wordt alleen geactiveerd wanneer de klok het volgende interval bereikt en elke opgegeven invoerdataset aanwezig is in HDFS; te late gegevens vertragen de uitvoering.

Dien de taak opnieuw in met de actie 'opnieuw uitvoeren' en de oorspronkelijke taak-ID, en geef aan welke knooppunten moeten worden overgeslagen of herhaald. Oozie hergebruikt de voltooide acties, zodat alleen het resterende deel van de grafiek wordt uitgevoerd.

PREP betekent dat de taak is geaccepteerd maar nog niet is gestart, meestal omdat het applicatiepad in HDFS onjuist is of de materialisatietijd nog niet is bereikt. SUSPENDED betekent dat iemand de taak heeft gepauzeerd, of dat een actie is mislukt en de workflow is vastgelopen.

De server draait met een eigen principal en keytab, en clients authenticeren zich via SPNEGO over HTTP. Workflows bevatten delegatietokens, zodat elke actie HDFS en YARN bereikt als de gebruiker die de actie indient, en niet als de server.

Cron voert een commando uit en vergeet het vervolgens. Een scheduler tracHet systeem beheert afhankelijkheden tussen taken, wacht tot de invoergegevens zijn binnengekomen, registreert de status van elke actie en stelt u in staat alleen het onderdeel dat is mislukt opnieuw uit te voeren.

Vat dit bericht samen met: