将数据从 Databricks 加载到 Azure SQL 时的性能问题
Posted
技术标签:
【中文标题】将数据从 Databricks 加载到 Azure SQL 时的性能问题【英文标题】:Performance issues in loading data from Databricks to Azure SQL 【发布时间】:2021-02-24 22:44:29 【问题描述】:我正在尝试使用 Microsoft 最近发布的支持 Python API 和 Spark 3.0 的 connector 将 100 万条记录从 Databricks 中的 Delta 表加载到 Azure SQL 数据库。
对我来说,性能看起来并不出色。加载 100 万条记录需要 19 分钟。下面是我正在使用的代码。你认为我在这里遗漏了什么吗?
配置: 8 个 Worker 节点,28GB 内存和 8 个内核。 Azure SQL 数据库是 4 vcore Gen5。
try:
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("overwrite") \
.option("url", url) \
.option("dbtable", "lending_club_acc_loans") \
.option("user", username) \
.option("password", password) \
.option("tableLock", "true") \
.option("batchsize", "200000") \
.option("reliabilityLevel", "BEST_EFFORT") \
.save()
except ValueError as error :
print("Connector write failed", error)
我可以做些什么来提高性能吗?
【问题讨论】:
您确定这是在 Databricks 还是 Azure SQL 端?当您运行此程序时,您在 SQL 中看到的等待类型是什么?您可以简单地受到 SQL 端的日志吞吐量的限制 - 在这种情况下,解决方案是在负载期间扩大您的 SQL 数据库,然后再次缩小 我不确定 Martin 问题出在哪里。我不认为扩展数据库会产生任何差异,因为数据库是一个非常强大的数据库。 DB 上的 I/O 非常低且受控制。所以我假设问题出在 Databricks 端。与此处的选项有关。 你确定数据库吗?看看下面的youtube.com/… 从 1:39:00 开始,以获取有关 Log Rate Governance 的信息,即使 CPU 消耗和数据 I/O 看起来很低,它仍然可能发生 好的。你说的也是。有点帮助... CPU 和内存等待时间非常短并且可以接受。但是 Network Io 等待时间相当长。 我刚刚在问题上添加了截图.. 【参考方案1】:重新分区数据框。早些时候,我在源数据帧上有一个分区,重新分区为 8 有助于提高性能。
【讨论】:
以上是关于将数据从 Databricks 加载到 Azure SQL 时的性能问题的主要内容,如果未能解决你的问题,请参考以下文章
将数据表从 Databricks dbfs 导出到 azure sql 数据库
使用 /mnt/ 将数据从 Azure Blob 存储读取到 Azure Databricks
从 Azure Databricks 将数据写入 Azure Blob 存储