Anslut till Azure Data Lake Storage Gen2 och Blob Storage
Kommentar
Den här artikeln beskriver äldre mönster för att konfigurera åtkomst till Azure Data Lake Storage Gen2. Databricks rekommenderar att du använder Unity Catalog för att konfigurera åtkomst till Azure Data Lake Storage Gen2 och volymer för direkt interaktion med filer. Se Ansluta till molnobjektlagring och -tjänster med hjälp av Unity Catalog.
Den här artikeln beskriver hur du ansluter till Azure Data Lake Storage Gen2 och Blob Storage från Azure Databricks.
Kommentar
- Den äldre Windows Azure Storage Blob-drivrutinen (WASB) har föråldrats. ABFS har många fördelar jämfört med WASB. Se Azure-dokumentationen på ABFS. Dokumentation om hur du arbetar med den äldre WASB-drivrutinen finns i Ansluta till Azure Blob Storage med WASB (äldre).
- Azure har meddelat att Azure Data Lake Storage Gen1 ska dras tillbaka. Azure Databricks rekommenderar att du migrerar alla data från Azure Data Lake Storage Gen1 till Azure Data Lake Storage Gen2. Om du inte har migrerat ännu kan du läsa Komma åt Azure Data Lake Storage Gen1 från Azure Databricks.
Ansluta till Azure Data Lake Storage Gen2 eller Blob Storage med azure-autentiseringsuppgifter
Följande autentiseringsuppgifter kan användas för att komma åt Azure Data Lake Storage Gen2 eller Blob Storage:
OAuth 2.0 med tjänstens huvudnamn för Microsoft Entra-ID: Databricks rekommenderar att du använder Tjänstens huvudnamn för Microsoft Entra-ID för att ansluta till Azure Data Lake Storage Gen2. Information om hur du skapar tjänstens huvudnamn för Microsoft Entra och ger den åtkomst till Azure-lagringskonton finns i Åtkomst till lagring med hjälp av tjänstens huvudnamn och Microsoft Entra-ID (Azure Active Directory).
Om du vill skapa ett microsoft entra-ID-tjänsthuvudnamn måste du ha
Application Administrator
rollen eller behörighetenApplication.ReadWrite.All
i Microsoft Entra-ID. För att kunna tilldela roller till ett lagringskonto måste du vara ägare eller ha rollen som Administratör för användaråtkomst i Azure RBAC för lagringskontot.Viktigt!
Blob Storage stöder inte Tjänstens huvudnamn för Microsoft Entra-ID.
Signaturer för delad åtkomst (SAS): Du kan använda SAS-token för lagring för att få åtkomst till Azure Storage. Med SAS kan du begränsa åtkomsten till ett lagringskonto med hjälp av tillfälliga token med detaljerad åtkomstkontroll.
Du kan bara bevilja en SAS-tokenbehörighet som du har på lagringskontot, containern eller filen själv.
Kontonycklar: Du kan använda åtkomstnycklar för lagringskonton för att hantera åtkomst till Azure Storage. Åtkomstnycklar för lagringskonto ger fullständig åtkomst till konfigurationen av ett lagringskonto samt data. Databricks rekommenderar att du använder tjänstens huvudnamn för Microsoft Entra-ID eller en SAS-token för att ansluta till Azure Storage i stället för kontonycklar.
Om du vill visa ett kontos åtkomstnycklar måste du ha rollen Ägare, Deltagare eller Nyckeloperatör för lagringskonto på lagringskontot.
Databricks rekommenderar att du använder hemliga omfång för att lagra alla autentiseringsuppgifter. Du kan ge användare, huvudkonto för tjänsten och grupper på din arbetsyta åtkomst för att läsa det hemliga omfånget. Detta skyddar Azure-autentiseringsuppgifterna samtidigt som användarna får åtkomst till Azure Storage. Information om hur du skapar ett hemligt omfång finns i Hemliga omfång.
Ange Spark-egenskaper för att konfigurera Azure-autentiseringsuppgifter för åtkomst till Azure Storage
Du kan ange Spark-egenskaper för att konfigurera azure-autentiseringsuppgifter för åtkomst till Azure Storage. Autentiseringsuppgifterna kan begränsas till antingen ett kluster eller en notebook-fil. Använd både åtkomstkontroll för kluster och åtkomstkontroll för notebook-filer tillsammans för att skydda åtkomsten till Azure Storage. Se Beräkningsbehörigheter och Samarbeta med databricks notebook-filer.
Kommentar
Microsoft Entra ID-tjänstens huvudnamn kan också användas för att komma åt Azure Storage från ett SQL-lager, se Aktivera konfiguration av dataåtkomst.
Om du vill ange Spark-egenskaper använder du följande kodfragment i ett klusters Spark-konfiguration eller en notebook-fil:
Azure-tjänsthuvudnamn
Använd följande format för att ange Spark-klustrets konfiguration:
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
Du kan använda spark.conf.set
i notebook-filer, som du ser i följande exempel:
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>
med namnet på Databricks-hemlighetsomfånget.<service-credential-key>
med namnet på nyckeln som innehåller klienthemligheten.<storage-account>
med namnet på Azure Storage-kontot.<application-id>
med program-ID:t (klient) för Microsoft Entra-ID-programmet.<directory-id>
med katalog-ID:t (klientorganisation) för Microsoft Entra-ID-programmet.
SAS-token
Du kan konfigurera SAS-token för flera lagringskonton i samma Spark-session.
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>
med namnet på Azure Storage-kontot.<scope>
med namnet på Azure Databricks-hemlighetsomfånget.<sas-token-key>
med namnet på nyckeln som innehåller Azure Storage SAS-token.
Kontonyckel
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>
med namnet på Azure Storage-kontot.<scope>
med namnet på Azure Databricks-hemlighetsomfånget.<storage-account-access-key>
med namnet på nyckeln som innehåller åtkomstnyckeln för Azure-lagringskontot.
Få åtkomst till Azure Storage
När du har konfigurerat autentiseringsuppgifterna för att få åtkomst till azure-lagringscontainern kan du interagera med resurser i lagringskontot med hjälp av URI:er. Databricks rekommenderar att du använder abfss
drivrutinen för större säkerhet.
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');
Exempelnotebook-fil
ADLS Gen2 OAuth 2.0 med Microsoft Entra ID (tidigare Azure Active Directory) notebook-fil för tjänstens huvudnamn
Kända problem med Azure Data Lake Storage Gen2
Om du försöker komma åt en lagringscontainer som skapats via Azure Portal kan du få följande fel:
StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.
När ett hierarkiskt namnområde är aktiverat behöver du inte skapa containrar via Azure Portal. Om du ser det här problemet tar du bort blobcontainern via Azure Portal. Efter några minuter kan du komma åt containern. Du kan också ändra din abfss
URI så att den använder en annan container, så länge containern inte skapas via Azure Portal.
Se Kända problem med Azure Data Lake Storage Gen2 i Microsoft-dokumentationen.
Inaktuella mönster för att lagra och komma åt data från Azure Databricks
Följande är inaktuella lagringsmönster:
Databricks rekommenderar inte längre montering av externa dataplatser till Databricks-filsystemet. Se Montera molnobjektlagring på Azure Databricks.
Databricks rekommenderar inte längre att använda genomströmning av inloggningsuppgifter med Azure Data Lake Storage Gen2. Se Åtkomst till Azure Data Lake Storage med hjälp av Microsoft Entra ID-genomströmning för autentiseringsuppgifter (äldre).