Verbinding maken naar Azure Data Lake Storage Gen2 en Blob Storage

In dit artikel wordt uitgelegd hoe u vanuit Azure Databricks verbinding maakt met Azure Data Lake Storage Gen2 en Blob Storage.

Databricks raadt het gebruik van Unity Catalog aan om toegang tot Azure Data Lake Storage Gen2 en volumes te configureren voor directe interactie met bestanden. Zie Verbinding maken naar cloudobjectopslag met behulp van Unity Catalog.

Notitie

Verbinding maken naar Azure Data Lake Storage Gen2 of Blob Storage met behulp van Azure-referenties

De volgende referenties kunnen worden gebruikt voor toegang tot Azure Data Lake Storage Gen2 of Blob Storage:

  • OAuth 2.0 met een Microsoft Entra ID-service-principal: Databricks raadt aan microsoft Entra ID-service-principals te gebruiken om verbinding te maken met Azure Storage. Zie Access Storage met Microsoft Entra ID (voorheen Azure Active Directory) met behulp van een service-principal als u een Service-principal wilt maken en deze toegang wilt bieden tot Azure Storage-accounts.

    Als u een Service-principal voor Microsoft Entra ID wilt maken, moet u de Application Administrator rol of de Application.ReadWrite.All machtiging hebben in Microsoft Entra-id (voorheen Azure Active Directory). Als u rollen wilt toewijzen aan een opslagaccount, moet u een eigenaar of een gebruiker zijn met de rol User Access Beheer Azure RBAC in het opslagaccount.

  • Shared Access Signatures (SAS):u kunt SAS-tokens voor opslag gebruiken voor toegang tot Azure Storage. Met SAS kunt u de toegang tot een opslagaccount beperken met behulp van tijdelijke tokens met fijnmazig toegangsbeheer.

    U kunt alleen een SAS-tokenmachtigingen verlenen die u zelf hebt voor het opslagaccount, de container of het bestand.

  • Accountsleutels: U kunt toegangssleutels voor opslagaccounts gebruiken om de toegang tot Azure Storage te beheren. Toegangssleutels voor opslagaccounts bieden volledige toegang tot de configuratie van een opslagaccount, evenals de gegevens. Databricks raadt aan om een Microsoft Entra ID-service-principal of een SAS-token te gebruiken om verbinding te maken met Azure Storage in plaats van accountsleutels.

    Als u de toegangssleutels van een account wilt weergeven, moet u de rol Eigenaar, Inzender of Service voor sleuteloperator voor opslagaccounts hebben in het opslagaccount.

Databricks raadt aan geheime bereiken te gebruiken voor het opslaan van alle referenties. U kunt gebruikers, service-principals en groepen in uw werkruimte toegang verlenen om het geheime bereik te lezen. Hiermee worden de Azure-referenties beschermd, terwijl gebruikers toegang hebben tot Azure Storage. Zie Geheime bereiken als u een geheim bereik wilt maken.

Spark-eigenschappen instellen om Azure-referenties te configureren voor toegang tot Azure Storage

U kunt Spark-eigenschappen instellen om een Azure-referenties te configureren voor toegang tot Azure Storage. De referenties kunnen worden beperkt tot een cluster of een notebook. Gebruik toegangsbeheer voor clusters en notebooktoegangsbeheer samen om de toegang tot Azure Storage te beveiligen. Zie Toegangsbeheer voor clusters en samenwerken met Behulp van Databricks-notebooks.

Notitie

Service-principals van Microsoft Entra ID kunnen ook worden gebruikt voor toegang tot Azure Storage vanuit een SQL Warehouse. Zie Configuratie voor gegevenstoegang inschakelen.

Als u Spark-eigenschappen wilt instellen, gebruikt u het volgende fragment in de Spark-configuratie van een cluster of een notebook:

Azure-service-principal

Gebruik de volgende indeling om de Spark-clusterconfiguratie in te stellen:

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

U kunt dit gebruiken spark.conf.set in notebooks, zoals wordt weergegeven in het volgende voorbeeld:

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> met de naam van het geheime bereik van Databricks.
  • <service-credential-key> met de naam van de sleutel die het clientgeheim bevat.
  • <storage-account> met de naam van het Azure-opslagaccount.
  • <application-id> met de toepassings-id (client) voor de Microsoft Entra ID-toepassing.
  • <directory-id> met de map-id (tenant) voor de Microsoft Entra ID-toepassing.

Sas-tokens

U kunt SAS-tokens configureren voor meerdere opslagaccounts in dezelfde Spark-sessie.

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> met de naam van het Azure Storage-account.
  • <scope> met de naam van het geheime bereik van Azure Databricks.
  • <sas-token-key> met de naam van de sleutel die het SAS-token van Azure Storage bevat.

Accountsleutel

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> met de naam van het Azure Storage-account.
  • <scope> met de naam van het geheime bereik van Azure Databricks.
  • <storage-account-access-key> met de naam van de sleutel die de toegangssleutel van het Azure-opslagaccount bevat.

Toegang tot Azure Storage

Zodra u referenties goed hebt geconfigureerd voor toegang tot uw Azure-opslagcontainer, kunt u met behulp van URI's communiceren met resources in het opslagaccount. Databricks raadt het gebruik van het abfss stuurprogramma aan voor een betere beveiliging.

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');

Voorbeeld van notebook

AdLS Gen2 OAuth 2.0 met Microsoft Entra ID (voorheen Azure Active Directory) service-principals notebook

Notebook downloaden

Bekende problemen met Azure Data Lake Storage Gen2

Als u probeert toegang te krijgen tot een opslagcontainer die is gemaakt via Azure Portal, wordt mogelijk de volgende fout weergegeven:

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

Wanneer een hiƫrarchische naamruimte is ingeschakeld, hoeft u geen containers te maken via Azure Portal. Als u dit probleem ziet, verwijdert u de Blob-container via Azure Portal. Na enkele minuten hebt u toegang tot de container. U kunt uw abfss URI ook wijzigen om een andere container te gebruiken, zolang deze container niet is gemaakt via Azure Portal.

Zie bekende problemen met Azure Data Lake Storage Gen2 in de Microsoft-documentatie.

Afgeschafte patronen voor het opslaan en openen van gegevens vanuit Azure Databricks

Hier volgen afgeschafte opslagpatronen: