SQLServerException:数据工厂中的数据块 activity 导致连接关闭
SQLServerException: The connection is closed caused by databricks activity in Data Factory
我有一个 Azure 数据工厂管道,它并行启动 4 个 Databricks 活动。
这 4 个活动做几乎相同的事情:
在同一个数据库中的 4 个不同的 SQL 服务器表中写入不同的数据
val df= spark.sql("SELECT * FROM TAB1")
df
.write
.format("com.microsoft.sqlserver.jdbc.spark")
.mode("overwrite")
.option("truncate", value = true)
.option("reliabilityLevel", "BEST_EFFORT")
.option("tableLock", "false")
.option("url", url)
.option("dbtable", "dbo.TAB1")
.option("user", u)
.option("password", p)
.option("schemaCheckEnabled", "false")
.option("batchsize", "1048576")
.save()
我们注意到尽管作业成功执行,但有时会失败并显示:
SQLServerException: The connection is closed error
.
我们尝试在 SQL 中写入的数据需要 10 到 20 分钟才能完全完成。
我想也许我们并行执行 4 个作业是问题的根源,但我不确定。
感谢任何帮助。
正如您提到的那样,您正在 运行 并行进行 4 个 Databricks 活动,在这些活动中,您将数据写入同一数据库中的 4 个不同表,并且错误仅有时发生 - 所以有 您很可能在 SQL 服务器端遇到容量问题。
如果您使用的是 Azure SQL 数据库,您可以升级层,这应该可以正常工作。
另外,请确保 Azure Integration Runtime 有足够的内核和内存来运行 4 个并行管道。如果数据很大,IR 可能无法处理它。 创建一个新的 IR 并将其用于 运行 您的管道。 请参阅下图。
或者,您可以运行您的管道串行而不是并行,这将为数据库和 IR 留下足够的内存来处理数据。
我有一个 Azure 数据工厂管道,它并行启动 4 个 Databricks 活动。
这 4 个活动做几乎相同的事情: 在同一个数据库中的 4 个不同的 SQL 服务器表中写入不同的数据
val df= spark.sql("SELECT * FROM TAB1")
df
.write
.format("com.microsoft.sqlserver.jdbc.spark")
.mode("overwrite")
.option("truncate", value = true)
.option("reliabilityLevel", "BEST_EFFORT")
.option("tableLock", "false")
.option("url", url)
.option("dbtable", "dbo.TAB1")
.option("user", u)
.option("password", p)
.option("schemaCheckEnabled", "false")
.option("batchsize", "1048576")
.save()
我们注意到尽管作业成功执行,但有时会失败并显示:
SQLServerException: The connection is closed error
.
我们尝试在 SQL 中写入的数据需要 10 到 20 分钟才能完全完成。
我想也许我们并行执行 4 个作业是问题的根源,但我不确定。
感谢任何帮助。
正如您提到的那样,您正在 运行 并行进行 4 个 Databricks 活动,在这些活动中,您将数据写入同一数据库中的 4 个不同表,并且错误仅有时发生 - 所以有 您很可能在 SQL 服务器端遇到容量问题。
如果您使用的是 Azure SQL 数据库,您可以升级层,这应该可以正常工作。
另外,请确保 Azure Integration Runtime 有足够的内核和内存来运行 4 个并行管道。如果数据很大,IR 可能无法处理它。 创建一个新的 IR 并将其用于 运行 您的管道。 请参阅下图。
或者,您可以运行您的管道串行而不是并行,这将为数据库和 IR 留下足够的内存来处理数据。