Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Airflow 如何使用气流在不同的机器上运行一个工作流的不同任务?_Airflow_Apache Airflow - Fatal编程技术网

Airflow 如何使用气流在不同的机器上运行一个工作流的不同任务?

Airflow 如何使用气流在不同的机器上运行一个工作流的不同任务?,airflow,apache-airflow,Airflow,Apache Airflow,免责声明:我不是(尚未)Airflow的用户,今天才发现它,我开始探索它是否适合我的使用案例 我有一个数据处理工作流,它是多个任务的顺序(而不是并行)执行。但是,有些任务需要在特定的机器上运行。你能做到吗?这个用例的建议实现模型是什么 谢谢。是的,您可以在气流中使用。您可以将任务绑定到特定队列。然后,对于机器上的每个工作人员,可以将其设置为仅从选定队列拾取任务 在代码中,它将如下所示: task_1 = BashOperator( dag=dag, task_id='task_a

免责声明:我不是(尚未)Airflow的用户,今天才发现它,我开始探索它是否适合我的使用案例

我有一个数据处理工作流,它是多个任务的顺序(而不是并行)执行。但是,有些任务需要在特定的机器上运行。你能做到吗?这个用例的建议实现模型是什么


谢谢。

是的,您可以在气流中使用。您可以将任务绑定到特定队列。然后,对于机器上的每个工作人员,可以将其设置为仅从选定队列拾取任务

在代码中,它将如下所示:

task_1 = BashOperator(
    dag=dag,
    task_id='task_a',
    ...
)

task_2 = PythonOperator(
    dag=dag,
    task_id='task_b',
    queue='special',
    ...
)
请注意,airflow.cfg中有此设置:

# Default queue that tasks get assigned to and that worker listen on.
default_queue = default
因此,如果您的员工从以下几点开始:

Server A> airflow worker
Server B> airflow worker --queues special
Server C> airflow worker --queues default,special

然后任务1可以由服务器A+C拾取,任务2可以由服务器B+C拾取。

谢谢,这是我需要知道的。我可能会为每个工作者分配一个名为节点主机名的队列。这里值得一提的一个警告是,您可以将一个节点分配给多个队列,但不能要求一个任务有多个队列。示例:如果任务需要两个程序
special1
special2
,则必须为任务创建第三个队列
special1\u plus\u 2
,并将
special1
special2
启用节点分配给所有三个队列。