解决 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 第 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 中的异常:操作失败:“此终结点不支持 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 工作区 MSI、登录用户或Microsoft Entra ID中的应用程序注册。 所有者、参与者、读者和存储帐户参与者等角色使安全主体能够管理存储帐户。
访问控制列表
使用访问控制列表 (ACL) 应用对目录和文件的详细访问级别。
- 如果找到安全主体的数据访问角色(如存储 Blob 数据读取者或存储 Blob 数据参与者),则会运行检查来验证该角色是否有权执行写入、读取和删除等操作。 如果是这样,安全主体可能会基于容器角色访问所有文件和文件夹。
- 文件或文件夹没有额外的 ACL 检查。
- 如果在存储容器级别找不到安全主体的数据访问角色,则会对文件和文件夹运行 ACL 检查。