Oozie-zelfstudie: leer hoe u uw Hadoop-taken kunt plannen



Apache Oozie-zelfstudie: Oozie is een workflowplannersysteem om Hadoop-taken te beheren. Het is een schaalbaar, betrouwbaar en uitbreidbaar systeem.

Voordat we met deze Apache Oozie-zelfstudie beginnen, moeten we eerst begrijpen waar het plannersysteem wordt gebruikt. In realtime scenario's is een taak afhankelijk van andere taken, zoals de uitvoer van een MapReduce-taak kan worden doorgegeven aan de Hive-taak voor verdere verwerking. Het volgende scenario kan zijn, het plannen van een set taken op basis van tijd, zoals dagelijks, wekelijks, maandelijks of op basis van beschikbaarheid van gegevens. Apache Oozie biedt u de mogelijkheid om dit soort scenario's gemakkelijk af te handelen. Dit is de reden waarom Apache Oozie een belangrijk onderdeel is van .

In deze Apache Oozie-tutorialblog behandelen we:





  • Apache Oozie Introductie
  • Oozie-werkstroom
  • Oozie-coördinator
  • Oozie-bundel
  • Word Count Workflow-taak
  • Op tijd gebaseerde taak voor het tellen van woorden

We beginnen deze Oozie-zelfstudie door Apache Oozie te introduceren. Als we verder gaan, zullen we de soorten taken begrijpen die kunnen worden gemaakt en uitgevoerd met Apache Oozie.

Apache Oozie-zelfstudie: inleiding tot Apache Oozie

Apache Oozie - Oozie-zelfstudie - EdurekaApache Oozie is een planningssysteem om Hadoop-taken in een gedistribueerde omgeving te beheren en uit te voeren. We kunnen een gewenste pijplijn creëren door verschillende soorten taken te combineren. Het kan uw Hive-, Pig-, Sqoop- of MapReduce-taak zijn. Met Apache Oozie kunt u ook uw taken plannen. Binnen een volgorde van de taak kunnen ook twee of meer taken worden geprogrammeerd om parallel aan elkaar te worden uitgevoerd. Het is een schaalbaar, betrouwbaar en uitbreidbaar systeem.



Oozie is een open source Java-webapplicatie, die verantwoordelijk is voor het triggeren van de workflow-acties. Het gebruikt op zijn beurt de Hadoop-uitvoeringsengine om de taken uit te voeren.

Apache Oozie detecteert de voltooiing van taken door middel van callback en polling. Wanneer Oozie een taak start, biedt het een unieke callback-HTTP-URL voor de taak en meldt het die URL wanneer de taak is voltooid. Als de taak de call-back-URL niet aanroept, kan Oozie de taak pollen voor voltooiing.

