在 Azure Databricks 上掛接雲端物件儲存體

重要

DBFS 掛載是一種已棄用的模式,且與 Databricks 的無伺服器運算架構不相容。 新帳號在無法使用這些功能的情況下被設定。 Databricks 建議改用 Unity Catalog 外部位置 。

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 提供者 自動掛載 Bucket,使用 databricks_mount。

卸載掛載點

若要卸載裝入點,請使用下列命令:

dbutils.fs.unmount("/mnt/<mount-name>")

警告

為避免錯誤,請勿在其他工作讀取或寫入時修改掛接點。 修改掛接之後,請一律在所有其他執行中的叢集上執行 dbutils.fs.refreshMounts(),以傳播任何掛接更新。 請參閱 refreshMounts 命令 (dbutils.fs.refreshMounts)。

使用 ABFS 掛接 ADLS 或 Blob 記憶體

您可以使用 Microsoft Entra ID 應用程式服務主體進行驗證,將資料掛載到 Azure 儲存帳戶中。 如需詳細資訊,請參閱 連線至 Azure Data Lake Storage 和 Blob 儲存體。

重要

  • Azure Databricks 工作區中的所有使用者都可以存取掛接的 ADLS 帳戶。 您用來存取 ADLS 帳戶的服務主體應該只授與該 ADLS 帳戶的存取權;它不應該被授與其他 Azure 資源的存取權。
  • 當您透過叢集建立裝入點時,叢集使用者可以立即存取裝入點。 若要在另一個執行中叢集使用掛接點,您必須在執行中叢集上執行 dbutils.fs.refreshMounts(),讓新建立的掛接點可供使用。
  • 在作業執行時卸載掛載點可能會導致錯誤。 請確定產品作業不會在處理過程中卸除儲存裝置。
  • 使用秘密的掛接點不會自動重新整理。 如果掛載的儲存裝置依賴會被輪替、過期或刪除的秘密,可能會發生錯誤,例如 401 Unauthorized。 若要解決這類錯誤,您必須卸除並重新掛接記憶體。
  • 階層命名空間 (HNS) 必須啟用,才能使用 ABFS 端點成功掛接 Azure Data Lake Storage 儲存器帳戶。

在您的筆記本中執行下列命令,以驗證並建立裝入點。

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)

替換

  • <application-id> 具有 Azure Active Directory 應用程式的應用程式 (用戶端) 識別碼。
  • 具有 Databricks 祕密範圍名稱的 <scope-name>。
  • 具有包含用戶端祕密之金鑰名稱的 <service-credential-key-name>。
  • <directory-id> 具有 Azure Active Directory 應用程式的目錄(租用戶)標識碼。
  • <container-name> ADLS 記憶體帳戶中容器的名稱。
  • <storage-account-name> 具有ADLS記憶體帳戶名稱。
  • <mount-name> 與 DBFS 中預期掛載點的名稱一起使用。