Mithilfe meines Apache Mesos Providers für Apache Airflow, lassen sich die Airflow DAG’s und Tasks in einem Apache Mesos Cluster betreiben. Durch die Nutzung von Autoscaling beim CloudHoster stehen einem theoretisch Grenzenlose-Ressourcen zur Verfügung.
Die Installation erfolgt über:
pip install avmesos-airflow-provider
In der Airflow Konfiguration muss anschließend folgendes hinzugefügt werden:
[core]
executor = avmesos_airflow_provider.executors.mesos_executor.MesosExecutor
[mesos]
mesos_ssl = True
master = master.mesos:5050
framework_name = Airflow
checkpoint = True
failover_timeout = 604800
command_shell = True
task_cpu = 1
task_memory = 20000
authenticate = True
default_principal = <MESOS_MASTER_PRINCIPAL>
default_secret = <MESOS_MASTER_SECRET>
docker_image_slave = avhost/docker-airflow:v2.1.2
docker_volume_driver = local
docker_volume_dag_name = airflowdags
docker_volume_dag_container_path = /home/airflow/airflow/dags/
docker_sock = /var/run/docker.sock
docker_volume_logs_name = airflowlogs
docker_volume_logs_container_path = /home/airflow/airflow/logs/
docker_environment = '[{ "name":"<KEY>", "value":"<VALUE>" }, { ... }]'
api_username = <USERNAME FOR THIS API>
api_password = <PASSWORD FOR THIS API>
Airflow Task scheduled in Mesos
Da der Autoscale Service von AWS nicht ideal für Airflow Langläufer Jobs ist, haben wir eine Programm geschrieben welches EC2 Instanzen erzeugt, sobald Airflow DAG’s zu lange in der Queue hängen. Unser mesos-airflow-autoscaler startet vordefinierte EC2 Instanzen und beendet diese wieder, sobald kein Airflow Workload vorhanden ist. Voraussetzung ist unter anderem, dass eine AMI verwendet wird, die sich nach dem starten automatisch mit Apache Mesos verbindet und sich als Mesos Agent einbindet.