Apache spark 将数据从Databricks加载到Azure SQL时的性能问题
我正在尝试使用Microsoft最近发布的支持Python API和Spark 3.0的版本,将100万条记录从Databricks中的Delta表加载到Azure SQL数据库 在我看来,表演并不真的很棒。加载100万条记录需要19分钟。下面是我正在使用的代码。你认为我在这里遗漏了什么吗 配置: 8个工作节点,具有28GB内存和8个内核。 Azure SQL数据库是一个4 vcore Gen5Apache spark 将数据从Databricks加载到Azure SQL时的性能问题,apache-spark,apache-spark-sql,azure-sql-database,databricks,Apache Spark,Apache Spark Sql,Azure Sql Database,Databricks,我正在尝试使用Microsoft最近发布的支持Python API和Spark 3.0的版本,将100万条记录从Databricks中的Delta表加载到Azure SQL数据库 在我看来,表演并不真的很棒。加载100万条记录需要19分钟。下面是我正在使用的代码。你认为我在这里遗漏了什么吗 配置: 8个工作节点,具有28GB内存和8个内核。 Azure SQL数据库是一个4 vcore Gen5 try: df.write \ .format("com.microsoft.
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)
我能做些什么来提高性能吗
重新划分数据帧。早些时候,我在源数据帧上有一个分区,重新分区到8有助于提高性能。重新分区数据帧。早些时候,我的源数据帧上有一个分区,当重新分区为8时,这有助于提高性能。您确定这是在DataRicks还是Azure SQL端吗?运行此命令时,SQL中的等待类型是什么?您可能只是被SQL端的日志吞吐量限制了—在这种情况下,解决方案是在负载期间放大SQL DB,然后再缩小。我不确定问题出在哪里。我不认为扩展数据库会造成任何差异,因为数据库是一个非常强大的数据库。DB上的I/O非常低且处于控制之下。因此,我假设问题出在Databricks端。与这里的选项有关。你确定数据库吗?从1:39:00开始查看以下内容,以获取有关日志率管理的信息,即使CPU消耗和数据I/O看起来很低,日志率管理仍然会发生。你说的也是。有点帮助。。。CPU和内存等待时间非常短,可以接受。但是网络Io等待时间很长。我刚刚添加了问题的屏幕截图。你确定这是在Databricks还是Azure SQL端吗?运行此命令时,SQL中的等待类型是什么?您可能只是被SQL端的日志吞吐量限制了—在这种情况下,解决方案是在负载期间放大SQL DB,然后再缩小。我不确定问题出在哪里。我不认为扩展数据库会造成任何差异,因为数据库是一个非常强大的数据库。DB上的I/O非常低且处于控制之下。因此,我假设问题出在Databricks端。与这里的选项有关。你确定数据库吗?从1:39:00开始查看以下内容,以获取有关日志率管理的信息,即使CPU消耗和数据I/O看起来很低,日志率管理仍然会发生。你说的也是。有点帮助。。。CPU和内存等待时间非常短,可以接受。但是网络Io等待时间很长。我刚刚添加了问题的屏幕截图。。