Verkkosivustohaku

Apache Airflow selitettynä: Aloittelijaystävällinen opas


Johdanto

Nykyajan datalähtöiset yritykset luottavat kaikki datan siirtoputkiin, jotka hakevat, muokkaavat, rikastavat ja siirtävät tietoa paikasta toiseen. Nämä datan siirtoputket voivat sisältää monia vaiheita (raakatietojen kerääminen, puhdistaminen, koneoppimismallien kouluttaminen, koontinäyttöjen rakentaminen jne.). Lisäksi niiden on toimittava hyvin tarkassa järjestyksessä. Työnkulun orkestrointityökalut, kuten Apache Airflow, auttavat varmistamaan, että kaikki nämä vaiheet suoritetaan oikeaan aikaan ja oikeassa järjestyksessä. Ne myös tekevät putkien seurannasta ja hallinnasta helppoa.

Airflow kehitettiin Airbnb:llä vuonna 2014, ja siitä on tullut yksi suosituimmista avoimen lähdekoodin työnkulkujen orkestrointialustoista. Sitä käyttävät tuhannet organisaatiot automatisoimaan ja valvomaan eräajoja. Tässä artikkelissa selitämme Apache Airflown perusteista lähtien. Aiheet, joita käsittelemme, ovat:

  • Mikä Airflow on, mitä se tekee ja miksi datatiimit käyttävät sitä.
  • Airflowin keskeiset käsitteet ja komponentit sekä se, miten ne liittyvät toisiinsa.
  • Kuinka putkistot määritellään suunnatuksi syklittömäksi verkoksi (DAG) ja katsaus yksinkertaisen DAGin toimintaan.
  • Yleiset käyttötapaukset, kuten ETL/ELT, MLOps ja muut.

Toivomme, että tästä tulee käytännönläheinen, esimerkkipohjainen johdanto Apache Airflow'hun insinööreille, opiskelijoille ja tiimeille, jotka aloittavat työnkulkujen orkestroinnin parissa.

Tärkeimmät asiat

  • Apache Airflow on Python-pohjainen työnkulkujen orkestrointialusta, joka hallinnoi, aikatauluttaa ja valvoo monimutkaisia datavirtoja käyttämällä DAGeja (Directed Acyclic Graphs).
  • DAG:t määrittelevät tehtävät ja niiden riippuvuudet, mikä mahdollistaa Airflown suorittaa jokaisen vaiheen oikeassa järjestyksessä sisäänrakennetuilla uudelleensuorituksilla, kirjaamisella ja havaittavuudella.
  • Airflow'n arkkitehtuuri (Scheduler, Executor, Worker, Metadata DB, Web UI) mahdollistaa skaalautuvan, hajautetun suorittamisen ja putkien reaaliaikaisen valvonnan.
  • Airflow on erinomainen eräajoprosesseissa, kuten ETL/ELT-tehtävissä, ML-koulutusputkissa, datalaadun tarkistuksissa ja aikataulutetussa analytiikassa — mutta ei ole ihanteellinen reaaliaikaisiin tai erittäin nopeaa taajuutta vaativiin työkuormiin.
  • Vaihtoehdot kuten Prefect, Dagster, Luigi, Argo Workflows ja Mage AI saattavat sopia paremmin tarpeista riippuen, kuten tapahtumapohjaisiin työnkulkuihin, Kubernetes-natiiviseen suorittamiseen tai nykyaikaisiin kehittäjäystävällisiin käyttöliittymiin.

Mikä on Apache Airflow?

Apache Airflow on avoimen lähdekoodin järjestelmä työnkulkujen luomiseen, aikatauluttamiseen ja seurantaan. Airflow-työnkulku on DAG (suunnattu syklitön kaavio), joka on sarja tehtäviä, joilla on selkeästi määritellyt suhteet (riippuvuudet) eikä lainkaan syklejä (tehtävä ei voi toistaa itseään ylävirrassa). Airflown ydinfilosofia on "konfigurointi koodina", joten käyttöliittymän vetämällä ja pudottamalla -toiminnon sijaan luot Python-skriptejä edustamaan työnkulkuja. Tämä lähestymistapa tarjoaa merkittävää joustavuutta insinööreille: voit yhdistää lähes mihin tahansa teknologiaan Airflown operaattorien ja Python-kirjastojen kautta. Voit myös soveltaa ohjelmistosuunnittelun parhaita käytäntöjä (versionhallinta, testaus jne.) putkiesi määritelmiin.

Miksi työnkulun orkestrointi on tärkeää?

Keskeistä on, että usein tietojenkäsittelytyönkulussa on useita vaiheita, jotka on suoritettava peräkkäin. Yksinkertainen esimerkki on ETL (Extract/Transform/Load) -putkisto. Putkistot voivat nopeasti muuttua monimutkaisemmiksi, kun niihin lisätään enemmän tehtäviä, riippuvuuksia, haarautumisia ja niin edelleen, ja niiden täytyy myös toimia säännöllisin väliajoin. Manuaalinen puuttuminen tai yksinkertaiset ajastintyökalut eivät usein riitä näissä tapauksissa. Airflow ratkaisee tämän toimimalla keskeisenä orkestroijana. Siinä on suuntaa antamaton syklinen graafi (DAG) tehtävistä (solmuista) riippuvuuksineen (kaaret). Se tietää, milloin suorittaa mikäkin tehtävä (odottamalla ylöspäin olevien riippuvuuksien valmistumista ennen suoritusta), mukaan lukien aikataulutus (toistuva ajoitus), virheiden käsittely (automaattiset uudelleenyrittämiset, hälytykset) ja lokitus.

