【问题标题】:Airflow MySQLToGCS Operator using up MemoryAirflow MySQLToGCS Operator 耗尽内存
【发布时间】:2021-08-23 14:35:27
【问题描述】:

我正在尝试创建一个将 MySQL 表下载到 GCS 存储桶的 Dag 任务。

但是,执行此操作的内置运算符 MySQLToGCSOperator 似乎将数据存储在内存中,直到它完成下载表。 由于我们的一些表超过 100 GB,这会导致工作人员在下载大型表时耗尽所有可用内存,从而导致我们的作曲家工作人员在消耗完服务器的所有内存后在某个时间点失败。

有没有办法在不消耗大量内存的情况下将 MySQL 表下载到 GCS?

我也尝试过更改 approx_max_file_size_bytes 参数和文件类型 (JSON/CSV),但没有任何区别。

使用 Airflow 2.0.2。

作曲家图片:composer-1.17.0-preview.6-airflow-2.0.2

【问题讨论】:

  • 不清楚是否需要确认是内存问题,还是需要 MySQLToGCSOperator 的替代解决方案?
  • 我需要您指定您在 Airflow 2.0.2 中使用的作曲家版本。如果您的作曲家版本不再支持 Airflow 2.0.2,这将解释为什么它可能对您不正常。此外,如果您指定您要针对的问题,我会很好,因为您的问题非常模棱两可。
  • @MBHAPhoenix 我想​​知道这是否正常,如果是,是否有其他解决方案?
  • @MariCruzR 为歧义道歉。为问题添加了更多信息。
  • MySQL DB 是否托管在Cloud SQL 中?还是外部数据库?

标签: google-cloud-platform airflow google-cloud-composer


【解决方案1】:

由于您的目标是在将 MySQL 表下载到 GCS 时尽量减少对 RAM 性能的影响,因此我建议使用主实例中的 serverless export to offload the effort。这可以通过使用带有 --offload 标签的 gcloud export sql 命令来实现。

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

这种方法应该有助于从大型数据库中导出数据,因为它会创建一个辅助实例,并且在您使用 Cloud SQL 时它是有效的。

【讨论】:

  • 我已根据您的问题的新版本编辑了我的评论。请查看解决方案内容并告诉我这是否有助于您的 RAM 性能。
猜你喜欢
  • 2015-08-23
  • 2012-11-10
  • 2012-08-19
  • 2011-02-09
  • 2015-10-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多