Apache Oozien opetusohjelma: Työnkulkukaavio, ajoitus

⚡ Älykäs yhteenveto

Apache Oozie on Hadoopin työnkulkujen ajoittaja, joka suorittaa riippuvaisia ​​töitä suunnattuina asyklisinä graafeina yhdistäen MapReduce-, Pig- ja Hive-toimintojen työnkulkumoottorin ajan ja datan saatavuuden ohjaamaan koordinointimoottoriin.

  • 🔘 Kaksi moottoria: Työnkulkumoottori suorittaa Hadoop-työgraafit; koordinointimoottori käynnistää ne aikataulun mukaisesti tai datan saapuessa.
  • ☑️ Solmutyypit: Toimintasolmut suorittavat työtä; ohjaussolmut, kuten päätös-, haarautumis- ja liittymissolmut, ohjaavat polkua.
  • Kolme työtyyppiä: Työnkulku-, koordinointi- ja pakettityöt pinoutuvat kokonaiseksi dataputkeksi.
  • 🧪 Asennus: Työnkulkusovellus on hakemisto, joka sisältää workflow.xml-tiedoston ja lib-kansion, jotka on kopioitu HDFS:ään.
  • 🛠️ Komentorivi: Aseta OOZIE_URL, lähetä se komennolla oozie job -run ja suorita sitten kysely komennolla oozie job -info, kunnes se raportoi ONNISTUNEEN.
  • ⚠️ Projektin tila: Oozie siirrettiin Apache Atticille vuonna 2025, joten uudet putkistot käyttävät yleensä Apache Airflow'ta.

Apache Oozien tutoriaali, joka käsittelee työnkulkua, koordinaattorin töitä ja Hadoopin aikataulutusta

Mikä on Apache Oozie?

Apache Oozie on työnkulun ajoittaja, joka on tarkoitettu HadoopSe on järjestelmä, joka suorittaa riippuvaisten töiden työnkulkua. Täällä käyttäjät voivat luoda työnkuluista suunnattuja asyklisiä graafeja, joita voidaan suorittaa rinnakkain ja peräkkäin Hadoopissa.

Se koostuu kahdesta osasta:

  • Työnkulun moottori: Työnkulkumoottorin tehtävänä on tallentaa ja suorittaa Hadoop-töistä koostuvia työnkulkuja, esim. MapReduce, Sika, Hive.
  • Koordinaattorimoottori: Se suorittaa työnkulkutöitä ennalta määritettyjen aikataulujen ja datan saatavuuden perusteella.

Oozie on skaalautuva ja pystyy hallitsemaan tuhansien työnkulkujen (joista jokainen koostuu kymmenistä töistä) oikea-aikaista suorittamista Hadoop-klusterissa. Alla oleva kaavio näyttää, missä ajoitin sijaitsee suhteessa klusteriin ja sen ohjaamiin töihin.

Apache Oozie -työnkulun ajoittaja, joka suorittaa riippuvaisia ​​Hadoop-töitä suunnattuna asyklisenä graafina

Oozie on myös erittäin joustava. Töitä voi helposti aloittaa, pysäyttää, keskeyttää ja suorittaa uudelleen. Oozien avulla epäonnistuneiden työnkulkujen uudelleen suorittaminen on erittäin helppoa. On helppo ymmärtää, kuinka vaikeaa voi olla kuroa kiinni seisokkien tai vikojen vuoksi menetettyjä tai epäonnistuneita töitä. On jopa mahdollista ohittaa tietty epäonnistunut solmu.

Projektin tila: Apache Software poisti Apache Oozien käytöstä. Foundation helmikuussa 2025 ja siirtyminen Apache-ullakko valmistui huhtikuussa 2025. Lopullinen julkaisuversio on edelleen 5.2.1 helmikuusta 2021, ja lähdekoodirepositorio on nyt vain luku -tilassa. Olemassa olevat klusterit käyttävät sitä edelleen, minkä vuoksi alla olevat mekaniikat ovat hyödyllisiä, mutta uudet putket rakennetaan yleensä Apache Airflow'n päälle.