Jos pidämme koko datan käsittelyputkea reseptinä, niin jokainen yksittäinen tehtävä on alavaihe (hakkailu, keittäminen, tarjoilu jne.). Airflow on kuin keittiöpäällikkö, joka tuntee reseptit ja pitää silmällä kaikkia eri alavaiheita jokaisessa keittiössä varmistaen, että kaikki tapahtuu oikeassa järjestyksessä ja oikeaan aikaan.

Ilman työnkulun orkestrointia sinulla saattaa olla kaikki kokit ja ainekset, mutta ne eivät ole yhteensovitettuja. Airflow tarjoaa tämän yhteensovittamisen, mahdollistaen halutun "ruoan" (työnkulun suorituksen) tuottamisen.

Miksi datatiimit käyttävät Airflow'ta?

Airflow on noussut suosituksi data-engineerien, ML-insinöörien ja DevOps-tiimien keskuudessa, koska se vastaa moniin monimutkaisten dataputkien tarpeisiin. Tässä muutama suuri syy, miksi tiimit valitsevat Airflow'n:

  • Monimutkaisten työnkulkujen ja riippuvuuksien orkestrointi: Airflow on suunniteltu työnkuluja varten, joissa on suuri määrä toisiinsa liittyviä vaiheita. Airflow tekee helppoa määrittää ylä- ja alavirran vaatimukset, mikä varmistaa, että tehtävät suoritetaan oikeassa järjestyksessä. Jos tehtävä C riippuu tehtävistä A ja B, Airflow:n ajastin tuntee nämä suhteet ja varmistaa, että A ja B suoritetaan (mahdollisesti rinnakkain) ennen C:n suorittamista. Airflow pystyy käsittelemään monimutkaisia riippuvuuksia, haarautumilogiikkaa jne.
  • Keskitetty ajastus (Cron tehostettuna): Se tarjoaa ajastimen, jonka avulla voit suorittaa tehtäviä tietyllä aikataululla. Voit määritellä kymmeniä tai satoja putkia, jotka laukaisevat tehtäviä eri aikoina (tunti-, päivä- tai kuukausittain) Airflown ajastimen avulla. Airflow ymmärtää tehtävien väliset suhteet. Se osaa älykkäästi aikatauluttaa ja laukaista tehtäviä suoritettavaksi. Keskitetty ajastin vapauttaa sinut kirjoittamasta eri skriptejä eri palvelimille.

  • Laajennettavuus ja hajautettu suoritus: Airflow voi myös skaalautua työnkulkujesi mukana. Sitä voidaan konfiguroida suorittamaan tehtäviä rinnakkain useissa työntekijäprosesseissa tai koneissa. Se tarjoaa myös useita suorittajia (käsitellään myöhemmin tässä artikkelissa), jotka voivat suorittaa tehtäviä hajautetuissa järjestelmissä, kuten Celeryssä tai Kubernetesissa, solmuverkon yli. Tämä tarkoittaa, että voit suorittaa raskaita tehtäviä rinnakkain (esim. suurten tietomäärien käsittely) ja pitää useita putkia käynnissä samanaikaisesti.
  • Seuranta, lokitus ja hälytys: Se toimitetaan monipuolisen verkkokäyttöliittymän kanssa, joka tarjoaa reaaliaikaisen näkyvyyden työnkulkuusi. Näet, mitkä tehtävät ovat onnistuneet ja mitkä epäonnistuneet, ja voit tarkastella kunkin tehtävän lokitulosteita. Voit jopa käynnistää ja/tai yrittää tehtäviä uudelleen manuaalisesti verkkokäyttöliittymän kautta.

Ilmavirran keskeiset osat

Alla on lyhyt yleiskuva Apache Airflow'n keskeisistä rakennuspalikoista. Käytä tätä taulukkoa nopeana viitteenä ymmärtääksesi, mikä kukin osa on ja mitä se tekee.

