Apache Airflow & CeleryExecutor, PostgreSQL & Redis: Uruchom środowisko przy użyciu Docker-Compose w 5 minut!

Apache Airflow & CeleryExecutor, PostgreSQL & Redis: Uruchom środowisko przy użyciu Docker-Compose w 5 minut!
Photo by Drew Beamer on Unsplash

W tym poście pokaże Ci jak w 5 minut stworzyć w pełni działające środowisko, w którego skład wejdą:

  • Apache Airflow WebServer
  • Apache Airflow Worker
  • Apache Airflow Scheduler
  • Flower – internetowe narzędzie do monitorowania i zarządzania klastrami Celery
  • Redis – to open source (licencjonowany BSD) magazyn struktur danych w pamięci, wykorzystywany jako baza danych, pamięć podręczna i broker komunikatów.

Skrypt docker-compose.yml

Utwórz plik docker-compose.yml i wklej poniższy skrypt. Następnie uruchom komende docker-compos up -d.

(Poniższy skrypt został zaczerpnięty ze strony Puckel)

version: '2.1'
services:
    redis:
        image: 'redis:5.0.5'
        # command: redis-server --requirepass redispass

    postgres:
        image: postgres:9.6
        environment:
            - POSTGRES_USER=airflow
            - POSTGRES_PASSWORD=airflow
            - POSTGRES_DB=airflow
        # Uncomment these lines to persist data on the local filesystem.
        #     - PGDATA=/var/lib/postgresql/data/pgdata
        # volumes:
        #     - ./pgdata:/var/lib/postgresql/data/pgdata

    webserver:
        image: puckel/docker-airflow:1.10.4
        restart: always
        depends_on:
            - postgres
            - redis
        environment:
            - LOAD_EX=n
            - FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho=
            - EXECUTOR=Celery
            # - POSTGRES_USER=airflow
            # - POSTGRES_PASSWORD=airflow
            # - POSTGRES_DB=airflow
            # - REDIS_PASSWORD=redispass
        volumes:
            - ./dags:/usr/local/airflow/dags
            # Uncomment to include custom plugins
            # - ./plugins:/usr/local/airflow/plugins
        ports:
            - "8080:8080"
        command: webserver
        healthcheck:
            test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
            interval: 30s
            timeout: 30s
            retries: 3

    flower:
        image: puckel/docker-airflow:1.10.4
        restart: always
        depends_on:
            - redis
        environment:
            - EXECUTOR=Celery
            # - REDIS_PASSWORD=redispass
        ports:
            - "5555:5555"
        command: flower

    scheduler:
        image: puckel/docker-airflow:1.10.4
        restart: always
        depends_on:
            - webserver
        volumes:
            - ./dags:/usr/local/airflow/dags
            # Uncomment to include custom plugins
            # - ./plugins:/usr/local/airflow/plugins
        environment:
            - LOAD_EX=n
            - FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho=
            - EXECUTOR=Celery
            # - POSTGRES_USER=airflow
            # - POSTGRES_PASSWORD=airflow
            # - POSTGRES_DB=airflow
            # - REDIS_PASSWORD=redispass
        command: scheduler

    worker:
        image: puckel/docker-airflow:1.10.4
        restart: always
        depends_on:
            - scheduler
        volumes:
            - ./dags:/usr/local/airflow/dags
            # Uncomment to include custom plugins
            # - ./plugins:/usr/local/airflow/plugins
        environment:
            - FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho=
            - EXECUTOR=Celery
            # - POSTGRES_USER=airflow
            # - POSTGRES_PASSWORD=airflow
            # - POSTGRES_DB=airflow
            # - REDIS_PASSWORD=redispass
        command: worker

Sprawdź status kontenerów

Zanim przejdziesz do stron z interfejsem użytkownika, sprawdź czy wszystkie kontenery mają status “UP”. W tym celu użyj komendy:

docker-compose ps
           Name                         Command                  State                         Ports                   
-----------------------------------------------------------------------------------------------------------------------
airflow-docker_flower_1      /entrypoint.sh flower            Up             0.0.0.0:5555->5555/tcp, 8080/tcp, 8793/tcp
airflow-docker_postgres_1    docker-entrypoint.sh postgres    Up             5432/tcp                                  
airflow-docker_redis_1       docker-entrypoint.sh redis ...   Up             6379/tcp                                  
airflow-docker_scheduler_1   /entrypoint.sh scheduler         Up             5555/tcp, 8080/tcp, 8793/tcp              
airflow-docker_webserver_1   /entrypoint.sh webserver         Up (healthy)   5555/tcp, 0.0.0.0:8080->8080/tcp, 8793/tcp
airflow-docker_worker_1      /entrypoint.sh worker            Up             5555/tcp, 8080/tcp, 8793/tcp          

Interfejs użytkownika

Gdy wszystkie kontenery są uruchomione, możemy otworzyć kolejno:

Testowy DAG

W katalogu, gdzie uruchamialiśmy plik dokcer-compose.yml utworzyony został katalog “dags”. Utwórzmy w nim nasz testowy DAG. W tym celu przekieruję Cię do mojego innego posta, gdzie dokładnie opisałem jak to zrobić.

W skrócie: w katalogu “dags” należy utworzyć testowy dag (plik python). Automatycznie on pojawi się na w Airflow UI. Następnie wystarczy, że go po prostu uruchomisz. Dodatkowo sprawdź monitoring z poziomu Flower UI.

Jeśli spodobał Ci się ten post to zostaw proszę komentarz poniżej oraz udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Dzięki!

Leave a Reply

avatar
  Subscribe  
Powiadom o
Close Menu