W świecie, w którym coraz więcej organizacji staje się data driven, ilość danych rośnie intensywnie, a platformy analityczne przenoszą się do chmury i stają się coraz bardziej złożone we wdrożeniu, data engineers wciąż chcą dostarczać najwyższej jakości odpowiedzi na pytania biznesowe.
Apache Airflow to dobrze znane narzędzie do tworzenia, harmonogramowania i monitorowania data workflows. W tym artykule opisuję usprawnienie wprowadzone w naszym projekcie, które pozwala nam szybciej dostarczać lepszej jakości DAGs.
Dlaczego potrzebujemy środowiska lokalnego?
Jako developers i data engineers chcemy dostarczać wysokiej jakości produkt gotowy do wdrożenia produkcyjnego, bez błędów i problemów z wydajnością. Aby to osiągnąć, korzystamy ze środowisk lokalnych do developmentu, testowania i optymalizacji naszego kodu.
Lokalny environment dla Apache Airflow
Czasami środowiska produkcyjne są bardzo złożone, na przykład korzystają z Kubernetes clusters i połączeń z cloud services, a deployment zajmuje dużo czasu. Jak wprowadzić rozsądne uproszczenie i sprawić, by kod był testowalny? Przeanalizujmy to na przykładzie Apache Airflow.
W poprzednim artykule pisaliśmy o use cases i ogólnym przeznaczeniu Apache Airflow.
Jeśli jesteś nowy w tym temacie, polecam zajrzeć na https://dsstream.com/when-should-you-consider-using-apache-airflow-use-cases/
Zakładam, że znasz Airflow, używasz go regularnie i zastanawiasz się, jak lepiej pisać i testować DAGs. Nie jesteś sam – u nas ten temat też często pojawia się na retro meetings 😊
Nasze środowisko produkcyjne i preprod działa w chmurze na Kubernetes Engine, synchronizacja DAGs zajmowała nam za każdym razem od 2 do 5 minut, co przy efektywnym developmentcie jest zdecydowanie za długo.
Aby szybciej dostarczać jakościowe pipelines, zdecydowaliśmy się uruchomić lokalne środowiska Airflow. Używanie Kubernetes lokalnie było dla nas zbyt dużym narzutem, bo chcieliśmy skupić się na developmentcie DAGs, a nie na konfiguracji. Wybraliśmy prostsze rozwiązanie i użyliśmy Docker Compose.
Docker Compose jako rozwiązanie
Docker Compose to narzędzie do definiowania i uruchamiania aplikacji wielokontenerowych w Dockerze. Dzięki Compose możesz ustawić liczbę kontenerów, ich buildy i storage design, a następnie jednym poleceniem zbudować, uruchomić i skonfigurować wszystkie kontenery.
To świetne rozwiązanie do developmentu i testowania.
Istnieje oficjalny plik Docker Compose, który udostępniła Airflow Community, jednak aby lepiej odwzorować ustawienia produkcyjne, nieco go dostosowaliśmy. Dodaliśmy biblioteki takie jak black, pylint i pytest, aby sprawdzać kod, oraz skrypty pomagające w rebuildzie image i ustawieniach połączeń z chmurą.

Zalety lokalnego środowiska Airflow opartego na Docker Compose w porównaniu do środowiska zdalnego
Główne zalety, które odkryliśmy, korzystając z lokalnego środowiska Airflow na Docker Compose, to:
- szybka aktualizacja DAGs – katalog z DAGs jest zamontowany jako volume, aktualizacja DAGs jest tak szybka, jak wartości parametru SCHEDULER_DAG_DIR_LIST_INTERVAL, czyli nawet co kilka sekund,
- łatwy dostęp do logów – katalog z logami również jest zamontowany jako volume, co pozwala szybko grepować, tailować lub po prostu czytać pliki logów,
- łatwa zmiana konfiguracji – korzystamy z konfiguracji w pliku .env, co pozwala nam przejrzyście zmieniać parametry bez nadpisywania airflow.cfg i daje możliwość posiadania wielu plików .env i łatwego przełączania się między konfiguracjami,
- łatwy redeploy image – mamy pełną kontrolę nad środowiskiem.
Więcej o setupie Airflow 2.0 z DAG Versioning i Serialization przeczytasz tutaj.
Use cases dla lokalnego środowiska Airflow opartego na Docker Compose
Lokalne środowisko Airflow z Docker Compose było dla nas pomocne nie tylko przy developmentcie DAGs, ale także przy:
- upgrade Airflow version,
- dodawaniu python dependencies,
- testowaniu nowych wersji bibliotek,
- testowaniu nowych integracji (np. BigQuery) – gdy zastanawialiśmy się, od czego zacząć, korzystaliśmy z Cloud SDK z osobistymi credentials, co pozwalało na szybki i efektywny development.
Lokalne środowisko Airflow z Docker-Compose było dla nas pomocne nie tylko przy tworzeniu DAG, ale również było bardzo pomocne, gdy chcemy: - uaktualnić wersję Airflow, - dodać zależności Pythona, - przetestować nowe wersje bibliotek - przetestować nową integrację (jak BigQuery), kiedy zastanawialiśmy się od czego zacząć, użyliśmy Cloud SDK z osobistymi poświadczeniami i sprawić, aby rozwój był szybki i wydajny.Jeśli spotkasz podobne wyzwania w swojej pracy i chciałbyś wymienić doświadczenia lub skorzystaj z naszego wsparcia Skontaktuj się z nami.
Programmatic advertising wszystko co powinieneś wiedzieć