KomponenttiMitä se onKeskeiset vastuut
DAGit (suunnatut syklittömät graafit)Työnkulun luonnos on kirjoitettu Pythonilla; se on tehtävien ja riippuvuuksien verkosto ilman silmukoita.Määrittää, mitkä tehtävät suoritetaan ja missä järjestyksessä; koodaa aikataulun ja metatiedot; mahdollistaa visualisoinnin käyttöliittymässä.
TehtävätPienin työyksikkö (solmu DAG-kaaviossa) luodaan operaattoreista tai TaskFlow-funktioista.Suorittaa tietyn toimenpiteen (esim. ajaa SQL, kutsua Pythonia, laukaista API, siirtää tiedostoja); ilmoittaa onnistumisesta/epäonnistumisesta.
AikatauluPysyvä palvelu, joka arvioi DAG:ia ja tehtävien tiloja jatkuvasti.Määrittää, milloin kukin tehtävä suoritetaan aikataulujen ja riippuvuuksien perusteella; luo tehtäväinstanssit; hallinnoi uudelleenyrittämisiä ja jälkitäyttöjä.
Suorittaja (ja Työntekijät)Suoritusyksikkö ja prosessit, jotka itse asiassa suorittavat tehtäviä.Käynnistää tehtäväinstansseja valitulla taustajärjestelmällä (paikallinen prosessi/säie, Celery-työntekijät, Kubernetes-podit); palauttaa tulokset ajastimelle.
Verkkopalvelin (Web-käyttöliittymä)Ilmavirran verkkopalvelin tarjoaa käyttöliittymän operatiiviseen käyttöön.Havaittavuus ja hallinta: tarkastele DAG:eja, käynnistä/tyhjennä tehtäviä, tarkista lokit, pysäytä DAG:eja, hallinnoi yhteyksiä/muuttujia.
MetatietokantaPysyvä tietuejärjestelmä (tyypillisesti PostgreSQL/MySQL).Tallentaa DAG-suoritukset, tehtäväinstanssit ja tilat, määritykset, lokimetatiedot ja toimintahistorian.

Kuinka Airflow toimii (arkkitehtuuri)

Tässä on vaiheittainen yleiskatsaus siihen, miten Airflow käsittelee työnkulun (DAG):

  • DAG:n luominen: DAG:n laatija kirjoittaa Python-skriptin, joka määrittelee DAG:n. Tämä skripti sisältää esimerkiksi aikataulun (esim. ”suorita päivittäin klo 9”) tai manuaaliset käynnistysasetukset. Siinä on myös tehtävien määritelmät (operaattorien tai @task-funktioiden kautta) sekä tehtävien riippuvuudet (esim. task1 >> task2 (task2 odottaa, että task1 on valmis)). Python-tiedosto tallennetaan Airflow’n DAG-kansioon, jotta Airflow voi löytää sen. Airflow lukee (jäsentää) tämän tiedoston säännöllisesti ladatakseen DAG-määritelmän.
  • Aikataulutus ja DAG:n jäsentäminen: Airflow Scheduler on prosessi, joka toimii jatkuvasti taustalla. Se tarkistaa, pitäisikö kutakin DAG:ia suorittaa sen aikataulun tai laukaisevien ehtojen perusteella. Esimerkiksi DAG, jonka aikataulu on “päivittäinen”, voidaan poimia ajastimen toimesta, ja huomata, että uusi suoritus on aikataulutettava keskiyöllä. Airflow Scheduler tarkistaa myös, ovatko DAG:ien sisäiset tehtävät valmiita suoritettavaksi – eli onko kaikkien niiden edeltävien riippuvuuksien suoritus valmis ja onko niiden suunniteltu aika (looginen päivämäärä) saapunut.
  • Tehtävien suorittaminen: Jokainen suoritettava tehtävä siirretään Suorittajalle Aikatauluttajalta. Suorittaja päättää, missä ja miten tehtävä suoritetaan. Se voidaan suorittaa paikallisesti tai lähettää työjonoon. Jakautuvassa arkkitehtuuriassa tehtävä lisätään jonoon, ja sitten Työntekijä-prosessit valitsevat tehtäviä suoritettavaksi.
  • Tilapäivitys ja virheenkäsittely: Jokainen tehtäväinstanssi raportoi tilansa (onnistuminen, epäonnistuminen jne.) takaisin ajastajalle sen valmistuttua, ja ajastaja päivittää metatietokantansa tehtävän tilalla.
    Tilaseuranta on se, mikä mahdollistaa ajastajan tietävän, mitä seuraavaksi tehdä – esimerkiksi, jos Tehtävä A on suoritettu onnistuneesti, ajastaja tietää, että se voi nyt aikatauluttaa Tehtävä B:n, tai jos Tehtävä A epäonnistui, mutta yrityskertoja on jäljellä, se aikatauluttaa uudelleenyrittämisen, tai jos yrityksiä ei ole jäljellä, se merkitsee DAG-ajon epäonnistuneeksi. Jos tehtävä epäonnistuu, Airflowsilla on logiikka, joka yrittää tehtävän uudelleen automaattisesti, jos uudelleenyrittäminen on määritetty. Jos tehtävä jatkaa epäonnistumista uudelleenyrittämisen jälkeen, Airflow voi lähettää ilmoituksen epäonnistumisista (sähköposti tai Slack-viesti jne.). Kaikki tämä on konfiguroitavissa osana DAGin tai tehtävän parametreja (esim. yrityskertojen määrä, uudelleenyrittämisen viive, ilmoituksen lähetyssähköposti).
  • Seuranta ja toimenpiteet: Airflow Web UI tarjoaa reaaliaikaisen käyttöliittymän edellä mainitulle prosessille. Näet DAG-suorituksen ilmestyvän (esimerkiksi uusi rivi Tree-näkymässä tämän päivän suoritukselle) ja voit seurata tehtävien tilojen muutoksia suorituksen edetessä. Graph-näkymä visualisoi DAG:n tehtävät ja näyttää, mitkä on suoritettu ja mitkä ovat virhetilassa.
  • Siivous ja seuraava ajo: Kun DAG-ajon suoritus on valmis (kaikki tehtävät ovat onnistuneet tai ne on ohitettu/epäonnistuneet), Airflow siirtyy seuraavaan aikataulutettuun ajoon. Kaikki tiedot aiemmista ajoista säilytetään edelleen tietokannassa, ja voit aina tarkistaa historian. Ajastin jatkaa uusien ajojen käynnistämistä aikataulun tai manuaalisen käynnistyksen mukaisesti. Tätä prosessia toistetaan, kunnes Airflow-prosessi keskeytetään.

