Apache Oozie-opplæring: Hva er, arbeidsflyt, eksempel – Hadoop

Hva er OOZIE?

Apache Oozie er en arbeidsflytplanlegger for Hadoop. Det er et system som kjører arbeidsflyten til avhengige jobber. Her har brukere lov til å lage Regissert asykliske grafer av arbeidsflyter, som kan kjøres parallelt og sekvensielt i Hadoop.

Den består av to deler:

  • Arbeidsflytmotor: Ansvaret til en arbeidsflytmotor er å lagre og kjøre arbeidsflyter som består av Hadoop-jobber, f.eks. MapReduce, Pig, Hive.
  • Koordinatormotor: Den kjører arbeidsflytjobber basert på forhåndsdefinerte tidsplaner og tilgjengelighet av data.

Oozie er skalerbar og kan administrere rettidig utførelse av tusenvis av arbeidsflyter (hver består av dusinvis av jobber) i en Hadoop-klynge.

OOZIE

Oozie er også veldig fleksibel. Man kan enkelt starte, stoppe, suspendere og kjøre jobber på nytt. Oozie gjør det veldig enkelt å kjøre mislykkede arbeidsflyter på nytt. Man kan lett forstå hvor vanskelig det kan være å ta igjen tapte eller mislykkede jobber på grunn av nedetid eller feil. Det er til og med mulig å hoppe over en spesifikk mislykket node.

Hvordan virker OOZIE?

Oozie kjører som en tjeneste i klyngen og klienter sender inn arbeidsflytdefinisjoner for umiddelbar eller senere behandling.

Oozie arbeidsflyt består av handlingsnoder og kontroll-flyt noder.

An handlingsnode representerer en arbeidsflytoppgave, for eksempel å flytte filer til HDFS, kjøre en MapReduce, Pig eller Hive jobber, importere data ved hjelp av Sqoop eller kjøre et shell-skript av et program skrevet inn Java.

A kontroll-flyt node kontrollerer arbeidsflytkjøringen mellom handlinger ved å tillate konstruksjoner som betinget logikk der forskjellige grener kan følges avhengig av resultatet av tidligere handlingsnode.

Start node, Slutt nodeog Feil node faller inn under denne kategorien av noder.

Start node, angir starten på arbeidsflytjobben.

Slutt node, signaliserer slutt på jobben.

Feil node angir forekomsten av en feil og tilsvarende feilmelding som skal skrives ut.

På slutten av utførelse av en arbeidsflyt, brukes HTTP-tilbakekalling av Oozie for å oppdatere klienten med arbeidsflytstatus. Inngang til eller utgang fra en handlingsnode kan også utløse tilbakeringing.

Eksempel på arbeidsflytdiagram

Eksempel på arbeidsflytdiagram

Pakke og distribuere en Oozie arbeidsflytapplikasjon

En arbeidsflytapplikasjon består av arbeidsflytdefinisjonen og alle tilhørende ressurser som MapReduce Jar-filer, Pig-skript osv. Applikasjoner må følge en enkel katalogstruktur og distribueres til HDFS slik at Oozie kan få tilgang til dem.

Et eksempel på katalogstruktur er vist nedenfor-

<name of workflow>/</name>
??? lib/
? ??? hadoop-examples.jar
??? workflow.xml

Det er nødvendig å beholde workflow.xml (en arbeidsflytdefinisjonsfil) i toppnivåkatalogen (overordnet katalog med arbeidsflytnavn). Lib-katalogen inneholder Jar-filer som inneholder MapReduce-klasser. Arbeidsflytapplikasjon som samsvarer med denne layouten kan bygges med ethvert byggeverktøy, f.eks. Ant eller Maven.

En slik build må kopieres til HDFS ved å bruke en kommando, for eksempel -

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

Trinn for å kjøre en Oozie-arbeidsflytjobb

I denne delen vil vi se hvordan du kjører en arbeidsflytjobb. For å kjøre dette bruker vi Oozie-kommandolinjeverktøyet (et klientprogram som kommuniserer med Oozie-serveren).

1. Eksporter OOZIE_URL miljøvariabel som forteller oozie-kommandoen hvilken Oozie-server som skal brukes (her bruker vi en som kjører lokalt):

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

2. Kjør arbeidsflytjobben med-

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

Alternativet -config refererer til en lokal Java egenskapsfil som inneholder definisjoner for parameterne i arbeidsflytens XML-fil, samt oozie.wf.application.path, som forteller Oozie plasseringen av arbeidsflytapplikasjonen i HDFS.

Eksempelinnhold i egenskapsfilen:

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

3. Få status for arbeidsflytjobben-

Status for arbeidsflytjobben kan sees ved å bruke underkommando 'job' med '-info'-alternativet og spesifisere jobb-ID etter '-info'.

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

Utdata viser status som er en av KJØRER, DREPT eller LYKKET.

4. Resultater av vellykket kjøring av arbeidsflyt kan sees ved å bruke Hadoop-kommando som-

% hadoop fs -cat <location of result>

Hvorfor bruke Oozie?

Hovedformålet med å bruke Oozie er å administrere forskjellige typer jobber som behandles i Hadoop-systemet.

Avhengigheter mellom jobber spesifiseres av en bruker i form av Directed Acyclic Graphs. Oozie bruker denne informasjonen og sørger for at de utføres i riktig rekkefølge som spesifisert i en arbeidsflyt. På den måten spares brukerens tid til å administrere hele arbeidsflyten. I tillegg har Oozie en bestemmelse for å spesifisere frekvensen for utførelse av en bestemt jobb.

Funksjoner av Oozie

  • Oozie har klient-API og kommandolinjegrensesnitt som kan brukes til å starte, kontrollere og overvåke jobb fra Java søknad.
  • Ved å bruke Web Service API-ene kan man kontrollere jobber fra hvor som helst.
  • Oozie har mulighet for å utføre jobber som er planlagt å kjøre med jevne mellomrom.
  • Oozie har mulighet for å sende e-postvarsler ved fullføring av jobber.