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


