我正在尝试创建一个Dag任务,将MySQL表下载到GCS桶。
然而,内置的操作符MySQLToGCSOperator似乎将数据存储在内存中,直到它完成下载表。由于我们的一些表是100 GB以上,这导致worker在下载大表时耗尽所有可用内存,导致我们的composer worker在消耗服务器所有内存后的某个时候失败。
是否有一种方法可以下载MySQL表到GCS而不消耗太多内存?
我也尝试改变approx_max_file_size_bytes参数和文件类型(JSON/CSV),但没有区别。
使用气流2.0.2.
作曲家图像:Composer -1.17.0-preview.6-airflow-2.0.2
由于您的目标是在将MySQL表下载到GCS时尽量减少对RAM性能的影响,因此我建议使用无服务器导出来卸载主实例的工作量。这可以通过使用gcloud export sql命令和——unload标签来实现。
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,它是有效的。