尝试从 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 网络的流量,它就起作用了。
很多人在安装 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://
许多人推荐了解决方案。先决条件之一是按照此处所述添加服务主体: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 网络的流量,它就起作用了。