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


