I Apache Airflow er valg af executor afgørende for at sikre effektiv og skalerbar udførelse af arbejdsopgaver. To af de mest anvendte eksekutorvarianter er KubernetesExecutor og DaskExecutor, der begge tilbyder forskellige fordele og udfordringer afhængigt af de specifikke krav og den infrastruktur, der anvendes.
KubernetesExecutor giver mulighed for at køre opgaver i et Kubernetes-miljø og udnytter fordelene ved Kubernetes' dynamiske og skalerbare natur. Denne executor kan dynamisk tildele ressourcer baseret på opgavernes krav, hvilket gør det muligt at skalere opgaver hurtigt og effektivt. Når opgaverne er udført, bliver ressourcerne frigivet, hvilket kan være en stor fordel i miljøer med varierende belastning. På den positive side kan KubernetesExecutor være omkostningseffektiv, da den dynamisk tilpasser sig arbejdsbelastningen, hvilket potentielt sparer penge, hvis opsætningen er korrekt optimeret.
Imidlertid er der også udfordringer forbundet med KubernetesExecutor. For det første er Kubernetes meget kompleks, hvilket betyder, at der er en stejl læringskurve for teams, der ikke allerede er fortrolige med platformen. Desuden kan overheaden ved at oprette og nedlægge pods føre til øgede omkostninger, især hvis mange opgaver udføres hurtigt og ofte. Yderligere kan vedvarende datahåndtering være vanskelig, da pods i Kubernetes er flygtige og ikke nødvendigvis er designet til at håndtere langvarige datalagring. Derudover kan netværks- og opstartsforsinkelser opstå, da containerne skal oprettes og billeder skal hentes fra registreringsdatabasen, hvilket kan forsinke udførelsen af opgaver.
DaskExecutor, på den anden side, er et mere fleksibelt alternativ, der benytter Dask, et bibliotek til parallelt og distribueret beregningsarbejde. Dask er kendt for at kunne håndtere datavidenskab og maskinlæringsopgaver, da det kan distribuere beregningstunge opgaver over flere maskiner. DaskExecutor kan være en ideel løsning for teams, der allerede bruger Dask til distribueret beregning og ønsker at integrere det med Airflow for at udnytte de samme ressourcer. Fordelene ved DaskExecutor inkluderer fleksibiliteten til at køre både på en enkelt maskine og på en distribueret klynge. Det er især nyttigt i dataintensive arbejdsprocesser, der kræver parallelle beregninger.
Men DaskExecutor introducerer også visse udfordringer. For det første kræver opsætningen af en Dask-klynge en betydelig teknisk viden, og den operationelle overhead kan være høj, især i produktionsmiljøer. Derudover kan det være vanskeligt at sikre, at alle Dask-arbejdere har den korrekte og konsistente miljøopsætning og afhængigheder, hvilket kan føre til problemer med afhængighedsstyring, især når opgaverne er heterogene. Der kan også opstå ressourcekonflikter, hvis Dask-klyngen bruges til andre beregningsmæssige opgaver, hvilket kan påvirke ydeevnen negativt.
Kubernetes Local Executor, som kombinerer de to eksekutortyper, giver endnu en mulighed. Denne hybrid-eksecutor giver mulighed for at køre opgaver enten lokalt med Local Executor eller i et Kubernetes-miljø med Kubernetes Executor, afhængigt af opgavernes specifikationer. Denne tilgang er nyttig, når man udvikler og tester Airflow DAGs lokalt, hvilket gør det lettere at fejlfinde og iterere hurtigt på nye funktioner. Den er også velegnet til produktion, når visse opgaver kræver højere ressourcer eller skal køres i en skalerbar og fejltolerant infrastruktur.
Mens Kubernetes Local Executor tilbyder fleksibilitet, skal man være opmærksom på, at den kan lægge ekstra pres på databasen og føre til samtidige opgaver, der potentielt kan forårsage race conditions, medmindre der implementeres synkronisering. Desuden er det nødvendigt at sikre tilstrækkelig CPU- og hukommelsesressourcer til de Kubernetes-pods, som denne executor kan oprette.
Uanset hvilken executor man vælger, er det vigtigt at forstå, hvordan Airflow-scheduleren fungerer. Schedulerens rolle er at kontrollere, hvilke opgaver der skal køres baseret på deres afhængigheder og tilstand. Dette gør det muligt at køre mere komplekse arbejdsforløb med betinget udførelse. Schedulerens kontrol over dynamisk opgavestyring adskiller sig fra traditionelle cron-opsætninger, da den kontinuerligt kontrollerer, hvad der skal køres, og tager hensyn til opgavernes afhængigheder, hvilket skaber en mere fleksibel og dynamisk opgaveudførelse.
Der er flere faktorer, der er afgørende for at vælge den rette executor i et givet setup. Først og fremmest skal man overveje omkostningerne ved at opretholde og administrere en klynge som Kubernetes eller Dask, samt kompleksiteten af de opgaver, der skal udføres. Hvis opgaverne er letvægts eller kræver hurtige, hyppige ændringer, kan en mere simpel executor som Local Executor være passende. Hvis arbejdsbelastningen er tungere og kræver fleksibilitet i ressourceallokeringen, kan KubernetesExecutor eller DaskExecutor være mere ideelle. Derudover skal teams, der implementerer disse løsninger, være opmærksomme på den operationelle overhead og den nødvendige ekspertise til at sikre en stabil og effektiv drift.
Hvordan vælge den bedste serviceudbyder og udviklingsmiljø for Airflow-deployment
Når man overvejer at implementere Airflow, kan en af de første beslutninger være, om man skal vælge en ekstern serviceudbyder eller selv stå for driften af systemet. Hvis du allerede har investeret i compute-infrastruktur, kan det være fristende at rulle dit eget system ud på bare metal. Men i mange tilfælde vil en serviceudbyder kunne tilbyde en billigere og mere stabil løsning. Dette gælder især, hvis du ønsker at slippe for det tunge ansvar, der følger med at opretholde og administrere både infrastrukturen og softwareoperationerne.
Serviceudbydere kan være en stor hjælp til at reducere både ejendomskompleksiteten og støtteomkostningerne ved at bruge Airflow. De tager sig af al provisioning af underliggende infrastruktur og operationelle opgaver, hvilket gør det muligt for dig at fokusere på selve applikationen. Hvis du er usikker på, hvordan du skal operere din egen infrastruktur, bør du nøje evaluere de udbydere, der er tilgængelige. Det er vigtigt at forstå, at udbyderne ofte træffer meget bestemte valg om, hvordan Airflow skal opereres, og disse valg kan låse dig fast i bestemte udviklingsmetoder og implementeringsmønstre. Det kan gøre det svært, eller endda umuligt, at bruge de nyeste funktioner i Airflow, opgradere visse Python-pakker eller bruge bestemte fællesskabsudbydere.
Når du evaluerer en serviceudbyder, skal du bruge denne viden som grundlag for din beslutning. Sørg for at undersøge deres bedste praksis og de værktøjer, de tilbyder, og overvej om disse passer til din egen arbejdsstil og behov. En grundig research i dette trin kan være det, der bestemmer, om din Airflow-implementering bliver en succes.
Når beslutningen om serviceudbyder er taget, og implementeringen af Airflow er i gang, er det næste skridt at sikre, at udviklerne kan skrive og teste DAGs effektivt. Dette aspekt er ofte overset, men det er essentielt for at opretholde en stabil og effektiv operation. En lokal udviklingsmiljø kan være et af de bedste værktøjer til dette formål, og moderne CI/CD-praksis understøtter idéen om at "fejle hurtigt" – det vil sige, at du skal kunne teste din kode hurtigt lokalt, inden den køres gennem de dyre workflows.
Der findes flere måder at oprette et lokal udviklingsmiljø på for Airflow. To af de mest populære tilgange er Python virtuelle miljøer og Docker Compose. Et virtuelt miljø giver en letvægtsløsning, hvor du opretter et isoleret Python-miljø, som indeholder alle nødvendige Python-pakker. Dette er ideelt til simple projekter og kan hurtigt opsættes. Dog kan det være en udfordring, hvis de afhængige systemer eller biblioteker kolliderer med din Airflow-installation.
Docker Compose er en anden løsning, hvor du kan beskrive hvordan flere containere skal sammensættes i et service-stack. Dette giver dig mulighed for at simulere et distribueret system på din lokale maskine, samtidig med at du holder det isoleret fra operativsystemet. Denne løsning kræver dog lidt mere setup og større lokale ressourcer som CPU og RAM.
Cloud-baserede udviklingsmiljøer er en endnu mere kraftfuld løsning, som giver mulighed for at provisionere og tilpasse service-stacks i en elastisk cloud-infrastruktur. Dette giver stor fleksibilitet og mulighed for at håndtere store arbejdsbelastninger, men kræver typisk en større initial investering og er ikke så portabel som de to andre løsninger.
Når du har valgt den rigtige lokaliserede udviklingsløsning, er det næste skridt at implementere en solid teststrategi for Airflow. Testning er et af de mest omdiskuterede emner i Airflow-verdenen, og mange har forsøgt at påtvinge en dogmatisk tilgang til, hvad der fungerer bedst. Det er vigtigt at forstå, at testning bør handle om at skabe tillid til, at dit system kører pålideligt og forudsigeligt.
Et vigtigt aspekt ved testning er, at den bør udvikles og tilpasses den erfaring, du opnår, når du opererer Airflow. Derfor vil din testplan udvikle sig, som du får mere erfaring med systemet. At teste Airflow involverer generelt at bygge og udgive softwarekomponenter, som derefter testes på systemniveau, før de bliver frigivet til brug for teamet.
Når du tester DAGs, skal du huske, at de er software og derfor bør behandles som sådan. De anbefales at blive testet i flere faser:
-
Røgtest: En automatiseret test, der kontrollerer, at DAGs er veldefinerede og validerede Python-koder. Dette kan også inkludere nogle grundlæggende tjek af DAG-konfigurationen.
-
Enhedstests: Tests af specifikke funktioner, der er blevet skrevet til dine DAGs, især dem der er knyttet til specifikke Python-operatører eller dynamiske funktioner.
-
Funktionelle tests: Tests, der dokumenteres og udføres baseret på en specifik konfiguration, som f.eks. en bestemt datatilstand i en ekstern database. Dette kan være enten automatiseret eller manuelt afhængigt af behovet.
-
Ydelsestests: Tests af, hvor godt systemet performer under specifikke arbejdsbelastninger. Her testes f.eks. CPU- og hukommelsesforbrug, samt hvor hurtigt opgaverne udføres.
Husk, at det er vigtigt at få de tidlige tests til at passere, før du fortsætter med de mere avancerede testniveauer. Med de rigtige teststrategier og et solidt udviklingsmiljø kan du sikre, at dit Airflow-system er stabilt, skalerbart og klar til produktion.
Hvordan fungerer DAG'er i Apache Airflow og deres primære komponenter?
For at navigere til webserveren i Apache Airflow, åbnes en webbrowser, og du skal indtaste følgende URL: http://localhost:8080. Når du gør dette med Airflow-webserveren stadig kørende i terminalen, vil du blive bedt om at logge ind med brugernavn og adgangskode. Brug "admin" som brugernavn og den adgangskode, der er givet i terminalprompten. Når du har gennemført login-processen, vil du blive ført til startskærmen, som bør ligne noget som dette: [Figure 2.6: The DAG home page]. I de følgende kapitler vil vi udforske specifikke detaljer om de vigtige sektioner indenfor Apache Airflow UI-konsollen og vise eksempler på typiske management use cases.
Med Airflow-miljøet oppe og køre, lad os tage et kig på de grundlæggende komponenter i Airflow med et eksempel på en DAG, der allerede er forberedt til dig.
DAG'er i Apache Airflow
DAG'er (Directed Acyclic Graphs) er den primære måde at orkestrere datarørledninger på i Airflow. De er bygget i Python og gør brug af et bredt udvalg af understøttende biblioteker. Når du følger de tidligere trin for at initialisere et lokalt udviklingsmiljø, vil et eksempel som example_dag_basic være blevet indlæst, hvilket vi vil gennemgå i denne sektion. Grundlæggende er en DAG sammensat af opgaver, operatorer og sensorer. Der er også nyere teknikker, der er blevet introduceret over tid, såsom opgavegrupper og deferrable operatorer, som vi også vil dække i dette kapitel.
For at få en visualisering af denne DAG, skal du blot vælge DAG-navnet på webserverens konsol. Du vil initialt blive præsenteret for specifik information om DAG-konfigurationen samt status for de tidligere kørseler. For at se en grafisk repræsentation af denne første DAG-eksempel, skal du vælge "Graph"-muligheden fra listen øverst i DAG-området. Dette vil bringe en grafisk repræsentation af DAG'en frem. Det er vigtigt at bemærke, at denne DAG har tre opgaver, som køres sekventielt. I mere komplekse DAG'er vil der være opgaver, der kører parallelt, og nogle der venter på en specifik trigger. De kan være for komplekse til at visualisere på en simpel måde. Det er altid en god idé at bryde komplekse, monolitiske softwarestrukturer op, hvis det er muligt.
DAG Dekoratorer og definitioner
Det første skridt i enhver Python-fil er at importere de nødvendige biblioteker og støttefunktioner. En Airflow DAG er ikke anderledes. Vi begynder med at importere JSON og Airflow-dekoratorerne:
Ved at importere DAG- og task-dekoratorerne gør vi det lettere at erklære DAG'en end tidligere. Denne ændring fjerner behovet for at erklære funktionen with DAG as, som tidligere var påkrævet. Lad os erklære DAG'en og definere nogle af de nødvendige felter, såsom tidsplan:
I den foregående kodeudsnit erklærer vi tidsintervallet for tidsplanen, startdato, catchup, standardargumenter og et tag. Lad os hurtigt kigge på hver af disse.
Planlægning med Apache Airflow og overgang fra CRON
Tidsplanen kan defineres ved et specifikt datotidspunkt, som Airflow gemmer, eller via CRON-arbejde. Forskellige tidsplanintervaller er angivet i tabellen nedenfor:
| Tidsplaninterval | Beskrivelse |
|---|---|
| @none | Manuel eller en trigger er nødvendig for at køre DAG'en |
| @hourly | Kører ved starten af hver time |
| @daily | Kører hver dag ved midnat |
| @weekly | Kører hver søndag ved midnat |
| @monthly | Kører den første dag i hver måned ved midnat |
| @yearly | Kører den 1. januar ved midnat hvert år |
Startdato og Catchup
Startdatoen erklæres for at definere, hvornår arbejdsstrømmen skal begynde. Hvis startdatoen er i fortiden og catchup er sat til True, vil DAG'en køre så mange gange, som der er dage mellem startdatoen og nuværende tidspunkt. Hvis catchup er False, vil ingen tidligere kørseler blive udført. I eksemplet er catchup sat til False, så Airflow vil kun køre fremtidige jobs.
Standardargumenter
Standardargumenter bruges til at definere standardindstillinger. For eksempel er antallet af retries (forsøg) sat til 2. Dette betyder, at Airflow vil forsøge at køre opgaven to gange, hvis den fejler. Dette er nyttigt, hvis DAG'en for eksempel skal forsøge at oprette forbindelse til en database, der har forbindelsesproblemer.
Opgaver og operatorer i Airflow
Opgaver er de grundlæggende byggeklodser i en DAG. De udføres sekventielt i henhold til, hvordan de er defineret. Opgaver er også den mest grundlæggende enhed af eksekvering i Airflow, og de repræsenterer en enkelt operation eller job, der skal udføres. Opgaver defineres ved hjælp af operatorer, hvor hver operator bestemmer, hvilken type opgave der skal udføres.
Nogle af de mest almindelige typer operatorer i Airflow omfatter:
-
BashOperator: Kører en bash-kommando
-
PythonOperator: Kører en Python-funktion
-
SqlOperator: Udfører en SQL-kommando
-
DockerOperator: Kører en Docker-container
-
HttpOperator: Sender en HTTP-anmodning
Operatorer kan også tilpasses og udvides for at imødekomme specifikke krav, hvilket giver stor fleksibilitet i, hvordan opgaver udføres inden for Airflow DAG'er. Denne designfilosofi gør det muligt at oprette komplekse datarørledninger, der både er forståelige og vedligeholdelsesvenlige.
Opgaverne i vores eksempel
Lad os fortsætte med at definere de tre opgaver, der vil blive udført i denne grundlæggende DAG. Vi starter med en "extract"-opgave. Her er et kodeudsnit fra DAG'en:
I dette første eksempel erklærer vi opgaven extract, som ikke modtager nogen argumenter. Indeni opgaven læser vi en JSON-streng og konverterer den til et Python-dictionary, som derefter returneres som et resultat af opgaven.
Yderligere overvejelser
Det er vigtigt at bemærke, at arbejdet med Airflow DAG'er kan blive komplekst, især når man arbejder med flere samtidige opgaver og afhængigheder. Planlægning og organisering af opgaver er en kritisk del af enhver succesfuld implementering. Når du arbejder med større datarørledninger, kan det være nødvendigt at bruge avancerede funktioner som task grouping og deferrable operators for at sikre, at systemet forbliver effektivt og skalerbart.
Airflow er designet til at være fleksibelt og modulært, hvilket betyder, at du kan tilpasse det til dine specifikke behov. Dette gør det til et fremragende værktøj til at orkestrere datarørledninger i komplekse systemer og miljøer, hvor pålidelighed og fejlhåndtering er essentielle for at sikre, at alle opgaver udføres korrekt.
Hvordan man opbygger tone og tekstur ved hjælp af blæk og markører i tegning
Hvordan Adversitet Kan Blive Din Største Lærer
Hvordan man udnytter det innovative potentiale i digital finansiering ud over kryptovalutaer
Hvordan Man Skriver En Litteraturgennemgang: Metoder og Værktøjer til At Samle Forskning

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский