Оператор MySQLToGCS воздушного потока, использующий память

# #google-cloud-platform #airflow #google-cloud-composer

Вопрос:

Я пытаюсь создать задачу Dag, которая загружает таблицу MySQL в корзину GCS.

Однако встроенный оператор MySQLToGCSOperator, который делает это, похоже, хранит данные в памяти до тех пор, пока не завершит загрузку таблицы. Поскольку некоторые из наших таблиц составляют 100 ГБ , это приводит к тому, что рабочие используют всю доступную память при загрузке больших таблиц, что приводит к сбою в работе наших рабочих-составителей в какой-то момент после того, как они израсходовали всю память сервера.

Есть ли способ загрузить таблицу MySQL в GCS, не потребляя много оперативной памяти?

Я также попытался изменить параметр approx_max_file_size_bytes и тип файла (JSON/CSV), но это не имело никакого значения.

Использование воздушного потока 2.0.2.

Изображение композитора: композитор-1.17.0-предварительный просмотр.6-воздушный поток-2.0.2

Комментарии:

1. Неясно, нужно ли вам подтверждение, если это проблема с памятью, или вам нужно альтернативное решение MySQLToGCSOperator ?

2. Мне нужно, чтобы вы указали версию композитора, которую вы используете вместе с Airflow 2.0.2. Если ваша версия композитора больше не поддерживает Airflow 2.0.2, это будет объяснением того, почему она может плохо себя вести для вас. Кроме того, я был бы рад, если бы вы указали проблему, на которую вы нацелены, потому что ваш вопрос был довольно двусмысленным.

3. @MBHAPhoenix Я хотел бы знать, нормально ли это, и если да, то есть ли другое решение?

4. @MariCruzR извиняется за двусмысленность. Добавлена дополнительная информация к вопросу.

5. Размещена ли база данных MySQL в облачном SQL ? Или это внешняя БД?

Ответ №1:

Поскольку ваша цель-минимизировать влияние на производительность оперативной памяти при загрузке таблицы MySQL в GCS, я бы предложил использовать бессерверный экспорт, чтобы разгрузить основной экземпляр. Это может быть достигнуто с помощью команды gcloud export sql с тегом —offload.

 gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz 
--database=DATABASE_NAME_1,[DATABASE_NAME_2…] 
--table=TABLE_1,[TABLE_2…] 
--offload
 

Этот метод должен помочь при экспорте данных из больших баз данных, поскольку он создает вторичный экземпляр, и он действителен, если вы используете облачный SQL.

Комментарии:

1. Я отредактировал свой комментарий в соответствии с новой версией вашего вопроса. Пожалуйста, просмотрите содержимое решения и скажите мне, помогло ли это повысить производительность вашей оперативной памяти.