Local Executor在计划任务时生成新进程。它创建的进程数量是否有限制。我需要改变它。我需要知道调度程序的“max_threads”和“max_threads”之间有什么区别 airflow.cfg中的“并行性”?
答案 0 :(得分:56)
并行:不是一个非常具有描述性的名称。描述说它设置了气流安装的最大任务实例,这有点模棱两可 - 如果我有两个运行气流工作的主机,我在两个主机上安装了气流,所以这应该是两个安装,但是基于关于环境'每次安装'这意味着每个Airflow状态数据库'。我将此名称命名为max_active_tasks。
dag_concurrency:尽管名称基于评论,但这实际上是任务并发性,而且是每个工作者的。我将此命名为max_active_tasks_for_worker(per_worker会建议它是工作人员的全局设置,但我认为您可以为此设置不同值的工作人员。)
max_active_runs_per_dag :这个有点好,但由于它似乎只是匹配的DAG kwarg的默认值,所以在名称中反映出来可能会很好default_max_active_runs_for_dags 因此,让我们转向DAG kwargs:
并发性:同样,拥有这样的通用名称,再加上并发用于其他地方的事实使得这非常令人困惑。我称之为max_active_tasks。
max_active_runs :这个听起来不错。
来源:https://issues.apache.org/jira/browse/AIRFLOW-57
max_threads 为用户提供了对cpu使用情况的一些控制权。它指定调度程序并行性。
答案 1 :(得分:10)
调度程序的max_threads
是调度程序的并行化进程数。 max_threads
不能超过cpu计数。 LocalExecutor的parallelism
是LocalExecutor应运行的并发任务数。调度程序和LocalExecutor都使用python的多处理库进行并行化。
答案 2 :(得分:4)
现在是2019年,并且出现了更多更新的文档。简而言之:
AIRFLOW__CORE__PARALLELISM
是所有Airflow(所有dag中的所有任务)可以同时运行的最大任务实例数
AIRFLOW__CORE__DAG_CONCURRENCY
是单个特定DAG允许并发运行的最大任务实例数。
这些文档对其进行了更详细的描述:
根据https://www.astronomer.io/guides/airflow-scaling-workers/:
parallelism是可以运行的任务实例的最大数量 同时进行气流处理。这意味着在所有运行的DAG中,没有 一次可以运行32个以上的任务。
和
dag_concurrency是允许运行的任务实例的数量 同时在特定的dag中。换句话说,你可以有2 DAG每个并行运行16个任务,但是一个DAG可以并行运行50个任务 也只会执行16个任务,而不是32
然后,根据https://airflow.apache.org/faq.html#how-to-reduce-airflow-dag-scheduling-latency-in-production:
max_threads:调度程序将并行产生多个线程 安排工作由max_threads控制,默认值为 2.在生产中,用户应将此值增加到更大的值(例如,调度程序运行的cpus数-1)。
但是,似乎最后一块不应占用太多时间,因为它只是“计划”部分。不是实际的运行部分。因此,我们认为不需要对max_threads
进行大量调整,但是AIRFLOW__CORE__PARALLELISM
和AIRFLOW__CORE__DAG_CONCURRENCY
确实影响了我们。