Connect to Azure Data Lake Storage Gen2 and Blob Storage

Uwaga

W tym artykule opisano starsze wzorce konfigurowania dostępu do usługi Azure Data Lake Storage Gen2. Usługa Databricks zaleca używanie wykazu aparatu Unity do konfigurowania dostępu do usługi Azure Data Lake Storage Gen2 i woluminów w celu bezpośredniej interakcji z plikami. Zobacz Połączenie do magazynu obiektów w chmurze przy użyciu wykazu aparatu Unity.

W tym artykule wyjaśniono, jak nawiązać połączenie z usługą Azure Data Lake Storage Gen2 i usługą Blob Storage z usługi Azure Databricks.

Uwaga

Połączenie do usługi Azure Data Lake Storage Gen2 lub usługi Blob Storage przy użyciu poświadczeń platformy Azure

Następujące poświadczenia mogą służyć do uzyskiwania dostępu do usługi Azure Data Lake Storage Gen2 lub usługi Blob Storage:

  • OAuth 2.0 z jednostką usługi Microsoft Entra ID: usługa Databricks zaleca używanie jednostek usługi Microsoft Entra ID w celu nawiązania połączenia z usługą Azure Storage. Aby utworzyć jednostkę usługi Microsoft Entra ID i zapewnić jej dostęp do kont usługi Azure Storage, zobacz Access storage with Microsoft Entra ID (dawniej Azure Active Directory) using a service principal (Uzyskiwanie dostępu do magazynu przy użyciu identyfikatora entra firmy Microsoft) przy użyciu jednostki usługi.

    Aby utworzyć jednostkę usługi Microsoft Entra ID, musisz mieć Application Administrator rolę lub Application.ReadWrite.All uprawnienie w usłudze Microsoft Entra ID (dawniej Azure Active Directory). Aby przypisać role na koncie magazynu, musisz być właścicielem lub użytkownikiem z rolą administratora RBAC platformy Azure na koncie magazynu.

  • Sygnatury dostępu współdzielonego (SAS): do uzyskiwania dostępu do usługi Azure Storage można użyć tokenów SAS magazynu. Za pomocą sygnatury dostępu współdzielonego można ograniczyć dostęp do konta magazynu przy użyciu tokenów tymczasowych z szczegółową kontrolą dostępu.

    Możesz przyznać tylko uprawnienia tokenu SAS, które masz na koncie magazynu, kontenerze lub pliku samodzielnie.

  • Klucze konta: możesz użyć kluczy dostępu do konta magazynu, aby zarządzać dostępem do usługi Azure Storage. Klucze dostępu do konta magazynu zapewniają pełny dostęp do konfiguracji konta magazynu, a także danych. Usługa Databricks zaleca używanie jednostki usługi Microsoft Entra ID lub tokenu SAS w celu nawiązania połączenia z usługą Azure Storage zamiast kluczy kont.

    Aby wyświetlić klucze dostępu konta, musisz mieć rolę właściciela, współautora lub operatora klucza konta magazynu na koncie magazynu.

Usługa Databricks zaleca używanie zakresów wpisów tajnych do przechowywania wszystkich poświadczeń. Możesz przyznać użytkownikom, jednostkom usługi i grupom w obszarze roboczym dostęp do odczytu zakresu wpisu tajnego. Chroni to poświadczenia platformy Azure, umożliwiając użytkownikom dostęp do usługi Azure Storage. Aby utworzyć zakres wpisów tajnych, zobacz Zakresy wpisów tajnych.

Ustawianie właściwości platformy Spark w celu skonfigurowania poświadczeń platformy Azure w celu uzyskania dostępu do usługi Azure Storage

Możesz ustawić właściwości platformy Spark, aby skonfigurować poświadczenia platformy Azure w celu uzyskania dostępu do usługi Azure Storage. Poświadczenia mogą być ograniczone do klastra lub notesu. Użyj kontroli dostępu do klastra i kontroli dostępu do notesu razem, aby chronić dostęp do usługi Azure Storage. Zobacz Uprawnienia obliczeniowe i Współpraca przy użyciu notesów usługi Databricks.

Uwaga

Jednostki usługi Microsoft Entra ID mogą być również używane do uzyskiwania dostępu do usługi Azure Storage z usługi SQL Warehouse, zobacz Włączanie konfiguracji dostępu do danych.

Aby ustawić właściwości platformy Spark, użyj następującego fragmentu kodu w konfiguracji platformy Spark klastra lub notesu:

Jednostka usługi platformy Azure

Użyj następującego formatu, aby ustawić konfigurację platformy Spark klastra:

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

Możesz użyć spark.conf.set w notesach, jak pokazano w poniższym przykładzie:

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Replace

  • <secret-scope> z nazwą zakresu wpisu tajnego usługi Databricks.
  • <service-credential-key> z nazwą klucza zawierającego klucz tajny klienta.
  • <storage-account> z nazwą konta usługi Azure Storage.
  • <application-id>z identyfikatorem aplikacji (klienta) dla aplikacji Microsoft Entra ID.
  • <directory-id>z identyfikatorem katalogu (dzierżawy) dla aplikacji Microsoft Entra ID.

Tokeny SAS

Tokeny SAS można skonfigurować dla wielu kont magazynu w tej samej sesji platformy Spark.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Replace

  • <storage-account> przy użyciu nazwy konta usługi Azure Storage.
  • <scope> z nazwą zakresu wpisu tajnego usługi Azure Databricks.
  • <sas-token-key> z nazwą klucza zawierającego token SAS usługi Azure Storage.

Klucz konta

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Replace

  • <storage-account> przy użyciu nazwy konta usługi Azure Storage.
  • <scope> z nazwą zakresu wpisu tajnego usługi Azure Databricks.
  • <storage-account-access-key> z nazwą klucza zawierającego klucz dostępu do konta usługi Azure Storage.

Uzyskiwanie dostępu do usługi Azure Storage

Po prawidłowym skonfigurowaniu poświadczeń w celu uzyskania dostępu do kontenera usługi Azure Storage możesz wchodzić w interakcje z zasobami na koncie magazynu przy użyciu identyfikatorów URI. Usługa Databricks zaleca używanie sterownika w abfss celu zwiększenia bezpieczeństwa.

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

Przykładowy notes

Notes jednostek usługi ADLS Gen2 OAuth 2.0 z identyfikatorem Entra firmy Microsoft (dawniej Azure Active Directory)

Pobierz notes

Znane problemy z usługą Azure Data Lake Storage Gen2

Jeśli spróbujesz uzyskać dostęp do kontenera magazynu utworzonego za pośrednictwem witryny Azure Portal, może zostać wyświetlony następujący błąd:

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

Po włączeniu hierarchicznej przestrzeni nazw nie trzeba tworzyć kontenerów za pośrednictwem witryny Azure Portal. Jeśli widzisz ten problem, usuń kontener obiektów blob za pośrednictwem witryny Azure Portal. Po kilku minutach możesz uzyskać dostęp do kontenera. Alternatywnie możesz zmienić abfss identyfikator URI tak, aby używał innego kontenera, o ile ten kontener nie zostanie utworzony w witrynie Azure Portal.

Zobacz Znane problemy z usługą Azure Data Lake Storage Gen2 w dokumentacji firmy Microsoft.

Przestarzałe wzorce przechowywania danych i uzyskiwania do nich dostępu z usługi Azure Databricks

Poniżej przedstawiono przestarzałe wzorce magazynu: