4

我正在尝试使用以下配置在 dattabricks 中安装 adls gen2

configs = {"fs.azure.account.auth.type": "OAuth",
   "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
   "fs.azure.account.oauth2.client.id": "service principal id",
   "fs.azure.account.oauth2.client.secret": "service principal key",
   "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/tenant-id/oauth2/token",
   "fs.azure.createRemoteFileSystemDuringInitialization": "true"}
dbutils.fs.mount(
source = "abfss://file-system@storage-account.dfs.core.windows.net/directory",
mount_point = "/mnt/data",
extra_configs = configs)

我已经创建了服务主体并为其创建了密钥,然后在 Active Directory 角色分配中向该服务主体提供了存储 blob 角色

根据文件

"abfss://<your-file-system-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>"

blob 容器内的 your-file-system ==> 文件夹应该是什么?you-directory-name ==> 我在 blob 容器内只有一个文件夹,所以在这里混淆 storgae(ADLS gen 2 preview) Blob Container folder a.txt

错误


ExecutionError:调用 o480.mount 时出错。头https://xxxxxxxxx.dfs.core.windows.net/xxxxxx?resource=filesystem&timeout=90 StatusCode=403 StatusDescription=此请求无权使用此权限执行此操作。ErrorCode= ErrorMessage= 在 shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.services.AbfsRestOperation.execute(AbfsRestOperation.java:134) 在 shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs。 services.AbfsClient.getFilesystemProperties(AbfsClient.java:197) 在 shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.getFilesystemProperties(AzureBlobFileSystemStore.java:214) 在 shaded.databricks.v20180920_b33d810.org.apache。 hadoop.fs.azurebfs.AzureBlobFileSystem.fileSystemExists(AzureBlobFileSystem.java:749) 在 shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.initialize(AzureBlobFileSystem.java:

4

3 回答 3

4

Gen2 湖没有容器,它们有文件系统(这是一个非常相似的概念)。

在您的存储帐户上,您是否启用了“分层命名空间”功能?您可以在存储帐户的配置刀片中看到这一点。如果您有,则存储帐户是 Lake Gen2 - 如果不是,它只是一个 Blob 存储帐户,您需要按照使用 Blob 存储的说明进行操作。

假设您已经设置了该功能,那么您可以看到 FileSystems 刀片 - 在那里您可以创建文件系统,其方式与 blob 容器非常相似。这是您在 abfss URL 开头需要的名称。

但是,您收到的错误消息向我表明您的服务主体没有数据湖的权限。您应该使用存储帐户资源的 RBAC 角色授予权限(添加到存储帐户参与者或读者)。或者使用存储资源管理器在更精细的级别授予权限。

请记住,数据湖需要对从根目录到您尝试读取/写入的文件夹的每个文件夹的执行权限。作为测试,首先尝试从根目录读取文件。

于 2019-03-03T12:15:42.867 回答
2

我们遇到了类似的错误,使用 RBAC 我们已将所有者角色授予存储帐户上的服务主体,但它不起作用,您必须授予此处列出的角色才能访问目录/容器:https ://docs.microsoft .com/en-us/azure/storage/blob/data-lake-storage-access-control-model#role-based-access-control-azure-rbac

于 2021-07-06T22:07:46.377 回答
-5

我刚刚为此苦苦挣扎并更正了此设置名称:

"fs.azure.account.oauth.provider.type"

"fs.azure.account.oauth2.provider.type"

执行成功。

于 2019-03-23T17:15:07.890 回答