首页 > 解决方案 > 使用突触笔记本中的多个链接服务在多个路径中读取/写入一个 azure gen2 存储帐户中的数据

问题描述

使用突触笔记本中的多个链接服务在多个路径中读取/写入一个 azure gen2 存储帐户中的数据。我们无法使用单个链接服务读取,因为我们有多个 SPN 可以访问所有路径。

我遵循的实现相同的步骤 1. 使用不同的 SPN1 创建指向 gen2 存储的多重链接服务,SPN2
linked_service_name = 'ln_spn1_path_1' spark.conf.set('spark.storage.synapse.linkedServiceName',linked_service_name) spark.conf .set('fs.azure.account.oauth.provider.type','com.microsoft.azure.synapse.tokenlibrary.LinkedServiceBasedTokenProvider')

  1. 使用 spn 2 创建链接服务 ln_spn2_path_2 并指向 path2

    **linked_service_name = 'ln_spn2_path_2' spark.conf.set('spark.storage.synapse.linkedServiceName',linked_service_name) spark.conf.set('fs.azure.account.oauth.provider.type','com.microsoft. azure.synapse.tokenlibrary.LinkedServiceBasedTokenProvider')

     mssparkutils.fs.ls("abfss://container@storaegaccount.dfs.core.windows.net/path2")**
    

如果以上两个commands都在同一个突触笔记本中运行,那么我们将得到以下错误,我们稍后再运行

Py4JJavaError:调用 z:mssparkutils.fs.ls 时出错。: java.nio.file.AccessDeniedException: Operation failed: "This request is not authorized to perform this operation using this permission.", 403, GET, AuthorizationPermissionMismatch, "This request is not authorized to perform this operation using this permission. RequestId: 8853fd20-001f-0018-0347-bf3712000000 时间:2021-10-12T08:57:13.0513182Z"

我们可以使用同一笔记本中的不同链接服务读取数据吗?

标签: azureazure-synapse

解决方案


更新:我在突触笔记本中使用多个链接服务在多个路径中测试了 azure gen2 存储帐户。

链接服务:ADLSGen2_chepra 与名为 Linked_service_name 的笔记本

在此处输入图像描述

链接服务:AzureDataLakeStorage_chepragen2 与名为 Linked_service_name 的笔记本

在此处输入图像描述

注意:存储 Blob 数据贡献者:用于授予对 Blob 存储资源的读/写/删除权限。

如果您没有将“存储 Blob 数据贡献者”分配给其他突触用户,他们将无法访问来自 ADLS gen2 的数据,因为缺少存储帐户的权限。

在此处输入图像描述

如果他们尝试在存储帐户上没有“存储 Blob 数据参与者”角色的情况下从 ADLS gen2 访问数据,他们将收到以下错误消息:

Py4JJavaError: An error occurred while calling z:mssparkutils.fs.ls. : java.nio.file.AccessDeniedException: Operation failed: "This request is not authorized to perform this operation using this permission.", 403

在此处输入图像描述

参考:向工作区托管标识授予权限


推荐阅读