Zephyrnet-logo

Airflow lokaal uitvoeren met Docker: een technische gids

Datum:

Introductie

Apache Airflow en Docker zijn twee krachtige tools die een revolutie teweeg hebben gebracht in de manier waarop we omgaan met gegevens en software-implementatie. Apache Airflow is een open-sourceplatform waarmee u programmatisch workflows kunt schrijven, plannen en bewaken. Docker daarentegen is een platform waarmee ontwikkelaars applicaties kunnen verpakken in containers: gestandaardiseerde uitvoerbare componenten die applicatiebroncode combineren met de OS-bibliotheken en afhankelijkheden die nodig zijn om die code in elke omgeving uit te voeren.

Airflow lokaal uitvoeren met Docker is om verschillende redenen een geweldig idee. Ten eerste biedt Docker een geïsoleerde en consistente omgeving voor uw Airflow-configuratie, waardoor de kans op problemen als gevolg van verschillen in afhankelijkheden, bibliotheken of zelfs besturingssysteem wordt verkleind. Ten tweede maakt Docker het gemakkelijk om uw Airflow-configuratie te versieren, te distribueren en te repliceren, wat met name handig kan zijn in een teamomgeving of wanneer u van ontwikkeling naar productie gaat.

Uw lokale omgeving instellen

Om aan de slag te gaan, moet de volgende software op uw computer zijn geïnstalleerd:

  • Python (versie 3.6 of later)
  • Docker (versie 20.10.11)
  • Docker Compose (versie 2.2.1)

Het installeren van Python, Docker en Airflow is eenvoudig. Voor Python en Docker kunt u de officiële installatiehandleiding voor uw specifieke besturingssysteem volgen. Voor Airflow kun je het installeren met behulp van pip, het pakketinstallatieprogramma van Python.

Python installeren

Apache Airflow is geschreven in Python, dus u moet Python op uw computer hebben geïnstalleerd. Je kunt het downloaden van de officiële Python-website. Op het moment van schrijven vereist Airflow Python 3.6 of hoger.

Om te controleren of Python is geïnstalleerd en de versie ervan te bekijken, opent u een terminalvenster en typt u:

$ python --version

Installeer Docker

Docker stelt ons in staat om onze Airflow-opstelling te containeriseren. U kunt Docker downloaden van de officiële Docker-website. Kies de versie die geschikt is voor uw besturingssysteem.

Na de installatie kunt u controleren of Docker correct is geïnstalleerd door een terminalvenster te openen en te typen:

$ docker --version

Installeer Docker Compose

Docker Compose is een tool waarmee we Docker-applicaties met meerdere containers kunnen definiëren en beheren, wat onze Airflow-configuratie zal zijn. Het wordt meestal meegeleverd met de Docker-installatie op Windows en Mac, maar moet mogelijk afzonderlijk worden geïnstalleerd op sommige Linux-distributies. U kunt controleren of Docker Compose is geïnstalleerd en de versie bekijken door te typen:

$ docker-compose --version

Als het niet is geïnstalleerd, kunt u de officiële Docker Compose-installatiegids.

Project structuur

Het is een goede gewoonte om alle Airflow-gerelateerde bestanden in een speciale map te bewaren om een ​​schone en georganiseerde projectstructuur te behouden.

Hier is een voorgestelde structuur voor uw project:

my_project/
│
├── airflow/ # Directory for all Airflow-related files
│ ├── dags/ # Directory to store your Airflow DAGs
│ │ ├── dag1.py
│ │ ├── dag2.py
│ │ └── ...
│ │
│ ├── Dockerfile # Dockerfile for building your custom Airflow image
│ ├── docker-compose.yml # Docker Compose file for defining your services
│
└── ... # Other directories and files for your project

In deze structuur:

  • De airflow/ directory is waar u al uw Airflow-gerelateerde bestanden opslaat. Hierdoor blijft uw Airflow-opstelling gescheiden van de rest van uw project, waardoor het gemakkelijker te beheren is.

  • De dags/ map binnen de airflow/ directory is waar u uw Airflow DAG's opslaat. Dit zijn Python-scripts die uw workflows definiëren. In uw Docker Compose-bestand zou u deze map toewijzen aan /usr/local/airflow/dags in uw Airflow-containers.

  • De Dockerfile in de airflow/ directory wordt gebruikt om uw aangepaste Airflow Docker-image te bouwen. Dit bestand zou de instructies bevatten om de Airflow-database te initialiseren en uw custom airflow.cfg bestand in de afbeelding.

  • De docker-compose.yml bestand in de airflow/ directory is waar u uw services definieert (webserver, planner, database, etc.) voor Docker Compose.

Uw Airflow-Docker-configuratie personaliseren