Dagien ymmärtäminen Airflow'ssa

DAG Airflow'ssa määrittelee aikataulun sekä tehtävät ja riippuvuudet, jotka tarvitaan työnkulun suorittamiseen. DAGin ei tarvitse tietää, mitä kukin tehtävä sisältää; sen tarvitsee vain määritellä, milloin ja missä järjestyksessä ne tulisi suorittaa.

Tehtävät, operaattorit ja anturit

Tehtävät ovat Airflow'ssa työn perusyksiköitä. Airflow'ssa tehtävät ovat operaattoreiden ilmentymiä, jotka ovat malleja ennalta määritellyille toiminnoille. Airflow sisältää erilaisia ydinoperaattoreita. BashOperator antaa sinun suorittaa kuorikomentoja, ja PythonOperator antaa sinun kutsua Python-funktioita. Airflow tarjoaa myös @task-koristelijan, jonka avulla voit muuttaa tavallisen Python-funktion tehtäväksi.

Operaattoreiden lisäksi Airflow tarjoaa sensoreita. Sensorit ovat tehtäviä, jotka odottavat tietyn ehdon tai tapahtuman toteutumista ennen kuin ne onnistuvat. Niitä voidaan käyttää esimerkiksi odottamaan tiedoston ilmestymistä tai taulun täyttymistä.

Tehtävien riippuvuudet

Tehtävien välisiä riippuvuuksia ilmoitetaan käyttämällä >> ja << -operaattoreita (suositeltavaa) tai menetelmiä kuten set_upstream ja set_downstream. Tehtäviä on myös mahdollista ketjuttaa, luoda ristiriippuvia alatehtäviä ja jopa rakentaa dynaamisesti tehtävälistoja. DAG ilman riippuvuuksia olisi vain itsenäinen joukko tehtäviä.

Parhaat käytännöt DAG-suunnittelussa

Alla oleva taulukko esittelee muutamia ohjeita, jotka kannattaa pitää mielessä DAG:ien suunnittelussa.

Parhaat käytännötKuvausKäytännön vinkkejä/esimerkkejä
Varmista, että DAG:t ovat todella syklittömiäDAGeissa ei saa olla syklejä. Monimutkaisissa työnkuluissa on helppo luoda epäsuoria silmukoita (esim. A → B → C → A). Airflow tunnistaa syklit automaattisesti ja kieltäytyy suorittamasta tällaisia DAGeja.Tarkista riippuvuudet säännöllisesti. Käytä Kaaviokuvanäkymää (Graph View) visuaalisesti varmistaaksesi, että DAGissa ei ole silmukoita. Refaktoroi monimutkaiset DAGit välttääksesi tahattomat syklit.
Pidä tehtävät idempotentteina ja pieninäJokaisen tehtävän tulisi suorittaa yksi looginen vaihe ja olla turvallista suorittaa uudelleen ilman datan vioittumista. Idempotentit tehtävät varmistavat, että uudelleenyritykset eivät tuota epäjohdonmukaisia tuloksia.Käytä "lisää tai korvaa" -malleja. Kirjoita väliaikaisiin tiedostoihin ennen tulosten sitomista. Jaa suuret skriptit useisiin tehtäviin.
Käytä kuvaavia tunnuksia ja dokumentaatiotaSelkeät nimet ja dokumentaatio parantavat luettavuutta ja ylläpidettävyyttä sekä koodissa että Airflow-käyttöliittymässä.Käytä merkityksellisiä DAG-tunnuksia ja tehtävätunnuksia. Lisää dokumentaatio käyttämällä dag.doc_md tai task.doc_md. Kohdista nimet liiketoimintalogiikan mukaisesti.
Hyödynnä Airflown ominaisuuksiaKäytä Airflowin sisäänrakennettuja ominaisuuksia viestintään, tunnistetietojen käsittelyyn ja putkien koordinointiin sen sijaan, että käyttäisit mukautettua logiikkaa.Käytä XComia pienen datan jakamiseen. Käytä muuttujia ja yhteyksiä konfigurointiin ja salaisuuksiin. Käytä sisäänrakennettuja operaattoreita ja koukkuja aina kun mahdollista.
Testaa ja versionhallitse DAG-koodiDAG:t ovat koodia ja niitä tulisi ylläpitää asianmukaisia ohjelmistoinsinöörin käytäntöjä käyttäen: versionhallinta, testaus ja CI/CD.Tallenna DAGit Git-repositorioon. Kirjoita testit omille operaatioille ja logiikalle. Käytä paikallisia/testiympäristöjä ennen käyttöönottoa tuotannossa.
Vältä aikatauluttajan ylikuormittamistaSuuret määrät DAGeja tai raskaat laskennat DAG-tiedostoissa voivat hidastaa ajastinta. DAGien tulisi olla kevyitä tulkittavia.Seuraa ajastimen suorituskykyä. Jaa massiiviset DAG:t pienempiin. Vältä API-kutsuja tai raskasta laskentaa DAGin tuonnin aikana.
Määrittele selkeä virheidenhallintastrategiaSuunnittele, miten virheet pitäisi käsitellä. Kaikkia virheitä ei pitäisi yrittää uudelleen, ja pitkään kestävät tehtävät voivat vaatia palvelutasosopimuksia tai hälytyksiä.Käytä uudelleenyrityksiä vain väliaikaisissa virheissä. Käytä sensoreita ja liipaisimia tapahtumapohjaisiin riippuvuuksiin. Aseta palvelutasosopimukset (SLA) pitkiä tai kriittisiä tehtäviä varten.