Er zijn drie soorten taken in Apache Oozie:



  • Oozie Workflow-taken & minus Dit zijn Directed Acyclic Graphs (DAG's) die een reeks acties specificeren die moeten worden uitgevoerd.
  • Oozie Coordinator Jobs & minus Deze bestaan ​​uit workflowtaken die worden geactiveerd door de beschikbaarheid van tijd en gegevens.
  • Oozie-bundels & minus Deze kunnen worden aangeduid als een pakket van meerdere coördinatoren en workflowtaken.

Laten we nu al deze taken een voor een bekijken.

Apache Oozie-zelfstudie: Oozie-workflow

Workflow is een reeks acties die zijn gerangschikt in een Direct Acyclic Graph (DAG). De acties zijn van elkaar afhankelijk, aangezien de volgende actie pas kan worden uitgevoerd na de uitvoer van de huidige actie. Een workflowactie kan een Pig-actie, Hive-actie, MapReduce-actie, Shell-actie, Java-actie etc. zijn. Er kunnen beslissingsbomen zijn om te bepalen hoe en onder welke voorwaarde een taak moet worden uitgevoerd.

We kunnen verschillende soorten acties maken op basis van de taak en elk type actie kan zijn eigen type tags hebben.De workflow en de scripts of jars moeten in het HDFS-pad worden geplaatst voordat de workflow wordt uitgevoerd.

Opdracht: oozie job –oozie http: // localhost: 11000 / oozie -config job.properties -run

Om de status van de taak te controleren, gaat u naar de Oozie-webconsole, d.w.z. http: // hostnaam: 11000 . Door op de vacature te klikken ziet u de status van de vacature.

In scenario's waarin we meerdere taken parallel willen uitvoeren, kunnen we gebruiken Vork . Elke keer dat we fork gebruiken, moeten we Join gebruiken als een end node to fork. Voor elke vork moet er een verbinding zijn. Join gaat ervan uit dat alle knooppunten die parallel worden uitgevoerd, een kind zijn van een enkele vork. We kunnen bijvoorbeeld parallel twee tabellen tegelijkertijd maken.

Als we een actie willen uitvoeren op basis van de output van een beslissing, kunnen we beslissingstags toevoegen. Als we de bijenkorftabel bijvoorbeeld al hebben, hoeven we deze niet opnieuw te maken. In die situatie kunnen we een beslissingstag toevoegen om de stappen voor het maken van een tabel niet uit te voeren als de tabel al bestaat. Beslissingsknooppunten hebben een switch-tag die lijkt op switchcase.

De waarde van job-tracker, name-node, script en param kan direct worden doorgegeven. Maar dit wordt moeilijk te beheren. Dit is waar een configuratiebestand (d.w.z. .property-bestand) handig is.

Apache Oozie-zelfstudie: Oozie-coördinator

U kunt complexe workflows plannen, evenals workflows die regelmatig worden gepland met behulp van Coordinator. Oozie-coördinatoren triggeren de workflowtaken op basis van tijd, gegevens of gebeurtenispredikaten. De workflows binnen de taakcoördinator starten wanneer aan de gegeven voorwaarde is voldaan.

Definities die vereist zijn voor de coördinatorfuncties zijn:

  • begin & min Start datetime voor de taak.
  • einde & min Einde datetime voor de taak.
  • tijdzone & minus Tijdzone van de coördinatortoepassing.
  • frequentie & minus De frequentie, in minuten, voor het uitvoeren van de taken.

Er zijn nog enkele eigenschappen beschikbaar voor besturingsinformatie:

  • time-out & minus De maximale tijd, in minuten, waarvoor een actie wacht om aan de aanvullende voorwaarden te voldoen, voordat deze wordt verwijderd. 0 geeft aan dat als niet aan alle invoergebeurtenissen is voldaan op het moment dat de actie wordt uitgevoerd, de actie onmiddellijk moet worden afgebroken. -1 geeft aan dat er geen time-out is, de actie zal voor altijd wachten. De standaardwaarde is -1.
  • gelijktijdigheid & minus Het maximale aantal acties voor een taak dat parallel kan worden uitgevoerd. De standaardwaarde is 1.
  • executie - Het specificeert de uitvoeringsvolgorde als meerdere instanties van de coördinatortaak hebben voldaan aan hun uitvoeringscriteria. Het kan zijn:
    • FIFO (standaard)
    • LIFO
    • LAST_ONLY

Opdracht: oozie job –oozie http: // localhost: 11000 / oozie -config -run

Als een configuratie-eigenschap die in de definitie wordt gebruikt, niet wordt geleverd bij de taakconfiguratie tijdens het verzenden van de coördinatortaak, zal het indienen van de taak mislukken.

Apache Oozie-zelfstudie: Oozie-bundel

Oozie Bundle-systeemstelt u in staat om een ​​reeks coördinatortoepassingen te definiëren en uit te voeren, vaak een datapijplijn genoemd. In een Oozie-bundel is er geen expliciete afhankelijkheid tussen de coördinatorapplicaties. U kunt echter de gegevensafhankelijkheid van coördinatortoepassingen gebruiken om een ​​impliciete gegevenstoepassingspijplijn te maken.U kunt de bundel starten / stoppen / onderbreken / hervatten / opnieuw uitvoeren. Het geeft een betere en gemakkelijke operationele controle.

Kick-off-tijd & min Het tijdstip waarop een bundel moet starten en coördinatoraanvragen moet indienen.

Als we verder gaan in deze Apache Oozie-zelfstudie, zullen we begrijpen hoe u een Workflow-taak kunt maken.

Apache Oozie-zelfstudie: werkstroomtaak voor het tellen van woorden

In dit voorbeeld gaan we een taak voor het tellen van woorden uitvoeren met Apache Oozie. Hier zullen we niet bespreken hoe u een MapReduce-programma voor het tellen van woorden schrijft. Dus voordat u deze Apache Oozie-zelfstudie volgt, moet u deze downloaden woord tellen pot het dossier. Maak nu een WordCountTest-directory waar we alle bestanden zullen plaatsen. Maak een lib-map waar we de jar voor het aantal woorden plaatsen, zoals weergegeven in de onderstaande afbeeldingen.

Laten we nu verder gaan en creëren job.properties & workflow.xml bestanden, waar we de job en de bijbehorende parameters specificeren.

job.properties

Ten eerste maken we een job.properties bestand, waar we het pad van NameNode & ResourceManager definiëren. Het NameNode-pad is vereist voor het omzetten van het workflow-mappad en het jobTracker-pad helpt bij het verzenden van de taak naar YARN. We moeten het pad van de workflow.xml bestand, dat moet worden opgeslagen in HDFS.

workflow.xml

Vervolgens moeten we het workflow.xml bestand, waar we al onze acties zullen definiëren en uitvoeren. Eerst moeten we de naam van de workflow-app specificeren, d.w.z. WorkflowRunnerTest . Vervolgens specificeren we de start node . Het startknooppunt ( in de Beginnen met label ) is het startpunt voor een workflowtaak. Het wijst naar het eerste workflowknooppunt waar de taak moet beginnen. Zoals je kunt zien in de onderstaande afbeelding, is het volgende knooppunt kruising0 vanwaar de klus zal beginnen.

Vervolgens specificeren we de uit te voeren taak in het actieknooppunt. We voeren hier een MapReduce WordCount-taak uit. We moeten de configuraties specificeren die nodig zijn voor het uitvoeren van deze MapReduce-taak. We definiëren de job tracker & NameNode-adres.

Het volgende is het voorbereide element, dat exclusief wordt gebruikt voor het opschonen van mappen, voordat de actie wordt uitgevoerd. Hier voeren we een verwijderbewerking uit in HDFS voor het verwijderen van het out1 map als deze al is gemaakt. De Prepare-tag wordt gebruikt voor het maken of verwijderen van een map voordat de taak wordt uitgevoerd. Vervolgens specificeren we de MapReduce-eigenschappen zoals taakwachtrijnaam, mapper-klasse, reducer-klasse, uitvoersleutelklasse en uitvoerwaardeklasse.

willekeurige klasse in java-voorbeeld

De laatste MapReduce-taakconfiguratie is de invoer- en uitvoermap in HDFS. De invoermap is gegevens directory, die is opgeslagen in het hoofdpad van NameNode . Ten slotte zullen we het kill-element specificeren als de taak mislukt.

Nu moeten we het WordCountTest map in HDFS, zoals we hebben gespecificeerd in oozie.wf.application.path eigendom in job.properties het dossier. Dus we kopiëren het WordCountTest map in de Hadoop-hoofdmap.

Opdracht: hadoop fs -put WordCountTest /

Om dit te verifiëren, kunt u naar de NameNode Web UI gaan en controleren of de map is geüpload naar de HDFS-hoofdmap of niet.

Nu zijn we klaar om verder te gaan en de workflowtaak uit te voeren.

Opdracht: oozie job –oozie http: // localhost: 11000 / oozie -config job.properties -run

Zodra we onze taak hebben uitgevoerd, krijgen we de taak-ID (d.w.z. 0000009-171219160449620-oozie-edur-W ) zoals weergegeven in de bovenstaande afbeelding. U kunt de vacature die u heeft ingediend, bekijken in de Oozie Web UI, d.w.z. localhost: 11000 . U kunt in de onderstaande afbeelding zien dat de vacature die we hebben ingediend hieronder staat vermeld.

Als u in de bovenstaande afbeelding ziet, ziet u de taak-ID, de naam van de taak, de status van de taak, de gebruiker die de taak heeft verzonden, het tijdstip van aanmaak, start en laatste wijziging. U kunt op de vacature klikken voor meer details, zoals:

wat is frame in java
  • Taakinfo

  • Functieomschrijving

  • Taakconfiguratie

Aangezien de status van de taak is geslaagd, moeten we naar de HDFS-hoofdmap gaan en controleren of de uitvoermap is gemaakt of niet.

Zoals je kunt zien, is het oozieout map is gemaakt in de HDFS, dus laten we nu kijken naar het uitvoerbestand dat is gemaakt.

Zoals we hebben gezien hoe u een Oozie-workflowtaak maakt, gaan we nu verder in deze Apache Oozie-zelfstudieblog en begrijpen we hoe u een coördinatortaak kunt maken.

Apache Oozie-zelfstudie: op tijd gebaseerde taak voor het tellen van woorden

In dit voorbeeld zullen we een op tijd gebaseerde taak voor het tellen van woorden maken die zal worden uitgevoerd na een specifiek tijdsinterval. U kunt een taak maken en plannen met Apache Oozie die dagelijks of periodiek moet worden uitgevoerd.

Laten we snel verder gaan in deze Apache Oozie-zelfstudie en een coördinatortaak maken. Hier zullen we drie bestanden maken, d.w.z. coordinator.properties , coordinator.xml & workflow.xml het dossier. Nogmaals, hier zullen we de w plaatsen ordcount pot in de lib directory zoals weergegeven in de onderstaande afbeelding.

Laten we deze bestanden nu afzonderlijk bekijken. Eerst beginnen we met het bestand coordinator.properties.

Hier specificeren we de frequentie waarmee de workflow wordt uitgevoerd. Frequentie wordt altijd uitgedrukt in minuten. In ons geval wordt deze coördinatortaak eenmaal per uur uitgevoerd tussen de opgegeven tijd. Frequentie wordt gebruikt om de periodieke intervallen vast te leggen waarmee de gegevenssets worden geproduceerd en de geplande uitvoering van coördinatortoepassingen.

Gebruik het volgende formaat om de frequentie in minuten, uren, dagen en maanden te definiëren:

$ {coordinaten: minuten (int n)} n $ {Coord: minutes (45)} -> 45
$ {Coord: hours (int n)} n * 60 $ {Coord: hours (3)} -> 180
$ {coordinaten: dagen (int n)} variabele $ {Coord: days (2)} -> minuten in 2 volledige dagen vanaf de huidige datum
$ {Coord: months (int n)} variabele $ {Coord: months (1)} -> minuten in een volle maand vanaf de huidige datum

Vervolgens definiëren we de start- en eindtijd van de taak zoals weergegeven in de bovenstaande afbeelding. starttijd is de start datetime voor de job & eindtijd is de eindtijd van de taak.

Vervolgens specificeren we de NameNode & ResourceManager-URL, die zal worden gebruikt om het workflow.xml-bestand in HDFS te verwijzen en taken naar YARN te verzenden. Ten slotte specificeren we het workflow.xml-pad, dat we zullen opslaan in HDFS. We zullen ook het applicatiepad specificeren waar alle bestanden & lib directory zullen worden opgeslagen.

Het tweede bestand is coordinator.xml waar we alle eigenschappen zullen gebruiken die we hebben gespecificeerd in het coordinator.properties het dossier. Nu zullen we eerst de eigenschappen van de coördinatortoepassing specificeren, d.w.z. naam, frequentie en tijdzone. Vervolgens specificeren we de workflows een voor een. Hier hebben we maar één workflow. Dus binnen het actie-element zullen we een workflow-element maken, waar we het applicatiepad zullen specificeren.

Vervolgens moeten we vooruitgang boeken workflow.xml bestand waar we de taak zullen specificeren. Het is vergelijkbaar met de workflow.xml bestand, dat we hebben gemaakt in de werkstroomtaak.

Nogmaals, we zullen dit verplaatsen WordCountTest_TimedBased directory naar HDFS.

Opdracht : hadoop fs -put WordCountTest_TimeBased /

Nu zijn we klaar om verder te gaan en deze coördinatortaak uit te voeren in deze Oozie-zelfstudie. Laten we doorgaan en het uitvoeren.

Opdracht : oozie job –oozie http: // localhost: 11000 / oozie -config coordinator.properties -run

Noteer deze job-ID van de coördinator (bijv. 0000010-171219160449620-oozie-edur-C). Het zal u helpen uw baan op te sporen in de Oozie Web UI.

U kunt de vacature zien op het tabblad Coördinatortaken in de Oozie Web UI. Net als bij de Workflow-taak hebben we naam, status, gebruiker, frequentie, begin- en eindtijd van de taak. Wanneer u op een bepaalde vacature klikt, ziet u de details van de vacature, zoals weergegeven in de onderstaande afbeeldingen.

  • Coördinator Job Info

  • Coördinator Functieomschrijving

  • Coördinator taakconfiguratie

Nu, zoals we door de verschillende tabbladen hebben gekeken. We gaan terug naar de HDFS-hoofdmap waar de uitvoermap zal worden gemaakt. Zoals je kunt zien in de onderstaande afbeelding, oozieTimeBasedout directory is gemaakt, zoals we hebben gespecificeerd in workflow.xml het dossier.

Laten we nu eens kijken naar het uitvoerbestand dat is gemaakt.

Ik hoop dat je deze Apache Oozie Tutorial-blog informatief hebt gevonden. Als u meer wilt weten, kunt u dit doornemen die u vertelt over Big Data en hoe Hadoop uitdagingen met betrekking tot Big Data oplost.

Nu je Apache Oozie hebt begrepen, kun je het door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De Edureka Big Data Hadoop-certificeringstraining helpt leerlingen expert te worden in HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume en Sqoop met behulp van real-time use cases op het gebied van Retail, Social Media, Aviation, Tourism, Finance.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte en we nemen contact met u op.