我现在正在研究一个用例,需要将大量数据(约 10M 行)从 Azure Databricks 物化视图提取到 Azure SQL 数据库。该数据库使用弹性标准 (eDTU 50) 作为定价层。我已经在Databricks端实施了各种优化措施,但spark作业根本没有运行!这让我想知道瓶颈是否实际上是在数据库而不是 Spark 配置上。
try:
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("overwrite") \
.option("url", sql_db_url) \
.option("dbtable", target_table) \
.option("user", username) \
.option("password", password) \
.option("batchsize", "100000") \
.option("tableLock", "true") \
.option("schemaCheckEnabled", "false") \
.option("reliability Level", "BEST_EFFORT") \
.save()
print("Successfully write data into target SQL database")
except Exception as error:
print("An exception occurred:", error)
(每当在Databricks上运行插入语句时,DB的CPU利用率就达到100%)
感谢任何建议
尝试了 Databricks 中的各种优化措施以及不同的集群大小。
就像 Anupam 所说,对于这样的工作负载,您的瓶颈很可能是 50 eDTU。您那里的图表仅显示 DTU,并且它飙升至 100%;为了更好地理解,请将 DTU 指标替换为 CPU、数据 IO 和日志 IO(DTU 主要由这些组成)。 日志 IO 可能是您的瓶颈,因为您要将数据转储到数据库中。如果您还看到 CPU 和 Workers 较高,那么您也可能缺少索引。