Ограниченные капсулы в Kubernetes (EKS) и Airflow - PullRequest
0 голосов
/ 24 января 2020

Несмотря на увеличение значений переменных, которые изменяют уровни параллелизма Airflow, я никогда не получаю более девяти пакетов одновременно.

У меня есть кластер EKS с двумя узлами m4.large, вместимостью на 20 модулей каждый. Вся система занимает 15 модулей, поэтому у меня есть место, чтобы иметь еще 25 модулей, но они никогда не превышают девяти. Я создал политику эскалации, потому что планировщик немного напрягается, одновременно выбрасывая 500 дагов, но EKS создает дополнительный кластер, который все, что он делает, это распределяет девять пакетов. Я также провел тестирование с двумя узлами m4.2xlarge, с вместимостью почти в 120 модулей и с тем же результатом, несмотря на умножение на 4 производительности системы и увеличение количества потоков с 2 до 6.

Это значения переменных среды, которые я обрабатываю.

AIRFLOW__CORE__PARALLELISM = 1000
AIRFLOW__CORE__NON_POOLED_TASK_SLOT_COUNT = 1000
AIRFLOW__CORE__DAG_CONCURRENCY = 1000
AIRFLOW__CORE__SQL_ALCHEMY_POOL_SIZE = 0
AIRFLOW__CORE__SQL_ALCHEMY_MAX_OVERFLOW = -1

Что может происходить?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Что-то не так. Если у меня есть два узла, которые могут разместить 100 модулей. И каждая капсула доходит до минуты sh, если я запускаю пятьсот коробочек одновременно, вся работа должна закончиться через пять минут. Но это всегда занимает от 16 до 20 минут. Узлы никогда не заполнены модулями на полную мощность, и они заканчивают свою работу, но для их удаления требуется некоторое время. Что делает его таким медленным?

Используйте Airflow 1.10.9 с этой конфигурацией:

ENV AIRFLOW__CORE__PARALLELISM=100
ENV AIRFLOW__CORE__NON_POOLED_TASK_SLOT_COUNT=100
ENV AIRFLOW__CORE__DAG_CONCURRENCY=100
ENV AIRFLOW__CORE__MAX_ACTIVE_RUNS_PER_DAG=100

ENV AIRFLOW__CORE__SQL_ALCHEMY_POOL_SIZE=0
ENV AIRFLOW__CORE__SQL_ALCHEMY_MAX_OVERFLOW=-1

ENV AIRFLOW__KUBERNETES_WORKER_PODS_CREATION_BATCH_SIZE=10
ENV AIRFLOW__SCHEDULER__MAX_THREADS=6
0 голосов
/ 06 февраля 2020

Хорошо, я уже видел, где проблема. Kubernetes плохо справляется со стручками без запросов или ограничений. Я добавил запросы и лимиты, и теперь узлы полностью заполнены 20 модулями.

Теперь у меня другая проблема. Стручки, кажется, не исчезают, когда они заканчивают sh. Стручки только печатают «Hello world», несмотря на это, в dag_run есть даги, которые занимают от 49 секунд до 22 минут. С учетом того, что в каждом узле больше модулей, всей системе по-прежнему требуется более 20 минут, как и раньше.

...