Esimerkki: Yksinkertainen Airflow DAG

Mikään ei vahvista käsitteitä paremmin kuin esimerkki. Käydään läpi yksinkertainen Airflow DAG -koodi ja selitetään sen osat. Tämä esimerkki luo pienen työnkulun, jossa on kaksi tehtävää peräkkäin:

from datetime import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator

# Define the DAG and its schedule
with DAG(
    dag_id="example_dag",
    description="A simple example DAG",
    start_date=datetime(2025, 1, 1),
    schedule_interval="@daily",  # runs daily
    catchup=False
) as dag:
    # Task 1: Print current date
    task1 = BashOperator(
        task_id="print_date",
        bash_command="date"
    )
    # Task 2: Echo a message
    task2 = BashOperator(
        task_id="echo_hello",
        bash_command="echo 'Hello, Airflow!'"
    )
    # Define dependency: task1 must run before task2
    task1 >> task2

Käydään läpi, mitä täällä tapahtuu:

  • tuodaan tarvittavat luokat DAG (DAG:n määrittämistä varten) ja BashOperator (suorittamaan shell/bash-komentoja tehtävissä). Tuomme myös datetime määrittääksemme DAG:n aloituspäivämäärän.
  • Luomme DAG-olion kontekstinhallinnan avulla (with DAG(…) as dag:). Annamme DAG:lle yksilöllisen ID:n “example_dag” (sen on oltava ainutlaatuinen Airflow-ympäristössä), kuvauksen (valinnainen, auttaa ihmisiä lukemaan), start_date ja schedule_interval. Tässä asetamme sisäänrakennetun schedule_interval-presetin (@daily) ja start_date=datetime(2025,1,1). Olemme myös asettaneet catchup=False estääksemme puuttuvien ajokertojen täyttämisen start_date:stä tähän päivään (haluamme, että se suoritetaan vain tästä lähtien päivittäin). Tämä koko lohko luo DAG:in, jonka Airflow huomioi suorittaakseen sen päivittäin päivän alussa.
  • Määrittelemme sitten kaksi tehtävää DAG-yhteydessä:
  • task1 määritellään käyttäen BashOperatoria suorittamaan bash-komento (date). task_id on “print_date” ja sitä käytetään tämän tehtävän tunnistamiseen käyttöliittymässä ja lokitiedoissa. Kun se suoritetaan, tämä tehtävä tulostaa yksinkertaisesti nykyisen päivämäärän/ajan (tehtävän lokiin).
  • task2 myös käyttää BashOperatoria, jossa task_id=“echo_hello”, ja komento=echo ‘Hello, Airflow!’. Tämä tulostaa mukavan viestin. Nämä tehtävät on tällä hetkellä vain määritelty, niitä ei ole vielä yhdistetty.
  • Viimeinen rivi (task1 >> task2) määrittää riippuvuuden (virran): task1 virtaa task2:een. Tämä tarkoittaa, että tehtävä 1 suoritetaan ja se valmistuu onnistuneesti ennen kuin tehtävä 2 voidaan ottaa huomioon ajastettavaksi suoritusta varten. Graafisesti, DAG-kaaviossa, task1:stä task2:een osoittaa nuoli.

Tässä esimerkissä on muutamia huomionarvoisia seikkoja:

  • Käytimme vain BashOperatoria yksinkertaisuuden vuoksi, mutta olisimme voineet käyttää DAGia, jossa on eri tyyppisiä operaatoreita. Meillä voisi olla PythonOperator kutsumaan Python-funktiota, tai SimpleHttpOperator pingatakseen APIa, ja niin edelleen.
  • Rakenne with DAG(…) as dag: context on yleinen tapa luoda DAG-instanssi. Kaikki sen sisällä luodut tehtävät liitetään automaattisesti kyseiseen DAGiin.
  • catchup=False on parametri, jota käytetään monissa DAGeissa, joilla on start_date menneisyydessä, kun et halua sen suorittuvan kaikille menneille päiville. Jos olisimme jättäneet catchup=True (oletus), ja tänään olisi 10. tammikuuta 2025, Airflow yrittäisi suorittaa DAGin 1., 2., 3. tammikuuta … aina 10. tammikuuta asti, suorittaen ne jääneet päivät jälkikäteen. Poistimme sen käytöstä yksinkertaisuuden vuoksi.
  • Tässä esimerkissä käytetään suhteellista tuontipolkua BashOperatorille. Airflow 2:ssa monet operaattorit siirrettiin airflow.providers-alaisuuteen. Tämä esimerkki on kirjoitettu oletuksella, että kyseiset tarjoajat on asennettu (BashOperator kuuluu itse Airflown ytimeen).

