Локальный исполнитель запускает новые процессы при планировании задач. Существует ли ограничение на количество процессов, которые он создает. Мне нужно было изменить его. Мне нужно знать, в чем разница между планировщиком "max_threads" и "parallelism" в airflow.cfg?
Воздушный поток parallelism
Ответ 1
parallelism: не очень описательное имя. В описании говорится, что он устанавливает максимальные экземпляры задач для установки воздушного потока, что немного неоднозначно - если у меня есть два хоста, работающие с работниками воздушного потока, у меня будет воздушный поток, установленный на двух хостах, поэтому это должно быть две установки, но на основе контекста "для каждой установки" здесь означает "для базы данных состояния воздушного потока". Я бы назвал это max_active_tasks.
dag_concurrency: Несмотря на имя, основанное на комментарии, это на самом деле задача concurrency, и это на одного работника. Я бы назвал это max_active_tasks_for_worker (per_worker предположил бы, что это глобальная настройка для рабочих, но я думаю, что у вас могут быть рабочие с разными значениями, установленными для этого).
max_active_runs_per_dag. Это один из вариантов, но, поскольку это похоже на значение по умолчанию для соответствующего DAG kwarg, было бы неплохо отразить это в имени, например, default_max_active_runs_for_dags Итак, переходим к DAG kwargs:
concurrency: опять же, имея общее имя, подобное этому, в сочетании с тем фактом, что concurrency используется для чего-то другого в другом месте, делает это довольно запутанным. Я бы назвал это max_active_tasks.
max_active_runs. Это звучит хорошо для меня.
источник: https://issues.apache.org/jira/browse/AIRFLOW-57
max_threads предоставляет пользователю некоторый контроль над использованием процессора. Он определяет планировщик parallelism.
Ответ 2
Планировщик max_threads
- это количество процессов для распараллеливания планировщика. max_threads
не может превышать счет процессора. LocalExecutor parallelism
- это количество одновременных задач, которые должен выполнить LocalExecutor. Планировщик и LocalExecutor используют библиотеку многопроцессорности python для parallelism.
Ответ 3
Это 2019 и более обновленные документы вышли. Короче говоря:
AIRFLOW__CORE__PARALLELISM
- это максимальное количество экземпляров задач, которые могут одновременно выполняться через ВСЕ Airflow (все задачи через все пакеты)
AIRFLOW__CORE__DAG_CONCURRENCY
- это максимальное количество экземпляров задач, которые могут быть запущены одновременно ДЛЯ ОДНОЙ КОНКРЕТНОЙ ПАМЯТИ
Эти документы описывают это более подробно:
Согласно https://www.astronomer.io/guides/airflow-scaling-workers/:
параллелизм - это максимальное количество экземпляров задач, которые могут выполняться одновременно на воздушном потоке. Это означает, что во всех работающих DAG нет более 32 задач будут выполняться одновременно.
И
dag_concurrency - количество экземпляров задач, которые могут быть запущены одновременно в определенном даге. Другими словами, вы могли бы иметь 2 Группы обеспечения доступности баз данных, выполняющие 16 задач каждая, но одну группу доступности из 50 задач также будет выполнять только 16 задач, а не 32
И, согласно https://airflow.apache.org/faq.html#how-to-reduce-airflow-dag-scheduling-latency-in-production:
max_threads: планировщик будет порождать несколько потоков параллельно график дагс. Это контролируется max_threads со значением по умолчанию 2. Пользователь должен увеличить это значение до большего значения (например, числа процессоров, на которых работает планировщик - 1) в производстве.
Но кажется, что этот последний кусок не должен занимать слишком много времени, потому что это просто часть "планирования". Не фактическая бегущая часть. Поэтому мы не видели необходимости много настраивать max_threads
, но AIRFLOW__CORE__PARALLELISM
и AIRFLOW__CORE__DAG_CONCURRENCY
действительно повлияли на нас.