Miten Oozie toimii?

Oozie toimii palveluna klusterissa, ja asiakkaat lähettävät työnkulkumääritelmät välitöntä tai myöhempää käsittelyä varten.

Oozie-työnkulku koostuu toiminto- ja ohjausvirtaussolmuista.

Toimintosolmu edustaa työnkulun tehtävää, esimerkiksi tiedostojen siirtämistä HDFS, MapReduce-, Pig- tai Hive-työn suorittaminen, tietojen tuonti käyttämällä Sqooptai suorittamalla komentosarjan tai kielellä kirjoitetun ohjelman Java.

Ohjausvirtaussolmu ohjaa työnkulun suoritusta toimintojen välillä sallimalla rakenteita, kuten ehdollisen logiikan, jossa eri haarat voivat seurata aiemman toimintosolmun tuloksesta riippuen.

Aloitussolmu, lopetussolmu ja virhesolmu kuuluvat tähän solmuluokkaan.

  • Käynnistä Node määrittää työnkulkutyön alkamisen.
  • Päätesolmu merkitsee työn loppua.
  • Virhesolmu määrittää virheen esiintymisen ja vastaavan tulostettavan virheilmoituksen.

Työnkulun suorituksen lopussa Oozie käyttää HTTP-takaisinkutsua päivittääkseen asiakkaan työnkulun tilan. Toimintonoodiin siirtyminen tai siitä poistuminen voi myös käynnistää takaisinkutsutoiminnon.

Oozie-ohjaussolmut ja toimintotyypit

Aloitus-, lopetus- ja virhemerkintöjen lisäksi työnkulun XML tukee pientä määrää ohjaussolmuja, jotka muokkaavat graafia.

  • päätös: Laskee lausekkeen ja lähettää työnkulun alaspäin yhtä useista haaroista pitkin, mikä vastaa switch-lausetta.
  • haarukka: Jakaa polun niin, että kaksi tai useampi toiminto suoritetaan rinnakkain.
  • liity: Odottaa, että jokainen vastaavan haaran haara on valmis ennen jatkamista.
  • tappaa: Lopettaa työnkulun välittömästi ja tallentaa virheilmoituksen.

Toimintonoodit kattavat itse työn, ja jokaisella on oma XML-elementtinsä:

  • kartta-vähennys, sika, pesä ja squaop toiminnot käynnistävät vastaavan Hadoop-työn.
  • Jaava suorittaa pääluokkaa klusterissa; kuori ja ssh ajaa skriptejä.
  • fs suorittaa HDFS-siivoustehtäviäping kuten siirrä, poista, mkdir ja chmod.
  • email ilmoittaa vastaanottajille ja alityönkulku kutsuu toista työnkulkusovellusta.

Esimerkki työnkulkukaaviosta

Alla oleva kaavio tracsuorittaa pienen työnkulun aloitussolmustaan ​​MapReduce-toiminnon kautta joko lopetussolmuun tai virhepolkuun, kun toiminto epäonnistuu.

Esimerkki Oozie-työnkulkukaaviosta, joka näyttää aloitussolmun, toimintosolmun, virheenkäsittelyn ja lopetussolmun

Oozie-työpaikkojen tyypit

Oozie kuvaa työtä kolmella tasolla. Jokainen kerros käärii alemman tason sisäänsä, joten yksi paketti lopulta ohjaa useita yksittäisiä työnkulkuja.

Työn tyyppi Mitä se määrittelee Käynnistää
Työnkulku Suunnattu asyklinen graafi toiminta- ja ohjaussolmuista, kirjoitettu workflow.xml-tiedostoon Manuaalinen lähetys tai koordinaattori
Koordinaattori Yhden työnkulun toistuva aikataulu, jossa on alkamisaika, päättymisaika ja tiheys Kellonajan ja syöttötietojen saatavuus
Niputtaa Kokoelma koordinaattorisovelluksia, joita hallitaan yhdessä yhtenä dataputkena Aloitusaika, jota sovelletaan kaikkiin koordinaattoreihin

