Dela via


Åtkomst till Azure Data Lake Storage Gen1 från Azure Databricks

Microsoft har meddelat att Azure Data Lake Storage Gen1 (tidigare Azure Data Lake Store, även kallat ADLS) ska dras tillbaka och rekommenderar att alla användare migrerar till Azure Data Lake Storage Gen2. Databricks rekommenderar att du uppgraderar till Azure Data Lake Storage Gen2 för bästa prestanda och nya funktioner.

Det finns två sätt att komma åt Azure Data Lake Storage Gen1:

  1. Skicka dina Microsoft Entra-ID-autentiseringsuppgifter, även kallat genomströmning av autentiseringsuppgifter.
  2. Använd tjänstens huvudnamn (SP) direkt.

Åtkomst automatiskt med dina Microsoft Entra-ID-autentiseringsuppgifter

Du kan autentisera automatiskt till Azure Data Lake Storage Gen1 från Azure Databricks-kluster med samma Microsoft Entra-ID-identitet som du använder för att logga in på Azure Databricks. När du aktiverar klustret för genomströmning av Microsoft Entra-ID-autentiseringsuppgifter kan kommandon som du kör i klustret läsa och skriva dina data i Azure Data Lake Storage Gen1 utan att du behöver konfigurera autentiseringsuppgifter för tjänstens huvudnamn för åtkomst till lagring.

Fullständiga installations- och användningsinstruktioner finns i Access Azure Data Lake Storage using Microsoft Entra ID credential passthrough (legacy).

Skapa och bevilja behörigheter till tjänstens huvudnamn

Om den valda åtkomstmetoden kräver ett huvudnamn för tjänsten med tillräcklig behörighet, och du inte har något, följer du dessa steg:

  1. Skapa ett Microsoft Entra-ID (tidigare Azure Active Directory) program och tjänstens huvudnamn som kan komma åt resurser. Observera följande egenskaper:
    • application-id: Ett ID som unikt identifierar klientprogrammet.
    • directory-id: Ett ID som unikt identifierar Microsoft Entra ID-instansen.
    • service-credential: En sträng som programmet använder för att bevisa sin identitet.
  2. Registrera tjänstens huvudnamn och bevilja rätt rolltilldelning, till exempel Deltagare, på Azure Data Lake Storage Gen1-kontot.

Åtkomst direkt med Spark-API:er med hjälp av tjänstens huvudnamn och OAuth 2.0

Om du vill läsa från ditt Azure Data Lake Storage Gen1-konto kan du konfigurera Spark att använda autentiseringsuppgifter för tjänsten med följande kodfragment i notebook-filen:

spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("fs.adl.oauth2.client.id", "<application-id>")
spark.conf.set("fs.adl.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"))
spark.conf.set("fs.adl.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

där

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")hämtar åtkomstnyckeln för lagringskontot som har lagrats som en hemlighet i ett hemligt omfång.

När du har konfigurerat dina autentiseringsuppgifter kan du använda standard-API:er för Spark och Databricks för att komma åt resurserna. Till exempel:

val df = spark.read.format("parquet").load("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

dbutils.fs.ls("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

Azure Data Lake Storage Gen1 tillhandahåller åtkomstkontroll på katalognivå, så tjänstens huvudnamn måste ha åtkomst till de kataloger som du vill läsa från samt Azure Data Lake Storage Gen1-resursen.

Åtkomst via metaarkiv

Om du vill komma åt adl:// platser som anges i metaarkivet måste du ange konfigurationsalternativ för Hadoop-autentiseringsuppgifter som Spark-alternativ när du skapar klustret genom att lägga till spark.hadoop. prefixet till motsvarande Hadoop-konfigurationsnycklar för att sprida dem till De Hadoop-konfigurationer som används av metaarkivet:

spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential
spark.hadoop.fs.adl.oauth2.client.id <application-id>
spark.hadoop.fs.adl.oauth2.credential <service-credential>
spark.hadoop.fs.adl.oauth2.refresh.url https://login.microsoftonline.com/<directory-id>/oauth2/token

Varning

  • Dessa autentiseringsuppgifter är tillgängliga för alla användare som har åtkomst till klustret.

Montera Azure Data Lake Storage Gen1-resurs eller -mapp

Om du vill montera en Azure Data Lake Storage Gen1-resurs eller en mapp inuti den använder du följande kommando:

Python

configs = {"fs.adl.oauth2.access.token.provider.type": "ClientCredential",
          "fs.adl.oauth2.client.id": "<application-id>",
          "fs.adl.oauth2.credential": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
          "fs.adl.oauth2.refresh.url": "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 = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)

Scala

val configs = Map(
  "fs.adl.oauth2.access.token.provider.type" -> "ClientCredential",
  "fs.adl.oauth2.client.id" -> "<application-id>",
  "fs.adl.oauth2.credential" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
  "fs.adl.oauth2.refresh.url" -> "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 = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

där

  • <mount-name> är en DBFS-sökväg som representerar var Azure Data Lake Storage Gen1-kontot eller en mapp inuti det (anges i source) kommer att monteras i DBFS.
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")hämtar åtkomstnyckeln för lagringskontot som har lagrats som en hemlighet i ett hemligt omfång.

Få åtkomst till filer i containern som om de vore lokala filer, till exempel:

Python

df = spark.read.format("text").load("/mnt/<mount-name>/....")
df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")

Scala

val df = spark.read.format("text").load("/mnt/<mount-name>/....")
val df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")

Konfigurera tjänstautentiseringsuppgifter för flera konton

Du kan konfigurera tjänstautentiseringsuppgifter för flera Azure Data Lake Storage Gen1-konton för användning i en enda Spark-session genom att lägga account.<account-name> till i konfigurationsnycklarna. Om du till exempel vill konfigurera autentiseringsuppgifter för både kontona för åtkomst adl://example1.azuredatalakestore.net och adl://example2.azuredatalakestore.netkan du göra detta på följande sätt:

spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")

spark.conf.set("fs.adl.account.example1.oauth2.client.id", "<application-id-example1>")
spark.conf.set("fs.adl.account.example1.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example1>"))
spark.conf.set("fs.adl.account.example1.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example1>/oauth2/token")

spark.conf.set("fs.adl.account.example2.oauth2.client.id", "<application-id-example2>")
spark.conf.set("fs.adl.account.example2.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example2>"))
spark.conf.set("fs.adl.account.example2.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example2>/oauth2/token")

Detta fungerar även för Spark-klustrets konfiguration:

spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential

spark.hadoop.fs.adl.account.example1.oauth2.client.id <application-id-example1>
spark.hadoop.fs.adl.account.example1.oauth2.credential <service-credential-example1>
spark.hadoop.fs.adl.account.example1.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example1>/oauth2/token

spark.hadoop.fs.adl.account.example2.oauth2.client.id <application-id-example2>
spark.hadoop.fs.adl.account.example2.oauth2.credential <service-credential-example2>
spark.hadoop.fs.adl.account.example2.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example2>/oauth2/token

Följande notebook-fil visar hur du får åtkomst till Azure Data Lake Storage Gen1 direkt och med en montering.

ADLS Gen1-anteckningsbok för tjänstens huvudnamn

Hämta notebook-fil