解决 Azure Synapse Analytics Apache Spark 池存储访问问题
适用对象:Azure Synapse Analytics
Apache Spark 是并行处理框架,支持使用内存中处理来提升大数据分析应用程序的性能。 Azure Synapse Analytics 中的 Apache Spark 是云中 Apache Spark 的Microsoft实现之一。 使用 Azure Synapse 可以在 Azure 中轻松创建和配置无服务器 Apache Spark 池。 Azure Synapse 中的 Spark 池与 Azure 存储和 Azure Data Lake Generation 2 存储兼容。 因此,可以使用 Spark 池来处理 Azure 中存储的数据。
如果遇到池存储访问问题(例如“403”错误或 Synapse 工作区未能找到链接服务),请使用提供的指南来帮助解决问题。
不支持的方案
从 Synapse Spark 池连接到存储帐户时,不支持以下用例:
- 连接到 ADLS Gen 1 存储帐户
- 使用用户分配的托管标识连接到 ADLS Gen 2 存储帐户
- 连接到具有以下功能的 ADLS Gen 2 存储帐户:
- 共享 VNET Synapse 工作区
- 已启用防火墙的存储帐户
常见问题和解决方案
错误 | 解决方案 |
---|---|
“errorMessage”:“LSRServiceException 为 [{”StatusCode“:400,”ErrorResponse“:{”code“:”LSRLinkedServiceFailure“,”message“:”找不到链接服务 AzureDataLakeStorage1; | 如果 Synapse 工作区与 Git 存储库、Azure DevOps Services 或 GitHub 相关联,则会生成此错误。 如果未发布笔记本或链接服务等项目,也会生成它。 将协作分支中的代码更改手动发布到 Synapse 服务。 |
stdout: 线程异常 "main" org.apache.hadoop.fs.FileAlreadyExistsException: Operation failed: "此终结点不支持 BlobStorageEvents 或 SoftDelete。 如果要使用此终结点,请禁用这些帐户功能。“,409,HEAD,https://< storageaccountname.dfs.core.windows.net/scripts/?upn=false&action=getAccessControl&timeout=90> | 验证 ADLS Gen 2 存储是否已配置为 主存储。 若要禁用 SoftDelete,请清除 存储帐户的“启用 Blob 软删除 ”复选框。 |
排查“403”问题
存储访问和帐户访问
- 若要通过管道写入存储,Synapse Workspace MSI 是运行存储上的任何操作(如读取、写入和删除)的安全主体。
- 请确保工作区 MSI 帐户具有存储 Blob 数据参与者角色来执行所有操作。
- 如果使用 Azure Notebooks 访问存储帐户,请使用登录帐户,除非通过链接服务访问存储。
- 登录的用户帐户应具有存储 Blob 数据参与者角色,才能具有完全访问权限和权限。
- 若要连接到存储,请使用链接服务和服务主体身份验证。 然后,应在 Azure 存储上为在 Azure Active 中注册的应用程序分配“存储 Blob 数据参与者”。
对于存储中基于角色的访问控制 (RBAC) 实现,在容器级别控制细节。 有关详细信息,请参阅 Azure Data Lake Storage Gen2 中的访问控制模型。
Azure 基于角色的访问控制
Azure 基于角色的访问控制使用角色分配将权限集应用于安全主体,例如 Synapse Workspace MSI、登录用户或Microsoft Entra ID 中的应用程序注册。 所有者、参与者、读者和存储帐户参与者等角色使安全主体能够管理存储帐户。
访问控制列表
使用访问控制列表(ACL)应用对目录和文件的详细访问级别。
- 如果为安全主体找到了存储 Blob 数据读取者或存储 Blob 数据参与者等数据访问角色,则会运行检查以验证该角色是否有权执行写入、读取和删除等操作。 如果是这样,安全主体可能会基于容器角色访问所有文件和文件夹。
- 文件或文件夹没有额外的 ACL 检查。
- 如果在存储容器级别找不到安全主体的数据访问角色,则 ACL 检查在文件和文件夹上运行。