我正在尝试将s3中的数据加载到aurora mysql示例中。我用pyspark做的,它的性能是每小时4GB。
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 ',';
通过这种方式,它每小时向mysql加载5gb。
我有将近2 tb的数据需要加载到mysql示例中。有没有什么方法可以更快地加载数据。
1条答案
按热度按时间aemubtdh1#
一些随意的想法;我希望有人能帮上忙:
增加两侧分配的iops(如果你能得到一些指标,你就可以决定哪一方需要更多。)
是什么
s3://...
--听起来像是进入了一个远程文件系统?有多遥远?如果它相当遥远,可以考虑将文件压缩并复制到更近的位置,然后解压缩(因为
LOAD
没有解压缩选项)。远程。。。也许你的网络带宽有限?
运行
LOADs
同时进行。有多少?很难说。可能一端的iops是限制因素。表上的索引数量是否“过多”?这可能会减慢速度
LOAD
. 删除索引可以加快LOAD
,但以后需要重新添加索引。要点是去掉不需要的索引。已将源文件排序
PRIMARY KEY
秩序会加快的LOAD
(假设目标模式已经定义了pk,它应该这样做)。当然,对文件进行预排序需要时间,因此需要权衡。