Moje DAGy Airflow składają się głównie z PythonOperators i chciałbym użyć moich narzędzi debugowania Python IDE do rozwijania "wewnętrznego" przepływu powietrza w Pythonie. - Polegam na złączach bazy danych Airflow, które moim zdaniem byłoby brzydkie, gdybyśmy „wyłączyli” przepływ powietrza w celu rozwoju.

Używam Airflow od jakiegoś czasu i do tej pory rozwijałem i debugowałem tylko przez CLI. Co zaczyna być męczące.

Czy ktoś zna fajny sposób na skonfigurowanie PyCharm lub innego IDE, które umożliwia mi korzystanie z zestawu narzędzi do debugowania IDE podczas uruchamiania airflow test ..?

10
Mathias Andersen 19 listopad 2019, 13:28

3 odpowiedzi

To może być trochę hack, ale znalazłem jeden sposób na skonfigurowanie PyCharm:

  • Użyj which airflow do lokalnego środowiska przepływu powietrza - co w moim przypadku jest tylko pipenv
  • Dodaj nową konfigurację przebiegu w PyCharm
  • Ustaw „ścieżkę skryptu” języka Python na wspomniany skrypt przepływu powietrza
  • Ustaw parametry, aby przetestować zadanie: test dag_x task_y 2019-11-19

Zostało to zweryfikowane tylko przez SequentialExecutor , co może być ważne.

Szkoda, że muszę zmieniać parametry testowe w konfiguracji uruchamiania dla każdego nowego zadania debugowania / programowania, ale jak dotąd jest to bardzo przydatne do ustawiania punktów przerwania i przechodzenia przez kod w „wewnątrz” lokalnego środowiska przepływu powietrza.

2
Mathias Andersen 19 listopad 2019, 13:28
Możesz także dodać AIRFLOW__CORE__EXECUTOR=DebugExecutor do pola Zmienne środowiskowe w oknie konfiguracji uruchamiania/debugowania Pycharm
 – 
jacekll
11 wrzesień 2020, 14:41

Debuguję airflow test dag_id task_id, uruchamiam na maszynie włóczęgów, używając PyCharm. Powinieneś być w stanie użyć tej samej metody, nawet jeśli używasz przepływu powietrza bezpośrednio na hoście lokalnym.

Dokumentacja Pycharm na ten temat powinien pokazać, jak utworzyć odpowiednią konfigurację „Python Remote Debug”. Kiedy uruchamiasz tę konfigurację, czeka na kontakt z fragmentem kodu, który gdzieś dodałeś (na przykład u jednego z twoich operatorów). A potem możesz debugować jak zwykle, z punktami przerwania ustawionymi w Pycharm.

2
brki 19 listopad 2019, 17:32

Może trochę spóźnić się na imprezę, ale szukałem również rozwiązania tego problemu. Chciałem mieć możliwość debugowania kodu tak blisko "trybu produkcyjnego", jak to tylko możliwe (więc nic z testem itp.).

Znalazłem rozwiązanie w postaci „Serwera debugowania Pythona”. Działa to w drugą stronę: Twoje IDE nasłuchuje i połączenie jest nawiązywane ze zdalnego skryptu do edytora.

Wystarczy dodać nową konfigurację uruchamiania typu „Serwer debugowania Pythona”. Otrzymasz ekran z informacją o pip install pydevd-pycharm zdalnie. Na tej samej stronie możesz wpisać swój lokalny adres IP i port, na którym powinien być dostępny debuger oraz opcjonalne mapowania ścieżek.

Następnie po prostu dodaj proponowane 2 wiersze kodu w miejscu, w którym chcesz rozpocząć sesję debugowania.

Uruchom konfigurację, aby aktywować słuchacz, a jeśli wszystko jest w porządku, twój edytor powinien się zepsuć, gdy tylko zostanie osiągnięta lokalizacja wywołania settrace.

airflow remote debug

Edycja/Uwaga: jeśli zatrzymasz konfigurację w edytorze, przepływ powietrza będzie kontynuował zadanie, pamiętaj o tym.

7
Blizz 6 październik 2020, 18:43
Próbuję tego, ponieważ działa to idealnie w moim przypadku użycia, jednak ciągle otrzymuję limit czasu gniazda podczas próby zdalnego uruchomienia skryptu z mojej instancji ec2. (tj. redaktor aktywnie nasłuchuje, ale połączenie nigdy nie jest nawiązywane). Zastanawiałeś się, czy napotkałeś podobny problem? Rzeczy, które próbowałem: - Pingowanie mojego lokalnego adresu IP z instancji ec2 (Udane - reguła wychodząca dla instancji EC2 wydaje się działać) - Modyfikacja czasu oczekiwania od 10 do 60 sekund w pydevd_comm.py - Wybór innego zakresu portów. (Niepowodzenie — nie pomaga w rozwiązaniu problemu)
 – 
Taha Jirjees
9 sierpień 2020, 17:22
Musi być w stanie nawiązać bezpośrednie połączenie z komputerem lokalnym. Czy zaskoczyłby mnie, gdyby było to możliwe z instancji ec2 (zazwyczaj działa tylko w twojej własnej sieci LAN)? Może mógłbyś użyć jakiegoś tunelu (ngrok lub coś podobnego)? Lub nawet przekierowanie portów z routera i korzystanie z zewnętrznego adresu IP..
 – 
Blizz
10 sierpień 2020, 09:13
1
Udało Ci się to i uczyniło mój rok!! Dzięki za to. OGROMNY! Używam konteneryzowanej kompilacji przepływu powietrza i po prostu trzeba dodać pydevd-pycharm~=202.7319.64 do mojego pliku Requirements.txt dla kontenera, a następnie wybrać nieużywany port. Działa jak marzenie!
 – 
theStud54
26 wrzesień 2020, 16:11