Как создать сочетание между Celery Executor и Kubernetes Executor в Apache Airflow? - PullRequest
2 голосов
/ 27 мая 2019

У меня есть несколько дагов, использующих Celery Executor, но я хочу, чтобы один конкретный даг выполнялся с использованием Kubernetes Executor.Я не могу определить хороший и надежный способ достижения этого.

У меня есть airflow.cfg, в котором я объявил CeleryExecutor для использования.И я не хочу его менять, поскольку он действительно нужен во всех пакетах, кроме одного.

# The executor class that airflow should use. Choices include
# SequentialExecutor, LocalExecutor, CeleryExecutor
executor = CeleryExecutor

Мой код:

from datetime import datetime, timedelta

from airflow import DAG
from airflow.contrib.operators.kubernetes_pod_operator import \
    KubernetesPodOperator
from airflow.operators.dummy_operator import DummyOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime.utcnow(),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5)
}

dag = DAG(
    'kubernetes_sample_1', default_args=default_args)


start = DummyOperator(task_id='run_this_first', dag=dag)

passing = KubernetesPodOperator(namespace='default',
                                image="Python:3.6",
                                cmds=["Python", "-c"],
                                arguments=["print('hello world')"],
                                labels={"foo": "bar"},
                                name="passing-test",
                                task_id="passing-task",
                                get_logs=True,
                                dag=dag
                                )

failing = KubernetesPodOperator(namespace='default',
                                image="ubuntu:1604",
                                cmds=["Python", "-c"],
                                arguments=["print('hello world')"],
                                labels={"foo": "bar"},
                                name="fail",
                                task_id="failing-task",
                                get_logs=True,
                                dag=dag
                                )

passing.set_upstream(start)
failing.set_upstream(start)

Я могу поставить if-elseусловие, а затем измените значение с точки, где Airflow подбирает конфигурацию.Если это звучит правильно, пожалуйста, сообщите мне пути и файлы.Хотя я надеялся получить более зрелый метод, если он существует.

...