Воздушный поток - заполнение DagBag очень медленно - PullRequest
1 голос
/ 03 апреля 2020

Мы исследуем использование Apache Воздушный поток для замены текущего инструмента оркестратора для нашего ETL. Наш текущий ETL более 600 различных задач со сложными зависимостями. Этими задачами являются в основном вызовы рабочих процессов Informatica PowerCenter, а также несколько процедур базы данных и сценариев оболочки

Чтобы протестировать пользовательский интерфейс, я создал группу обеспечения доступности баз данных с 600 задачами. Вместо того, чтобы использовать реальные пользовательские операторы, которые я создал, я использовал готовый BashOperator для печати даты, простейшей команды, которую я могу придумать. Затем я установил зависимости в соответствии с нашим текущим ETL. Существует более 2000 зависимостей, но я ограничил около 1400 зависимостями для теста.

import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta


default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': airflow.utils.dates.days_ago(1),
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5)
}

dag = DAG(dag_id='Test_ETL',
          default_args=default_args,
          schedule_interval=timedelta(days=1))


Task1 = BashOperator(task_id="Task1",bash_command="date",dag=dag)
Task2 = BashOperator(task_id="Task2",bash_command="date",dag=dag)
.
.
Task600 = BashOperator(task_id="Task600",bash_command="date",dag=dag)

Task1 >> Task2
Task2 >> Task3
Task4 >> Task5
.
.
Task500 >> Task600

Проблема в том, что Airflow требуется несколько минут, чтобы заполнить DagBag. И это происходит постоянно, и каждый шаг занимает несколько минут из-за этого. Фактически мне пришлось увеличить тайм-ауты, поскольку заполнение DagBag не будет завершено.

Я исследовал dag_pickle (donot_pickle = false, планировщик в режиме --do_pickle), и все же таблица dag_pickle (в MySQL) пусто.

Потребовалось более 8 часов, чтобы 600 раз выполнить команду даты в bash! Весь ETL занимает 8 часов, чтобы извлечь и загрузить почти миллиард строк каждую ночь.

Не выполняя эту работу, мы не можем рекомендовать Airflow в качестве замены (что является позором).

1 Ответ

0 голосов
/ 08 апреля 2020

Я полагаю, исходя из вашего поста, что вы используете MySql для бэкэнда мета-магазина airflow. Каково значение параметра "executor" в вашем файле airflow.cfg?

По умолчанию это "SequentialExecutor". Если вы установите для него значение «LocalExecutor», вы сможете воспользоваться параллельными задачами, что приведет к огромному увеличению производительности.

источник

...