Airflow 使用气流将任务分配给特定的机器

Airflow 使用气流将任务分配给特定的机器,airflow,Airflow,我是个新手 我有一个DAG,其中包含一个应该在特定机器上运行的任务(在我的例子中是EMR集群)。如何告诉airflow在何处运行特定任务,以便它每次运行时仅在该机器上运行?使用队列名称在该机器上运行您的工作程序。在airflow cli中,您可以执行以下操作: airflow worker -q my_queue 然后定义该任务以使用该队列: task=PythonOperator( task_id='task', python\u callable=my\u callable, queue=

我是个新手


我有一个DAG,其中包含一个应该在特定机器上运行的任务(在我的例子中是EMR集群)。如何告诉airflow在何处运行特定任务,以便它每次运行时仅在该机器上运行?

使用队列名称在该机器上运行您的工作程序。在airflow cli中,您可以执行以下操作:

airflow worker -q my_queue
然后定义该任务以使用该队列:

task=PythonOperator(
task_id='task',
python\u callable=my\u callable,
queue='my_queue',
dag=dag)

运行
airflow worker-q my_queue
会利用该集群上的所有处理器吗?或者您是否需要运行多个
airflow worker
命令如果我向混合中添加另一个
airflow worker
,如果我添加的worker超过先前定义的并发值,是否需要编辑airflow.cfg中的
celeryd_并发性
?或者我可以简单地用
airflow worker-c 12
(如果我加载了一个包含12个并发线程的框)来覆盖它——假设我有5个独立的任务导致另一个任务(即,a->B的5个独立链)。如果我使用
CeleryExecutor
concurrency=4
运行它们,那么在所有任务A完成之前,任务B都不会启动。这意味着4个线程将在任务A上工作;完成后,三个线程将处于空闲状态,而另一个线程将处理任务A。一旦全部完成,他们将进入任务B。对此有何想法?请以实际问题的形式提问,而不是在评论中提问。评论链中的问题和答案不容易被具有相同问题的人找到。是否可能有像queue={{ti.xcom_pull(“提供_queue_name”)}这样的动态队列名称?