在 Azure Databricks 上掛接雲端物件儲存體
Azure Databricks 可讓使用者將雲端物件記憶體掛接至 Databricks 文件系統 (DBFS),以簡化不熟悉雲端概念的用戶的數據存取模式。 掛接的數據不適用於 Unity 目錄,Databricks 建議移轉不使用掛接,而是使用 Unity 目錄管理數據控管。
Azure Databricks 如何掛接雲端物件記憶體?
Azure Databricks 掛接會建立工作區與雲端物件記憶體之間的連結,可讓您使用與 Databricks 檔系統相關的熟悉檔案路徑來與雲端物件記憶體互動。 掛接的運作方式是建立目錄下的 /mnt
本機別名,以儲存下列資訊:
- 雲端物件記憶體的位置。
- 連線到記憶體帳戶或容器的驅動程序規格。
- 存取數據所需的安全性認證。
掛接記憶體的語法為何?
source
指定物件記憶體的 URI(而且可以選擇性地編碼安全性認證)。 指定 mount_point
目錄中的 /mnt
本機路徑。 某些物件儲存來源支持選擇性 encryption_type
自變數。 針對某些存取模式,您可以將其他組態規格當做字典傳遞至 extra_configs
。
注意
Databricks 建議使用 extra_configs
將掛接特定的 Spark 和 Hadoop 組態設定為選項。 這可確保組態會系結至掛接,而不是叢集或會話。
dbutils.fs.mount(
source: str,
mount_point: str,
encryption_type: Optional[str] = "",
extra_configs: Optional[dict[str:str]] = None
)
在設定或改變數據掛接之前,請先洽詢您的工作區和雲端系統管理員,因為設定不正確,可為工作區中的所有使用者提供不安全的存取權。
注意
除了本文所述的方法之外,您還可以使用 Databricks Terraform 提供者 自動掛接貯體,並 databricks_mount。
卸載入點
若要卸載裝入點,請使用下列命令:
dbutils.fs.unmount("/mnt/<mount-name>")
警告
若要避免錯誤,請勿在其他作業讀取或寫入時修改裝入點。 修改掛接之後,請一律在所有其他執行中的叢集上執行 dbutils.fs.refreshMounts()
,以傳播任何掛接更新。 請參閱 refreshMounts 命令 (dbutils.fs.refreshMounts) 。
使用 ABFS 掛接 ADLS Gen2 或 Blob 儲存體
您可以使用 Microsoft Entra ID(先前稱為 Azure Active Directory)應用程式服務主體,在 Azure 記憶體帳戶中掛接數據以進行驗證。 如需詳細資訊,請參閱 使用服務主體存取記憶體和 Microsoft Entra ID(Azure Active Directory)。
重要
- Azure Databricks 工作區中的所有使用者都可以存取掛接的 ADLS Gen2 帳戶。 您用來存取 ADLS Gen2 帳戶的服務主體應該只授與該 ADLS Gen2 帳戶的存取權;它不應該被授與其他 Azure 資源的存取權。
- 當您透過叢集建立裝入點時,叢集使用者可以立即存取裝入點。 若要在另一個執行中叢集使用掛接點,您必須在執行中叢集上執行
dbutils.fs.refreshMounts()
,讓新建立的掛接點可供使用。 - 在作業執行時卸載入點可能會導致錯誤。 請確定生產作業不會在處理時卸除記憶體。
- 使用秘密的掛接點不會自動重新整理。 如果掛接的記憶體依賴輪替、過期或刪除的秘密,可能會發生錯誤,例如
401 Unauthorized
。 若要解決這類錯誤,您必須卸除並重新掛接記憶體。 - 階層命名空間 (HNS) 必須啟用,才能使用 ABFS 端點成功掛接 Azure Data Lake 儲存體 Gen2 記憶體帳戶。
在您的筆記本中執行下列命令,以驗證並建立裝入點。
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": "<application-id>",
"fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
"fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}
# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
mount_point = "/mnt/<mount-name>",
extra_configs = configs)
val configs = Map(
"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" -> "<application-id>",
"fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
"fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
mountPoint = "/mnt/<mount-name>",
extraConfigs = configs)
Replace
<application-id>
具有 Azure Active Directory 應用程式的應用程式 (用戶端) 識別碼。<scope-name>
具有 Databricks 秘密範圍名稱。<service-credential-key-name>
包含客戶端密碼的金鑰名稱。<directory-id>
具有 Azure Active Directory 應用程式的目錄(租用戶)標識碼。<container-name>
具有ADLS Gen2記憶體帳戶中容器的名稱。<storage-account-name>
具有ADLS Gen2記憶體帳戶名稱。<mount-name>
具有 DBFS 中預期裝入點的名稱。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應