Tätä yksinkertaista esimerkkiä voi helposti laajentaa – voit lisätä lisätehtäviä (ehkä tehdä API-kutsun, sitten ladata tulokset tietokantaan ja lähettää ilmoituksen). Voit myös lisätä monimutkaisempaa logiikkaa (kuten haarautumisen – Airflow tukee if/else-tyyppistä haarautumista käyttämällä esimerkiksi BranchOperatoria).

Kun DAG:si kasvavat suuremmiksi, Airflown käyttöliittymä ja lokitus ovat arvokkaita apuvälineitä sen selvittämiseksi, mitä tapahtuu. Tässä esimerkissä print_date-tehtävän loki sisältäisi tulostetun järjestelmäpäivämäärän, ja echo_hello-tehtävän loki sisältäisi “Hello, Airflow!”. Jos print_date epäonnistuisi (ehkä se ei löytänyt date-komentoa, hypoteettisessa tilanteessa), silloin echo_hello ei koskaan suorittuisi (riippuvuuden vuoksi), ja DAG-ajon tila merkittäisiin epäonnistuneeksi. Tämän jälkeen voisit tarkastella lokia, korjata ongelman ja suorittaa uudelleen kyseisen tehtävän tai koko DAGin.

Yleiset käyttötapaukset Airflowlle

Alla on jäsennelty yhteenveto yleisistä Apache Airflow -käyttötapauksista. Taulukko korostaa, mitä kukin käyttötapaus sisältää ja kuinka Airflow tuo lisäarvoa kyseisessä yhteydessä.

KäyttötapausKuvaus (Mitä se sisältää ja tyypilliset vaiheet)Miten Airflow auttaa/edut
ETL/ELT-tietoputketTietojen siirtäminen useista lähteistä tietovarastoon tai datalakeen käyttämällä ETL- (Extract–Transform–Load) tai ELT-malleja.DAGit hallitsevat tiedon poiminnan → muunnoksen → latauksen oikeassa järjestyksessä. Airflow integroituu monien tietokantojen ja tallennusjärjestelmien kanssa. Jos vaihe epäonnistuu (esim. API ei toimi), seuraavat tehtävät pysäytetään ja hälytyksiä voidaan laukaista, mikä parantaa luotettavuutta erä- ja inkrementaalisynkronoinneissa.
Tietovarastointi ja BI-raportointiAnalytiikkatietojen valmistelu ja päivittäminen, joita käytetään kojelaudoissa ja raporteissa.Aikatauluttaa päivittäisiä tai toistuvia tehtäviä, jotta raportit suoritetaan aina tuoreiden tietojen perusteella. Koordinoi SQL-työkuormia, laatutarkastuksia ja raportointivaiheita. Tarjoaa valvontaa ja ilmoituksia, jotta virheet (esim. rikki menneet agregoinnit) ovat näkyvissä sen sijaan, että ne salaa vääristäisivät BI-tuloksia.
Koneoppimisen PutketKoneoppimisen end-to-end-työnkulkujen automatisointi datan valmistelusta käyttöönottovaiheeseen.Edustaa jokaista koneoppimisen vaihetta tehtävänä DAG:ssa ja varmistaa oikean suoritusjärjestyksen. Voi säilyttää artefakteja vaiheiden välillä (esikäsitelty data, mallin binääritiedostot). Integroituu koneoppimisen kehysjärjestelmiin ja Kubernetes-operaattoreihin sekä mahdollistaa aikataulutetun uudelleenkoulutuksen ja kokeilujen orkestroinnin hiljaisempina aikoina.
Datalaadun tarkistukset ja validointiSuoritetaan automaattisia tarkistuksia varmistaakseen, että tiedot ovat täydellisiä, johdonmukaisia ja luotettavia.Aikatauluttaa toistuvia tietojen laadun DAG:eja (päivittäin/viikoittain). Koordinoi tarkistuksia tietokantojen ja QA-skriptien välillä, hälyttää tiimejä poikkeamista ja voi käynnistää jälkijohdannaisia korjaustoimia osana tietojen luotettavuuden hallintaa.
Transaktionaalisten tietokantojen ylläpito ja varmuuskopiointiRutiinioperaatioiden automatisointi tuotantotietokannoille ja infrastruktuurille.Keskittää ylläpitotehtävien aikataulutuksen ja seurannan. Varmistaa, että varmuuskopiot ja ylläpitotoimet suoritetaan määriteltyinä aikoina johdonmukaisesti, vähentää manuaalista työtä ja inhimillisiä virheitä sekä tarjoaa lokit/historian, jotta tiimit voivat varmistaa, että kriittiset ylläpitotehtävät on suoritettu onnistuneesti.
Integraatio/Työnkulun automaatioLiiketoiminta- tai järjestelmätyönkulkujen orkestrointi, jotka kattavat useita palveluja ja API-rajapintoja.Toimii joustavana "liimakerroksena", joka yhdistää palvelut. DAG:t koodaavat monimutkaista haarautumista ja ehtologista logiikkaa. Operaattorit ja Python-tehtävät mahdollistavat mukautetut integraatiot. Tarjoaa keskitetyn paikan hallita, valvoa ja yrittää uudelleen liiketoimintaprosessin vaiheita sen sijaan, että automaatiologiikka levitettäisiin satunnaisiin skripteihin ja työkaluihin.

