【问题标题】:Apache airflow run dag operators using kubernetes in AWSApache 气流在 AWS 中使用 kubernetes 运行 dag 运算符
【发布时间】:2019-07-10 17:58:54
【问题描述】:

我正在评估在数据环境中用于生产的 Apache 气流,我想知道您是否可以使用气流在自动缩放 Kubernetes 集群上的自包含 docker 环境中运行操作员。

我找到了以下运算符:KubernetesPodOperator,这似乎可以完成这项工作,但我发现的唯一示例是在 Google Cloud 上。我想在 AWS 上运行它,但是我还没有找到任何关于如何做到这一点的例子。我相信 AWS EKS 或 AWS fargate 可能符合要求,但不确定。

任何有气流经验的人都可以告诉我这是否可能吗?我在网上查了一下,还没有发现什么清楚的。

【问题讨论】:

    标签: kubernetes airflow aws-fargate amazon-eks


    【解决方案1】:

    我们一直在生产中使用 Fargate 和 Airflow,到目前为止的体验一直很好。

    我们一直将它用于临时工作负载,结果证明它比拥有专用 Kubernetes 集群更便宜。此外,没有任何类型的管理开销。

    Github — Airflow DAG with ECSOperatorConfig

    【讨论】:

    • 感谢 GTO 提供的示例。有没有办法为不同的算子定义 CPU 和 RAM 要求?
    • 是的,对于单个操作员,您可以定义 CPU 和 RAM 要求。检查 containerOverrides 部分的“cpu”、“memory”、“memoryReservation”-docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html
    • @GTO 这行github.com/ishan4488/airflow-fargate-example/blob/… 是否意味着我必须提前在ECS 中创建一个名为“my_automation_task”的任务?而且我必须确保python和ECS中的名称必须匹配?
    • @xliiv 是的。您必须在 ECS 中创建一个任务并在此处指定名称。
    【解决方案2】:

    您可以在任何云提供商中使用 Apache Airflow DAG 运算符,而不仅仅是 GKE。

    Airflow-on-kubernetes-part-1-a-different-kind-of-operatorAirflow Kubernetes Operator 一样的文章提供了如何使用 DAG 的基本示例。

    另外,Explore Airflow KubernetesExecutor on AWS and kops 文章提供了很好的解释,并举例说明了如何在 AWS 上使用 airflow-dagsairflow-logs 卷。

    例子:

    from airflow.operators.python_operator import PythonOperator
    from airflow.models import DAG
    from datetime import datetime
    import time
    import os
    
    args = {
        'owner': 'airflow',
        "start_date": datetime(2018, 10, 4),
    }
    
    dag = DAG(
        dag_id='test_kubernetes_executor',
        default_args=args,
        schedule_interval=None
    )
    
    def print_stuff():
        print("Hi Airflow")
    
    for i in range(2):
        one_task = PythonOperator(
            task_id="one_task" + str(i),
            python_callable=print_stuff,
            dag=dag
        )
    
        second_task = PythonOperator(
            task_id="two_task" + str(i),
            python_callable=print_stuff,
            dag=dag
        )
    
        third_task = PythonOperator(
            task_id="third_task" + str(i),
            python_callable=print_stuff,
            dag=dag
        )
    
        one_task >> second_task >> third_task
    

    【讨论】:

    • 感谢 VKR 的回复。我希望能做一些与medium.com/@chengzhizhao/… 文章非常相似的事情,但有一点不同。您是否认为可以在运行在 EC2 机器上的 kops 上运行任务而不是在 EKS/Fargate 上运行它?
    • 是的,为什么不呢。这是多平台的事情,正如我上面提到的 - 你应该能够在 AWS 上成功运行它
    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 2021-07-02
    • 2021-05-03
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多