无法使用 Databricks 列出 Azure Storage Gen 2 文件

Posted

技术标签:

【中文标题】无法使用 Databricks 列出 Azure Storage Gen 2 文件【英文标题】:Cannot list Azure Storage Gen 2 files with Databricks 【发布时间】:2021-03-04 04:03:12 【问题描述】:

我想知道我的 databricks 代码是否寻址正确的位置,以及“贡献者”权限是否足以访问存储。

    我有 Azure Storage Gen 2 和名为 staging 的容器。 (Azure 门户中的 URL 是 https://datalaketest123.blob.core.windows.net/staging) 我已使用 Azure Databricks 安装 Azure Storage Gen 2。 我已配置直通,并假设我可以通过我的 AD 用户访问存储。 (贡献者权利) 我有变量:source = 'abfss://' + in_fileSystemName + '@' + storageAccountName + '.dfs.core.windows.net/' 我现在尝试使用命令列出文件系统:dbutils.fs.ls(source)

我得到错误:

ET https://datalaketest123.dfs.core.windows.net/staging? 
resource=filesystem&maxResults=500&timeout=90&recursive=false
---------------------------------------------------------------------------
ExecutionError                            Traceback (most recent call last)
<command-1012822525241408> in <module>
 27 # COMMAND ----------
 28 source = 'abfss://' + in_fileSystemName + '@' + storageAccountName + '.dfs.core.windows.net/'
---> 29 dbutils.fs.ls(source)
 30 
 31 # COMMAND ----------

/local_disk0/tmp/1235891082005-0/dbutils.py in f_with_exception_handling(*args, **kwargs)
    312                     exc.__context__ = None
    313                     exc.__cause__ = None
--> 314                     raise exc
    315             return f_with_exception_handling
    316 

ExecutionError: An error occurred while calling z:com.databricks.backend.daemon.dbutils.FSUtils.ls.
: GET https://datalaketest123.dfs.core.windows.net/staging? 
resource=filesystem&maxResults=500&timeout=90&recursive=false
StatusCode=403
StatusDescription=This request is not authorized to perform this operation using this permission.
ErrorCode=AuthorizationPermissionMismatch

【问题讨论】:

【参考方案1】:

每 official Databricks docs 仅 Contributor 是不够的 - 它应该是 Storage Blob Data XXX(其中 XXX 是 OwnerContributorReader、...-see docs)

【讨论】:

【参考方案2】:

执行将应用程序分配给角色中的步骤时,请确保您的用户帐户具有分配给它的Storage Blob Data Contributor角色。

Repro:我已向服务主体提供所有者权限并尝试运行“dbutils.fs.ls("mnt/azure/")”,返回与上述相同的错误消息。

解决方案:现在将Storage Blob Data Contributor角色分配给服务主体。

最后,在将存储 Blob 数据参与者角色分配给服务主体后,能够获得没有任何错误消息的输出。

参考:“Tutorial: Azure Data Lake Storage Gen2, Azure Databricks & Spark”。

【讨论】:

以上是关于无法使用 Databricks 列出 Azure Storage Gen 2 文件的主要内容,如果未能解决你的问题,请参考以下文章

用于列出 Azure Databricks 中每个子目录中的文件的 Python 代码

如何从 Azure Databricks 在 Azure Blob 中创建一个空文件夹

Databricks Connect:无法连接到 azure 上的远程集群,命令:“databricks-connect test”停止

无法使用 jdbc 和 spark 连接器从 databricks 集群连接到 Azure 数据库 for MySQL 服务器

无法在 azure databricks 中使用 spark 读取 csv 文件

无法从 databricks pyspark 工作人员写入 Azure Sql DataWarehouse