Käytännössä erottelu on tärkeää: työnkulku vastaa kysymykseen ”mitä suoritetaan”, koordinaattori vastaa kysymykseen ”milloin se suoritetaan” ja kokonaisuus vastaa kysymykseen ”mikä alkaa ja loppuu yhdessä”.

Oozie-työnkulkusovelluksen pakkaaminen ja käyttöönotto

Työnkulkusovellus koostuu työnkulun määritelmästä ja kaikista siihen liittyvistä resursseista, kuten MapReduce Jar -tiedostoista, Pig-skripteistä jne. Sovellusten on noudatettava yksinkertaista hakemistorakennetta ja ne on otettu käyttöön HDFS:ssä, jotta Oozie voi käyttää niitä.

Esimerkki hakemistorakenteesta on esitetty alla:

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

On välttämätöntä säilyttää workflow.xml (työnkulun määritystiedosto) ylimmän tason hakemistossa (työnkulun nimen kantavassa päähakemistossa). lib-hakemisto sisältää Jar-tiedostoja, jotka sisältävät MapReduce-luokkia. Tämän asettelun mukainen työnkulkusovellus voidaan rakentaa millä tahansa työkalulla, esim. Antilla tai Mavenilla.

Tällainen koontitiedosto täytyy kopioida HDFS:ään komennolla, esimerkiksi:

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

Oozie-työnkulun suorittamisen vaiheet

Tässä osiossa näemme, kuinka työnkulkutyö suoritetaan. Tämän suorittamiseen käytämme Oozie-komentorivityökalua (asiakasohjelma, joka kommunikoi Oozie-palvelimen kanssa).

1. Vie OOZIE_URL ympäristömuuttuja, joka kertoo oozie-komennolle, mitä Oozie-palvelinta käytetään (tässä käytämme paikallisesti toimivaa):

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

2. Suorita työnkulkutyö käyttämällä:

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

Valinta -config viittaa paikalliseen Java ominaisuustiedosto, joka sisältää määritelmät työnkulun XML-tiedoston parametreille, sekä oozie.wf.application.path, joka kertoo Oozielle työnkulkusovelluksen sijainnin HDFS:ssä.

Esimerkki ominaisuustiedoston sisällöstä:

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

3. Hanki työnkulkutehtävän tila.

Työnkulun työn tilan voi tarkistaa käyttämällä alikomennon 'job' ja '-info'-valitsinta. Työn tunnus määritetään '-info'-valitsimen jälkeen.

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

Tuloste näyttää tilan, joka on jokin seuraavista: RUNNING, KILLED tai SUCCEEDED.

4. Onnistuneen työnkulun suorituksen tulokset voidaan nähdä Hadoop-komennolla, kuten:

% hadoop fs -cat <location of result>

Miksi käyttää Ooziea?

Oozie-järjestelmän päätarkoitus on hallita erityyppisiä Hadoop-järjestelmässä käsiteltäviä töitä.

Käyttäjä määrittää töiden väliset riippuvuudet suunnattujen asyklisten kuvaajien muodossa. Oozie käyttää näitä tietoja ja huolehtii niiden suorittamisesta oikeassa järjestyksessä työnkulun mukaisesti. Tällä tavoin käyttäjän aika koko työnkulun hallintaan säästyy. Lisäksi Ooziessa on mahdollisuus määrittää tietyn työn suoritustiheys.

Oozien ominaisuudet

  • Ooziella on asiakasrajapinta (API) ja komentorivikäyttöliittymä, joita voidaan käyttää töiden käynnistämiseen, hallintaan ja valvontaan Java sovellus.
  • Web Service -rajapintojen avulla töitä voi hallita mistä tahansa.
  • Ooziella on mahdollisuus suorittaa töitä, jotka on ajoitettu suoritettavaksi säännöllisesti.
  • Oozie voi lähettää sähköposti-ilmoituksia töiden valmistuttua.

Oozie vs. Apache-ilmavirta

