我正在尝试将 S3 中的数据加载到 Aurora MySQL 实例中。我是使用 PySpark 完成的,其性能为每小时 4 GB。
current_df.write.format('jdbc').options(
url=url,
driver=jdbc_driver,
dbtable=table_name,
user=username,
password=password).mode("overwrite").save()
添加了一些性能改进并观察到性能有所提高(每小时 7 GB),但仍然不是那么好。
添加到 JDBC URL 的参数
useServerPrepStmts=false&rewriteBatchedStatements=true
我尝试了另一种方法
LOAD DATA FROM S3 's3://${s3.bucket}/${filename}' INTO TABLE ${TableName} FIELDS TERMINATED BY ',';
通过这种方式,它可以每小时将 5 GB 数据加载到 MySQL 中。
我有将近 2 TB 的数据需要加载到 MySQL 实例中。有什么方法可以更快地加载数据。
最佳答案
一些随意的想法;我希望有些人会有所帮助:
- 在两侧 增加分配的 IOPS。 (如果您可以获得一些指标,您也许可以决定哪一边需要更多。)
- 什么是
s3://...
-- 听起来像是进入远程文件系统?有多远? - 如果距离很远,请考虑将文件压缩并复制到更近的地方,然后解压缩(因为
LOAD
没有解压缩选项)。 - 远程...也许您的网络带宽有限?
- 并行运行
LOADs
。多少?这很难说。一端或另一端的 IOPS 可能是限制因素。 - 您的表中是否有“过多”的索引?这可能会减慢
LOAD
。删除索引可以加快LOAD
的速度,但您需要稍后重新添加索引。要点是摆脱不需要的索引。 - 源文件已经按
PRIMARY KEY
顺序排序将加快LOAD
(假设目标模式已经定义了PK,这是应该的)。当然,预排序文件需要时间,因此需要权衡。
关于mysql - 将 S3 数据加载到 Aurora MySQL 实例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50156288/