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

Dot*_*tan 9 airflow

我是Airflow的新手.

我有一个DAG,其中包含一个应该在特定机器上运行的任务(在我的情况下是EMR集群).如何告诉气流在哪里运行特定任务,以便每次运行它只会在该机器上执行此操作?

jhn*_*lvr 18

使用队列名称在该计算机上运行您的worker.在气流cli中,您可以执行以下操作:

airflow worker -q my_queue
Run Code Online (Sandbox Code Playgroud)

然后定义该任务以使用该队列:

task = PythonOperator(
    task_id='task',
    python_callable=my_callable,
    queue='my_queue',
    dag=dag)
Run Code Online (Sandbox Code Playgroud)

  • 假设我添加了另一个 `airflow worker`,如果我添加了一个超过先前定义的并发值的 worker,我是否需要在 airflow.cfg 中编辑 `celeryd_concurrency`?或者我可以简单地用 `airflow worker -c 12` 覆盖它(如果我加载了一个有 12 个并发线程的盒子) (2认同)
  • 另外 - 假设我有 5 个独立的任务会导致另一个任务(即 A->B 的 5 个独立链)。如果我用 `CeleryExecutor` 和 `concurrency = 4` 运行它们,那么在所有任务 A 完成之前,不会启动任何任务 B。这意味着 4 个线程将在任务 A 上工作;当他们完成时,三个线程将闲置,而另一个线程将处理任务 A。一旦全部完成,他们就会开始任务 B。对此有什么想法吗? (2认同)
  • 请将问题作为实际问题提出,而不是在评论中提出。有相同问题的人不会轻易找到评论链中的问题和答案。 (2认同)