Milloin EI tule käyttää Airflow'ta

Vaikka Airflow on tehokas, se ei ole oikea työkalu joka tilanteeseen. Sen rajoitusten ymmärtäminen auttaa valitsemaan oikean orkestrointitavan:

  • Reaaliaikaiset tai jatkuvat työkuormat: Airflow on eräajo-ohjelmisto, jolla on selkeä alku ja loppu. Se ei sovi pitkäkestoisiin, tapahtumapohjaisiin tai jatkuviin työkuormiin. Jos otat vastaan jatkuvia tapahtumavirtoja (käyttäjän klikkaukset, IoT-antureiden tiedot jne.) ja tarvitset niiden käsittelyä erittäin pienellä viiveellä reaaliajassa, Airflow ei ole paras valinta.
  • Korkeataajuuksiset tai monet lyhyet tehtävät: Tämä on toinen tapaus, jossa Airflow ei välttämättä toimi, tai ainakin ei tehokkaasti. Airflow-tehtävillä on jonkin verran ylikuormitusta (esim. tietokannan seurannassa), joten jos sinun täytyy käynnistää jotain muutaman sekunnin välein tai sinulla on tuhansia pieniä tehtäviä, Airflow ei välttämättä skaalaudu hyvin.
  • Puhdas tapahtumapohjainen työnkulku: Tämä on samanlainen kuin suoratoistotapaus, mutta jollekin, joka pitäisi laukaista tapahtumasta. &ldquo>Aina kun tapahtuma X tapahtuu, tee Y” on täysin hyväksyttävä käyttötapaus Airflow'lle, mutta jos ainoa asia, joka pitäisi laukaista, on tapahtuma (esim. &ldquo>aikaan, jolloin tiedosto saapuu S3-kaukaloon, tee X”), niin Airflow ei ole tässä kevyin ratkaisu. Airflow käyttää yleensä sensoreita (esim. S3KeySensor) “tunnistamaan” tiedostojen/tapahtumien läsnäolon. Sensoreilla on haittapuolia, sillä ne perustuvat kyselyyn. Sensorien ongelmiin kuuluu olemassa olevien tiedostojen laukaisu eikä välttämättä reagointi tapahtumiin (esim. ne kysyvät tietyin välein).

Lyhyesti sanottuna, Airflow sopii työnkuluille, jotka ovat jaksottaisia, eräajoihin perustuvia tai monimutkaisia määritellä ja hallita. Se ei välttämättä sovi, jos käyttötapauksesi vaatii reaaliaikaista tai jatkuvaa käsittelyä, erittäin tiheästi toistuvia tehtäviä tai hyvin yksinkertaisia työnkulkuja, jotka eivät tarvitse Airflown ylimääräistä kuormaa. Tällöin kannattaa ehkä tutkia muita vaihtoehtoja tai yksinkertaistaa ratkaisua.

Vaihtoehtoja Airflow'lle

Työnkulkujen orkestroinnin ala on kasvanut räjähdysmäisesti viime vuosina, ja vaikka Airflow on johtava, on olemassa useita vaihtoehtoisia työkaluja, jotka kannattaa tuntea:

Työkalu/PalveluYhteenvetoViite
LuigiAvoimen lähdekoodin Python-työnkulun ajastin, jonka on luonut Spotify. Hyvä eräprosesseja rakennettaessa, joissa tehtävät ja riippuvuudet määritellään koodissa. Yksinkertaisempi arkkitehtuuri ja kevyempi kuin Airflow, mutta ekosysteemi on pienempi ja valmiita integraatioita on vähemmän.Luigi-dokumentaatio
PrefektiPython-pohjainen orkestrointikehys, joka on sijoitettu modernimpana ja kehittäjäystävällisempänä vaihtoehtona Airflow'lle. Käyttää Flows- ja Tasks-konsepteja, tarjoaa ajoituksen, uudelleenyrittämiset ja havainnoitavuuden. Voidaan ajaa täysin avoimen lähdekoodin ratkaisuna tai Prefect Cloudin kanssa isännöidyn käyttöliittymän ja hallintatason tarjoamiseksi.Täydellinen verkkosivusto, täydelliset asiakirjat
DagsterTietojen orkestroija, joka keskittyy ohjelmistopohjaisiin resursseihin ja tietoisesti hallittuihin tietoputkiin. Korostaa tyyppiturvallisuutta, testauksia ja kehitystyön prosesseja. Erinomainen valinta tiimeille, jotka arvostavat tietojen alkuperää, laatua ja modernia insinöörityötä.Dagsterin verkkosivusto Dagsterin dokumentaatio
KedroPython-kehys toistettavien, helposti ylläpidettävien data- ja ML-putkien rakentamiseen. Keskittyy projektin rungon luomiseen, modulaarisiin putkiin ja parhaisiin käytäntöihin. Käytetään usein yhdessä orkestroijan, kuten Airflow'n, kanssa sen korvaamisen sijaan.Kedro-verkkosivusto Kedro-dokumentaatio
Argo-työnkulutKubernetes-alkuperäinen työnkulkujen moottori, joka on toteutettu CRD:nä. Jokainen vaihe suoritetaan kontissa, mikä tekee siitä ihanteellisen pilvi-alkuperäisille eräajotehtäville, CI/CD:lle ja ML-putkistoille Kubernetes-painotteisissa ympäristöissä.Argo Workflows -verkkosivusto
Mage AIModerni dataputkityökalu ETL-, suoratoisto- ja ML-putkien rakentamiseen, suorittamiseen ja hallintaan muistikirjatyyppisellä, visuaalisella käyttöliittymällä. Keskittyy kehittäjäkokemukseen ja nopeaan iterointiin.Mage AI -verkkosivusto
KestraAvoimen lähdekoodin, tapahtumapohjainen orkestrointialusta, joka käyttää deklaratiivisia YAML-pohjaisia työnkulkuja. Suunniteltu skaalautuvaan, ajoitettuun ja tapahtumapohjaiseen data- ja prosessien orkestrointiin vahvalla liitännäisten ekosysteemillä.Kestra-verkkosivusto Kestra-dokumentit

