Airflow - 如何 运行 具有非退出命令的 KubernetesPodOperator

Airflow - How to run a KubernetesPodOperator with a non exiting command

我正在尝试设置一个 DAG,它将在第一个任务中创建一个 Spark 集群,在临时任务中将 spark 应用程序提交到集群,并最终在最后一个任务中拆除 Spark 集群。

我现在正在尝试的方法是使用 KubernetesPodOperators 创建 Spark Master 和 Worker pods。问题是他们 运行 一个永远不会退出的 spark 守护进程。事实上,在 pod 上调用的命令永远不会退出,这意味着这些任务会在 运行ning 阶段卡在气流中。所以,我想知道是否有办法 运行 spark 守护进程然后继续 DAG 中的下一个任务?

The approach I'm attempting right now is to use KubernetesPodOperators to create Spark Master and Worker pods.

Apache Spark provides working support 用于在 Kubernetes 集群中执行作业。它提供了一个能够在 pods 到 运行 作业中启动执行程序的驱动程序。

您不需要直接在 Airflow 中创建 MasterWorker pods。

宁愿建立一个Docker image containing Apache Spark with Kubernetes backend。 项目中提供了一个example Dockerfile

然后 submit the given jobs 使用 KubernetesPodOperator 到基于此映像的容器中的集群。以下示例作业改编自 Apache Spark 中提供的文档,用于将 spark 作业直接提交到 Kubernetes 集群。

from airflow.operators.kubernetes_pod_operator import KubernetesPodOperator


kubernetes_full_pod = KubernetesPodOperator(
    task_id='spark-job-task-ex',
    name='spark-job-task',
    namespace='default',
    image='<prebuilt-spark-image-name>',
    cmds=['bin/spark-submit'],
    arguments=[
        '--master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port>',
        '--deploy-mode cluster',
        '--name spark-pi',
        ' --class org.apache.spark.examples.SparkPi',
        '--conf spark.executor.instances=5',
        '--conf spark.kubernetes.container.image=<prebuilt-spark-image-name>',
        'local:///path/to/examples.jar'
    ],
    #...
)