尝试从 Azure Databricks 将目录装载到 Azure Data Lake 时出错

Error when trying to mount a directory on Azure Data Lake from Azure Databricks

很多人在安装 Azure DataLake 容器时遇到问题,这个问题可能有多个根本原因。

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": "client_id", "fs.azure.account.oauth2.client.secret": "secret_value", "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/tenant_id/oauth2/token"}

dbutils.fs.mount( source = f"abfss://aggregated@{account_name}.dfs.core.windows.net/", mount_point = "/mnt/aggregated", extra_configs = 配置)

请注意错误信息。

ExecutionError:调用 o487.mount 时出错。 : 操作失败:“此请求无权执行此操作。”, 403, HEAD, https://.dfs.core.windows.net/aggregated/?upn=false&action= getAccessControl&timeout=90 在 shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.services.AbfsRestOperation.execute(AbfsRestOperation.java:246) 在 shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.services.AbfsClient.getAclStatus(AbfsClient.java:955) 在 shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.services.AbfsClient.getAclStatus(AbfsClient.java:937) 在 shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.getFileStatus(AzureBlobFileSystemStore.java:893)

许多人推荐了解决方案。先决条件之一是按照此处所述添加服务主体:https://docs.microsoft.com/en-us/azure/databricks/data/data-sources/azure/adls-gen2/#--mount-an-azure-data-lake-storage-gen2-account-using-a-service-principal-and-oauth-20

如果您的存储帐户没有关联服务主体,它将无法工作。这种情况下的许多答案都会告诉您检查您的权限和用户配置,因为您的堆栈跟踪中有一个 getAclStatus() 方法。

就我而言,AbfsRestOperation.execute(AbfsRestOperation.java:246) 上的错误消息指出这是防火墙的问题。一旦我打开所有 public 网络的流量,它就起作用了。