Airflow ei ole ainoa vaihtoehto, ja paras valinta riippuu käyttötapauksestasi. Luigi, Prefect ja Dagster mainitaan usein pääasiallisina muina avoimen lähdekoodin vaihtoehtoina samassa tilassa (Python-pohjaiset työnkulkujen orkestroijat). Jos Airflow’n vanhentunut käyttöliittymä tai muut rajoitukset tuntuvat hankalilta, sinun kannattaa harkita näiden arvioimista. Prefect pyrkii olemaan "parempi" tai "yksinkertaisempi" versio Airflow’sta, Dagster puolestaan yrittää olla rakenteellisempi orkestroija, jossa korostetaan dataomaisuuksia, ja Luigi on yksinkertaisempi edeltäjä Airflow’sta. Toisaalta, jos käyttötapauksesi poikkeaa merkittävästi (esimerkiksi reaaliaikainen suoratoisto tai täysin pilvipohjainen), et ehkä käytä Airflow’ta lainkaan ja saatat harkita suoraan suoratoistoalustoja tai hallittuja orkestrointipalveluja.

Lopulliset ajatukset

Apache Airflow on avoimen lähdekoodin alusta monimutkaisten laskennallisten työnkulkujen ja datankäsittelyputkien orkestrointiin. Alun perin Airbnbssä kehitetty se on saavuttanut merkittävää suosiota data-alan insinöörien ja koneoppimisyhteisöjen keskuudessa. Airflown komponentteja ovat ajastin (scheduler), suorittaja (executor), työntekijät, metatietokanta ja verkkopohjainen käyttöliittymä. Tämä mahdollistaa tiimeille tuotantovalmiiden ETL-, MLOps- ja infrastruktuuriputkien helpon suorittamisen ja ylläpidon. Airflown DAG (Directed Acyclic Graph) -abstraktio mahdollistaa työnkulkujen tekemisen selkeiksi, testattaviksi ja ylläpidettäviksi ajan kuluessa. Alustan yhteisön rakentamien operaattoreiden ja tarjoajien ekosysteemi yksinkertaistaa myös työnkulkujen orkestrointia, joka riippuu mistä tahansa teknologiasta tai työkalusta.

Se ei kuitenkaan ole yhden koon sopiva ratkaisu. Se toimii parhaiten erä- tai mikroeräputkistojen kanssa, ja käyttäjien on oltava mukautuneita Pythonin käyttöön. Suoratoisto- tai korkean taajuuden työnkuluille on olemassa muita, Airflow'ta paremmin soveltuvia ratkaisuja. Data-analyytikoille tai tiimeille, jotka haluavat kirjoittaa deklaratiivisia putkia, Airflow’n vaihtoehtoiset työkalut saattavat olla harkitsemisen arvoisia.

Airflowia kehitetään edelleen aktiivisesti, ja siihen lisätään jatkuvasti uusia ominaisuuksia, kuten tapahtumaperusteista ajastusta, tietosarjoja ja omaisuuseriä. Tässä oppaassa esitellyt käsitteet ja parhaat käytännöt auttavat sinua ymmärtämään työnkulkujen orkestroinnin toimintaa ja milloin Airflowa tulisi käyttää (tai ei käyttää), taustastasi riippumatta. Toivottavasti tämä toimii lähtökohtana tutkia tätä rikasta universumia tarkemmin.

Lähteet

  • Apache Airflow
  • Mitä Airflow on?
  • Apache Airflow: Käyttötapaukset, Arkkitehtuuri ja 6 Vinkkiä Menestykseen
  • Aloittelijan johdatus Airflow’hun Dockerin kanssa — Dataputket pilvessä (I)
  • 8 vaihtoehtoa Airflow'lle – käyttötapaukset
  • Arkkitehtuurin yleiskatsaus
  • Aikatauluttaja

Kiitos, että opiskelet Linux-Console.net-yhteisön kanssa.