Share via


Toegang tot Azure Data Lake Storage Gen1 vanuit Azure Databricks

Microsoft heeft de geplande buitengebruikstelling van Azure Data Lake Storage Gen1 (voorheen Azure Data Lake Store, ook wel ADLS genoemd) aangekondigd en raadt alle gebruikers aan om te migreren naar Azure Data Lake Storage Gen2. Databricks raadt u aan om een upgrade uit te voeren naar Azure Data Lake Storage Gen2 voor de beste prestaties en nieuwe functies.

Er zijn twee manieren om toegang te krijgen tot Azure Data Lake Storage Gen1:

  1. Geef uw Microsoft Entra ID-referenties (voorheen Azure Active Directory) door, ook wel referentiepassthrough genoemd.
  2. Een service-principal rechtstreeks gebruiken.

Automatisch toegang krijgen met uw Microsoft Entra ID-referenties (voorheen Azure Active Directory)

U kunt automatisch verifiëren bij Azure Data Lake Storage Gen1 vanuit Azure Databricks-clusters met dezelfde Microsoft Entra ID-identiteit die u gebruikt om u aan te melden bij Azure Databricks. Wanneer u uw cluster inschakelt voor passthrough voor referenties van Microsoft Entra ID, kunnen opdrachten die u op dat cluster uitvoert, uw gegevens lezen en schrijven in Azure Data Lake Storage Gen1 zonder dat u referenties van de service-principal hoeft te configureren voor toegang tot opslag.

Zie Toegang tot Azure Data Lake Storage met behulp van Microsoft Entra ID (voorheen Azure Active Directory) referentiepassthrough (verouderd) voor volledige installatie- en gebruiksinstructies.

Machtigingen voor service-principal maken en verlenen

Als voor uw geselecteerde toegangsmethode een service-principal met voldoende machtigingen is vereist en u geen service-principal hebt, voert u de volgende stappen uit:

  1. Maak een Microsoft Entra ID-toepassing (voorheen Azure Active Directory) en service-principal die toegang hebben tot resources. Let op de volgende eigenschappen:
    • application-id: Een id die de clienttoepassing uniek identificeert.
    • directory-id: Een id die het Exemplaar van Microsoft Entra-id uniek identificeert.
    • service-credential: Een tekenreeks die door de toepassing wordt gebruikt om de identiteit te bewijzen.
  2. Registreer de service-principal en verdeel de juiste roltoewijzing, zoals Inzender, in het Azure Data Lake Storage Gen1-account.

Rechtstreeks toegang krijgen met Spark-API's met behulp van een service-principal en OAuth 2.0

Als u wilt lezen uit uw Azure Data Lake Storage Gen1-account, kunt u Spark configureren voor het gebruik van servicereferenties met het volgende codefragment in uw notebook:

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")

waar

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")haalt de toegangssleutel van uw opslagaccount op die als geheim is opgeslagen in een geheim bereik.

Nadat u uw referenties hebt ingesteld, kunt u standaard Spark- en Databricks-API's gebruiken om toegang te krijgen tot de resources. Voorbeeld:

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 biedt toegangsbeheer op adreslijstniveau, dus de service-principal moet toegang hebben tot de mappen waaruit u wilt lezen, evenals de Azure Data Lake Storage Gen1-resource.

Toegang via metastore

Als u toegang wilt krijgen tot adl:// locaties die zijn opgegeven in de metastore, moet u Hadoop-referentieconfiguratieopties opgeven als Spark-opties wanneer u het cluster maakt door het spark.hadoop. voorvoegsel toe te voegen aan de bijbehorende Hadoop-configuratiesleutels om deze door te geven aan de Hadoop-configuraties die worden gebruikt door de metastore:

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

Waarschuwing

  • Deze referenties zijn beschikbaar voor alle gebruikers die toegang hebben tot het cluster.

Azure Data Lake Storage Gen1-resource of -map koppelen

Gebruik de volgende opdracht om een Azure Data Lake Storage Gen1-resource of een map erin te koppelen:

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)

waar

  • <mount-name> is een DBFS-pad dat aangeeft waar het Azure Data Lake Storage Gen1-account of een map erin (opgegeven in source) wordt gekoppeld in DBFS.
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")haalt de toegangssleutel van uw opslagaccount op die als geheim is opgeslagen in een geheim bereik.

Open bestanden in uw container alsof het lokale bestanden zijn, bijvoorbeeld:

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>/....")

Servicereferenties instellen voor meerdere accounts

U kunt servicereferenties instellen voor meerdere Azure Data Lake Storage Gen1-accounts voor gebruik in één Spark-sessie door deze toe te voegen account.<account-name> aan de configuratiesleutels. Als u bijvoorbeeld referenties wilt instellen voor zowel de accounts die toegang hebben als adl://example1.azuredatalakestore.netadl://example2.azuredatalakestore.net, kunt u dit als volgt doen:

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")

Dit werkt ook voor de Spark-clusterconfiguratie:

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

In het volgende notebook ziet u hoe u rechtstreeks en met een koppeling toegang hebt tot Azure Data Lake Storage Gen1.

Notebook voor ADLS Gen1-service-principal

Notebook downloaden