我在构建托管在 Azure Synapse 中的数据平台 Spark 数据库的一系列管道方面遇到问题。
管道托管启用了“重新创建表”的数据流。数据流提取数据并应该在每次管道运行时重新创建表。在作业开始时还有一个步骤可以删除所有表。然而,作业在作业的不同阶段随机失败,并出现如下所示的错误(敏感的系统详细信息已被删除):
目标上的操作失败:{“StatusCode”:“DFExecutorUserError”,“Message”:“作业失败,原因是:在接收器'sinkname'处:将分区之一中的数据写入到集群节点之一时,Spark作业失败接收器,出现以下错误消息:无法重命名VersionedFileStatus{VersionedFileStatus{path=abfss://synapsename.dfs.core.windows.net/synapse/workspaces/synapsename/warehouse/databasename.db/tablename/.name 已删除/_temporary/0/_temporary/idremoved/part-idremoved。 snappy.parquet; isDirectory=false;复制=1;修改时间=1731778904698;所有者=81aba2ef-674d-4bcb-a036-f4ab2ad78d3e;权限=rw-r-----; ; isEncrypted = false; isErasureCoded=false}; version='0x8DD0665F02661DC'} 到 abfss://[电子邮件受保护]/synapse/workspaces/synapsename/warehouse/dataplatform","详细信息":null}
这可能会在任何 Spark 数据库表加载时随机发生,或者可能在第二天根本不会发生,并且可能会在几天后再次发生。
为了解决这个问题,我们进入Synapse后端数据湖存储并手动删除Spark数据库表(parquet文件)并重新运行作业,然后它就成功了。尝试增加资源,包括 Spark 运行时间。
大家有什么想法吗?
您似乎正在处理一个间歇性问题,即 Spark 在尝试重命名数据湖中的临时文件时失败,可能是由于文件锁定或竞争条件。由于手动删除表可以暂时解决该问题,因此这表明存在剩余文件问题或存储中存在某些争用。您可以尝试调整数据分区方式,以减少多个进程同时尝试写入同一文件的机会,或者扩展 Spark 资源以处理更多并行性。在每次运行之前添加清理步骤以清除任何旧文件或锁也可能有所帮助。另外,检查您的 Azure 存储是否受到限制或遇到其他性能问题。最后,启用这些文件操作的重试可以帮助使工作更加稳健地应对这些偶尔出现的问题。