Koska Oozie on lopetettu, useimmat aikataulutustyökalua arvioivat tiimit vertaavat jo olemassa olevia työkalujaan Apache Airflow'hun. Nämä kaksi työkalua ratkaisevat saman ongelman vastakkaisista suunnista.

Aspect Apache Oozie apache-ilmavirta
Määritelmäkieli XML-muodossa kirjoitetut työnkulut DAG-tiedostot kirjoitettuna Python koodi
Laajuus Rakennettu Hadoop-toimintojen, kuten MapReduce, Pig, Hive ja Sqoop, ympärille Yleiskäyttöinen, operaattoreilla pilvipalveluille, tietokannoille ja säilöille
Ajoitus Koordinaattorin työtehtävät määräytyvät ajan ja datan saatavuuden mukaan Aikatauluta aikavälejä ja antureita, jotka odottavat ulkoisia olosuhteita
Projektin tila Jäänyt eläkkeelle Apache Atticille vuonna 2025; lopullinen julkaisu 5.2.1 Aktiivisesti kehitetty Apachen ylimmän tason projekti

Oozie on edelleen yksinkertaisempi vaihtoehto klusterissa, joka jo käyttää sitä, koska toiminnot liittyvät yksi yhteen Hadoopin komponentteihin. Airflow on käytännöllinen valinta kaikelle uudelle, erityisesti silloin, kun putkisto ulottuu Hadoopin ulkopuolelle.

UKK

Ei. Apache-ohjelmisto Foundation jäi Oozie eläkkeelle helmikuussa 2025 ja muutti Atticille huhtikuussa 2025. Lopullinen julkaisu on versio 5.2.1 helmikuussa 2021 ja arkisto on vain luku -tilassa, vaikka dokumentaatio pysyy verkossa.

Tekoälyavustajat muuttavat kuvatun prosessin aikataulutuskonfiguraatioksi, selittävät, miksi työgraafi juuttui umpikujaan, ja tiivistävät klusterilokit todennäköiseksi perussyyksi. Hyödyllinen ensimmäisessä luonnoksessa ja triage-analyysissä, ei tuotantoaikataulun hyväksymisessä.

Copilot kirjoittaa uskottavan workflow.xml-tiedoston nopeasti, mutta se usein keksii elementtien nimiä tai väärän skeemaversion. Vahvista luotu XML 5.2.1-skeemaa vasten ja testaa se ensin testiklusterilla.

Koordinaattori yhdistää taajuuden, aloitusajan ja lopetusajan datasetin määritelmiin. Se käynnistyy vain, kun kello saavuttaa seuraavan aikavälin ja jokainen ilmoitettu syöttödatajoukko on olemassa HDFS:ssä, joten myöhäinen data viivästyttää suoritusta.

Lähetä työ uudelleen uudelleensuoritustoiminnolla ja alkuperäisellä työtunnuksella sekä nimeä ohitettavat tai toistettavat solmut. Oozie käyttää uudelleen suoritettuja toimintoja, joten vain jäljellä oleva osa graafista suoritetaan.

PREP tarkoittaa, että työ hyväksyttiin, mutta sitä ei aloitettu, yleensä siksi, että HDFS:n sovelluspolku on väärä tai toteutusaika ei ole vielä saapunut. SUSPENDED tarkoittaa, että joku on keskeyttänyt sen tai toiminto epäonnistui ja työnkulku on keskeytetty.

Palvelin toimii omalla pääasiallisella ja avaintaulukolla, ja asiakkaat todentuvat SPNEGO:n kautta HTTP:n kautta. Työnkulut sisältävät delegointitokenit, joten jokainen toiminto saavuttaa HDFS:n ja YARN:n lähettävänä käyttäjänä, ei palvelimena.

Cron laukaisee komennon ja unohtaa sen. Aikatauluttaja tracks töiden väliset riippuvuudet, odottaa syötetietojen saapumista, tallentaa jokaisen toiminnon tilan ja antaa sinun suorittaa uudelleen vain epäonnistuneen osan.

Tiivistä tämä viesti seuraavasti: