2017-07-10 4 views
0

Ich denke Apache Airflow für ein Projekt zu verwenden und frage mich, wie Menschen kontinuierliche Integration und Abhängigkeiten mit Luftstrom verwalten. Genauer gesagt Sagen, ich habe folgende EinrichtungApache Airflow Kontinuierliche Integration Workflow und Dependency Management

3 Airflow-Server: Dev-Staging und Produktion.

Ich habe zwei Python DAG 's, deren Quellcode ich in separaten Repos aufbewahren möchte. Die DAG selbst sind einfach, im Grunde verwenden Sie einfach einen Python-Operator, um main (* args, ** kwargs) aufzurufen. Der eigentliche Code, der von main ausgeführt wird, ist jedoch sehr groß und dehnt mehrere Dateien/Module aus. Jede Python Codebasis hat verschiedene Abhängigkeiten beispielsweise

DAG1 verwendet python2.7 pandas == 0.18.1, Anfragen = 2.13.0

DAG2 verwendet Python3.6 pandas == 0.20.0 und Numba == 0.27 sowie einiger cythonisierter Code, der kompiliert werden muss

Wie verwalte ich Airflow, der diese zwei Dags mit völlig anderen Abhängigkeiten ausführt? Wie kann ich die kontinuierliche Integration des Codes für diese beiden Dags in jedes unterschiedliche Airflow-Environment (Dev, Staging, Prod) verwalten (bekomme ich einfach jenkins oder etwas zum ssh zum airflow server und mache sowas wie git pull origin ZWEIG

Hoffentlich ist diese Frage nicht zu vage und Leute sehen die Probleme, die ich habe.

Antwort

0

Wir verwenden Docker, um den Code mit verschiedenen Abhängigkeiten und DockerOperator in Luftströmungs-DAG auszuführen, die Docker-Container ausführen können, auch auf Remote-Maschinen (mit bereits ausgeführtem Docker-Dämon). Wir haben eigentlich nur einen Airflow-Server, um Jobs auszuführen, aber mehr Maschinen, auf denen Docker-Dämonen laufen, die die Airflow-Executoren aufrufen.

Für die kontinuierliche Integration verwenden wir gitlab CI mit der Gitlab-Containerregistrierung für jedes Repository. Dies sollte mit Jenkins leicht machbar sein.

+0

Dank @Him, ich kam mehr oder weniger zu den gleichen Schlussfolgerungen, aber mit den Python-Abhängigkeiten in einem virtualenv eingewickelt im Gegensatz zu DockerOperator verwenden, aber möglicherweise am Ende zu diesem wechseln. –