[英]Azure Databricks: can't connect to Azure Data Lake Storage Gen2
我有存儲帳戶kagsa1
,里面有容器cont1
,需要通過 Databricks 訪問(安裝)它
如果我在 KeyVault 中使用存儲帳戶密鑰,它可以正常工作:
configs = {
"fs.azure.account.key.kagsa1.blob.core.windows.net":dbutils.secrets.get(scope = "kv-db1", key = "storage-account-access-key")
}
dbutils.fs.mount(
source = "wasbs://cont1@kagsa1.blob.core.windows.net",
mount_point = "/mnt/cont1",
extra_configs = configs)
dbutils.fs.ls("/mnt/cont1")
..但如果我嘗試使用 Azure Active Directory 憑據進行連接:
configs = {
"fs.azure.account.auth.type": "CustomAccessToken",
"fs.azure.account.custom.token.provider.class": spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
}
dbutils.fs.ls("abfss://cont1@kagsa1.dfs.core.windows.net/")
..它失敗:
ExecutionError: An error occurred while calling z:com.databricks.backend.daemon.dbutils.FSUtils.ls.
: GET https://kagsa1.dfs.core.windows.net/cont1?resource=filesystem&maxResults=5000&timeout=90&recursive=false
StatusCode=403
StatusDescription=This request is not authorized to perform this operation using this permission.
ErrorCode=AuthorizationPermissionMismatch
ErrorMessage=This request is not authorized to perform this operation using this permission.
Databrics Workspace 層是 Premium,
集群啟用了 Azure Data Lake Storage Credential Passthrough 選項,
存儲帳戶啟用了分層命名空間選項,
文件系統初始化為
spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "true")
dbutils.fs.ls("abfss://cont1@kagsa1.dfs.core.windows.net/")
spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "false")
我究竟做錯了什么?
注意:執行將應用程序分配給角色中的步驟時,請確保將存儲 Blob 數據參與者角色分配給服務主體。
作為重現的一部分,我已向服務主體提供所有者權限並嘗試運行“ dbutils.fs.ls("mnt/azure/") ”,返回與上述相同的錯誤消息。
現在將存儲 Blob 數據參與者角色分配給服務主體。
最后,在將存儲 Blob 數據參與者角色分配給服務主體后,能夠獲得 output 而沒有任何錯誤消息。
有關更多詳細信息,請參閱“ 教程:Azure Data Lake Storage Gen2、Azure Databricks & Spark ”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.