无法使用 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 是 Owner
、Contributor
、Reader
、...-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 服务器