Voordat u Airflow kunt uitvoeren, moet u de database initialiseren. In een Dockerized setup, de initialisatie van de Airflow-database en de aanpassing van de airflow.cfg bestand kan worden gedaan in de Docker-container, niet op de hostcomputer.

Om dit te doen, kunt u een Dockerfile gebruiken om een ​​aangepaste Airflow Docker-image te bouwen. In deze Dockerfile kunt u de opdrachten opgeven om de Airflow-database te initialiseren en de airflow.cfg bestand.

Hier is een voorbeeld Dockerfile:


FROM apache/airflow:latest ENV AIRFLOW_HOME=/usr/local/airflow USER root RUN mkdir -p ${AIRFLOW_HOME} && chown -R airflow: ${AIRFLOW_HOME USER airflow RUN airflow db init RUN echo "[core]" > ${AIRFLOW_HOME}/airflow.cfg && echo "airflow_home = ${AIRFLOW_HOME}" >> ${AIRFLOW_HOME}/airflow.cfg && echo "executor = LocalExecutor" >> ${AIRFLOW_HOME}/airflow.cfg && echo "" >> ${AIRFLOW_HOME}/airflow.cfg && echo "[webserver]" > ${AIRFLOW_HOME}/airflow.cfg && echo "base_url = http://localhost:8080" >> ${AIRFLOW_HOME}/airflow.cfg && echo "web_server_host = 0.0.0.0" >> ${AIRFLOW_HOME}/airflow.cfg && echo "web_server_port = 8080" >> ${AIRFLOW_HOME}/airflow.cfg{AIRFLOW_HOME}/airflow.cfg

In deze Dockerfile stellen we eerst de AIRFLOW_HOME omgevingsvariabele to /usr/local/airflow. Vervolgens schakelen we over naar de rootgebruiker met behulp van de USER root richtlijn. Dit is nodig omdat we root-rechten nodig hebben om een ​​directory aan te maken en het eigendom ervan te wijzigen.

Vervolgens maken we het AIRFLOW_HOME directory en verander het eigendom in de airflow gebruiker. Dit gebeurt aan de hand van de RUN mkdir -p ${AIRFLOW_HOME} && chown -R airflow: ${AIRFLOW_HOME} opdracht. De -p optie in het mkdir opdracht zorgt ervoor dat de map wordt gemaakt als deze niet bestaat.

Daarna schakelen we terug naar de airflow gebruiker die de USER airflow richtlijn. Dit is om veiligheidsredenen een goede gewoonte, aangezien het uitvoeren van containers als de rootgebruiker veiligheidsrisico's kan opleveren.

Vervolgens initialiseren we de Airflow-database met behulp van de RUN airflow db init opdracht.

Tot slot passen we de airflow.cfg bestand rechtstreeks in de Docker-container. Dit gebeurt aan de hand van de RUN richtlijn met een reeks van echo commando's, die onze aangepaste instellingen toevoegen aan het airflow.cfg bestand. Deze aanpak stelt ons in staat om de airflow.cfg zonder dat u het bestand op de hostcomputer hoeft te maken en aan te passen.

In deze Dockerfile gebruiken we de > operator in plaats van de >> operator wanneer we voor het eerst schrijven naar de airflow.cfg het dossier. De > operator overschrijft het bestand met de opgegeven tekst, terwijl de >> operator voegt de tekst toe aan het bestand. Door het bestand te overschrijven, zorgen we ervoor dat elke sectie slechts één keer wordt gedeclareerd.

Hier is een voorbeeld van hoe uw airflow.cfg geconfigureerde secties in het bestand gaan er als volgt uitzien:

[core] airflow_home = ~/airflow executor = LocalExecutor [webserver] base_url = http://localhost:8080 web_server_host = 0.0.0.0 web_server_port = 8080

Nadat u dit Docker-bestand hebt gemaakt, kunt u uw aangepaste Airflow Docker-image bouwen met behulp van de docker build commando. Hier is een voorbeeld:

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

$ docker build -t my-airflow-image .

Docker Compose

Docker Compose is een tool waarmee u Docker-applicaties met meerdere containers kunt definiëren en beheren. Het gebruikt een YAML-bestand om de services, netwerken en volumes van uw toepassing te specificeren en brengt vervolgens al deze componenten in één enkele opdracht naar voren.

Het Docker Compose-bestand configureren

In het Docker Compose-bestand definieert u de services van uw toepassing. Voor Airflow kan een standaard Docker Compose-bestand services voor de webserver, planner en database bevatten. Dit bestand moet zich in dezelfde map bevinden als uw Dockerfile.

Hier is een voorbeeld:

version: "3"
services: webserver: build: context: . dockerfile: Dockerfile command: webserver volumes: - ./dags:/usr/local/airflow/dags ports: - "8080:8080" scheduler: build: context: . dockerfile: Dockerfile command: scheduler volumes: - ./dags:/usr/local/airflow/dags postgres: image: postgres:latest environment: - POSTGRES_USER=airflow - POSTGRES_PASSWORD=airflow - POSTGRES_DB=airflow

In dit Docker Compose-bestand definiëren we drie services: webserver, scheduler en postgres. De build richtlijn vertelt Docker Compose om een ​​afbeelding te bouwen met behulp van de Dockerfile in de huidige map. De volumes richtlijn brengt de ./dags directory op uw hostcomputer naar /usr/local/airflow/dags in de Docker-container, zodat u uw DAG's op uw hostcomputer kunt opslaan. De ports richtlijn wijst poort 8080 op uw hostmachine toe aan poort 8080 in de Docker-container, waardoor u toegang krijgt tot de Airflow-webserver op http://localhost:8080.

De postgres dienst maakt gebruik van de postgres:latest image en stelt omgevingsvariabelen rechtstreeks in het Docker Compose-bestand in. Deze omgevingsvariabelen worden gebruikt om de Postgres-database te configureren.

Lancering van Airflow-services

Om uw Airflow-services te starten, kunt u de docker-compose up commando. Het toevoegen van de -d flag voert de services op de achtergrond uit. Hier is het commando:

$ docker-compose up -d

Met deze opdracht worden alle services gestart die zijn gedefinieerd in uw Docker Compose-bestand. U kunt de status van uw services controleren met behulp van de docker-compose ps opdracht.

Een gebruiker aanmaken in Airflow

Nadat u uw Docker-opstelling met Airflow hebt ingesteld, moet u een gebruiker maken om toegang te krijgen tot de Airflow-webinterface. Dit kan worden gedaan door een opdracht uit te voeren in de lopende Docker-container.

Eerst moet u de container-ID van uw draaiende Airflow-webserver vinden. U kunt dit doen door de volgende opdracht uit te voeren:

$ docker ps

Met deze opdracht worden alle actieve Docker-containers en hun details weergegeven. Zoek naar de container waarop de Airflow-webserver draait en noteer de container-ID.

Vervolgens kunt u een nieuwe gebruiker in Airflow maken door de volgende opdracht uit te voeren:

$ docker exec -it <container-id> airflow users create --username admin --password admin --firstname First --lastname Last --role Admin --email [email protected]

vervangen <container-id> met het container-ID dat u eerder hebt genoteerd. Deze opdracht maakt een nieuwe gebruiker aan met gebruikersnaam 'admin', wachtwoord 'admin', voornaam 'First', achternaam 'Last', rol 'Admin' en e-mail '[e-mail beveiligd]'. U moet deze waarden vervangen door uw eigen waarden.

Nadat u deze opdracht hebt uitgevoerd, zou u zich moeten kunnen aanmelden bij de Airflow-webinterface met de inloggegevens van de gebruiker die u zojuist hebt gemaakt.

Optimalisaties en toepassingen

Prestaties verbeteren

Het optimaliseren van uw Airflow en Docker-configuratie kan de prestaties van uw datapijplijn aanzienlijk verbeteren. Overweeg voor Airflow het gebruik van LocalExecutor voor parallelle taakuitvoering en het verfijnen van uw DAG's om onnodige taken te verminderen. Zorg er voor Docker voor dat uw afbeeldingen zo licht mogelijk zijn en gebruik de ingebouwde resourcebeheerfuncties van Docker om het CPU- en geheugengebruik te beperken.

U kunt bijvoorbeeld het geheugengebruik van uw Docker-containers beperken door de mem_limit parameter toe aan uw Docker Compose-bestand:

services: webserver: build: context: . dockerfile: Dockerfile command: webserver volumes: - ./dags:/usr/local/airflow/dags ports: - "8080:8080" mem_limit: 512m

Naast het geheugen kunt u ook de CPU-resources beheren die een container kan gebruiken door de cpu_shares parameter:

services: webserver: build: context: . dockerfile: Dockerfile command: webserver volumes: - ./dags:/usr/local/airflow/dags ports: - "8080:8080" mem_limit: 512m
    cpu_shares: 512

De cpu_shares Met de parameter kunt u de CPU-resources beheren die een container kan gebruiken. De waarde is een relatief gewicht ten opzichte van andere containers. Als de ene container bijvoorbeeld de waarde 1024 heeft en de andere de waarde 512, krijgt de eerste container twee keer zoveel CPU-tijd als de tweede.

Deze eenvoudige toevoeging kan een grote invloed hebben op de prestaties van uw systeem, en zorgt ervoor dat uw resources efficiënt worden gebruikt en dat uw datapijplijn soepel verloopt. Het zijn deze kleine tweaks en optimalisaties die op de lange termijn een groot verschil kunnen maken, waardoor een goede datapijplijn verandert in een geweldige datapijplijn.

Wanneer en waarom ik Airflow gebruik met Docker

Tijdens mijn reis als Data Engineer heb ik de kans gehad om aan verschillende complexe projecten te werken. Een van die projecten betrof het creëren van een datapijplijn om grote hoeveelheden data te verwerken en te analyseren. De complexiteit van het project was ontmoedigend en de behoefte aan een tool die het proces zou kunnen vereenvoudigen was duidelijk. Toen ontdekte ik Airflow en Docker.

Airflow, met zijn robuuste plannings- en orkestratiemogelijkheden, paste perfect bij onze behoeften aan datapijplijnen. De echte game-wisselaar was echter Docker. Met Docker konden we onze Airflow-opstelling in containers plaatsen, wat een hele reeks voordelen met zich meebracht.

Ten eerste maakte Docker het ongelooflijk eenvoudig om met mijn team samen te werken. We konden onze Docker-images delen en ervoor zorgen dat iedereen in dezelfde omgeving werkte. Dit elimineerde het probleem "maar het werkt op mijn machine" en maakte ons ontwikkelingsproces veel soepeler.

Ten tweede stelde Docker ons in staat om onze Airflow-pijpleidingen gemakkelijk op onze lokale machines te testen. We zouden onze productieomgeving lokaal kunnen repliceren, onze pijplijnen kunnen runnen en eventuele problemen vroeg in het ontwikkelingsproces kunnen opsporen. Dit was een aanzienlijke verbetering ten opzichte van onze vorige workflow, waar testen een omslachtig proces was.

Ten slotte, toen het tijd was om onze pijplijnen in productie te nemen, zorgde Docker ervoor dat het proces naadloos verliep. We moesten gewoon onze Docker-image naar de productieserver pushen en uitvoeren. U hoefde zich geen zorgen te maken over het installeren van afhankelijkheden of het configureren van de server. Alles wat we nodig hadden, was verpakt in onze Docker-image.

Het gebruik van Airflow met Docker was een transformerende ervaring. Het maakte niet alleen ons ontwikkelingsproces efficiënter, maar stelde ons ook in staat om een ​​datapijplijn van hoge kwaliteit te leveren die voldeed aan de behoeften van ons project. Ik zou deze opstelling ten zeerste aanbevelen aan elke ontwikkelaar of elk team dat werkt aan datapijplijnprojecten.

Casestudy: Quizlet's werkstroom voor gegevensanalyse

De adoptie van Quizlet van Apache Airflow heeft een revolutie teweeggebracht in hun analyse-ETL's. Aanvankelijk geïmplementeerd op een enkele server, heeft Airflow hun gegevensextractie uit Google BigQuery gestroomlijnd, analyses uitgevoerd in SQL en resultaten opgeslagen voor rapporten en dashboards. Het succes van deze implementatie heeft geleid tot een uitbreiding van taken, waaronder training van machine learning-classificaties, berekening van zoekindexen, A/B-testen en gebruikerstargeting.

In de toekomst is Quizlet van plan om hun Airflow-implementatie te verbeteren door de metadatadatabase te migreren naar een speciale instantie, te integreren met Google Cloud Storage en over te schakelen naar een gedistribueerd wachtrijsysteem. In wezen is Apache Airflow een game-changer geweest voor Quizlet, waardoor ze meer kunnen doen en hun bedrijf vooruit kunnen helpen.

Conclusie

In dit artikel hebben we onderzocht hoe u Airflow lokaal kunt uitvoeren met behulp van Docker. We hebben alles behandeld, van het opzetten van uw lokale omgeving en het installeren van de benodigde software tot het implementeren van uw Airflow-services met Docker Compose. We hebben ook enkele tips en trucs besproken voor het optimaliseren van uw installatie en enkele persoonlijke ervaringen en praktijktoepassingen gedeeld.

Het uitvoeren van Airflow met Docker biedt een consistente, geïsoleerde omgeving die gemakkelijk kan worden geversioneerd, gedistribueerd en gerepliceerd. Deze opstelling is ideaal voor het beheer van complexe datapijplijnen, omdat het de krachtige plannings- en orkestratiemogelijkheden van Airflow combineert met de flexibiliteit en isolatie van Docker. Of u nu een data-engineer bent die uw workflows wil stroomlijnen, of een team dat consistentie in uw ontwikkelomgeving wil waarborgen, Airflow lokaal uitvoeren met Docker is een krachtige oplossing.

Ik hoop dat deze gids nuttig is geweest en u de kennis en het vertrouwen heeft gegeven om aan de slag te gaan met uw eigen Airflow-Docker-configuratie.

spot_img

Laatste intelligentie

spot_img