Zugriff auf Azure Data Lake Storage Gen1 von Azure Databricks

Microsoft hat die geplante Einstellung von Azure Data Lake Storage Gen1 (ehemals Azure Data Lake Store, auch ADLS genannt) angekündigt und empfiehlt allen Benutzern, zu Azure Data Lake Storage Gen2 zu migrieren. Databricks empfiehlt ein Upgrade auf Azure Data Lake Storage Gen2 für optimale Leistung und neue Features.

Es gibt zwei Möglichkeiten für den Zugriff auf Azure Data Lake Storage Gen1:

  1. Übergeben Sie Ihre Microsoft Entra ID-Anmeldeinformationen (ehemals Azure Active Directory), auch bekannt als Passthrough für Anmeldeinformationen.
  2. Direktes Verwenden eines Dienstprinzipals

Automatischer Zugriff mit Ihren Microsoft Entra ID (früher Azure Active Directory)-Anmeldeinformationen

Sie können sich automatisch bei Azure Data Lake Storage Gen1 in Azure Databricks-Clustern unter Verwendung derselben Microsoft Entra ID-Identität authentifizieren, die Sie zum Anmelden bei Azure Databricks verwenden. Wenn Sie das Passthrough für Microsoft Entra ID-Anmeldeinformationen für Ihren Cluster aktivieren, können Befehle, die Sie in diesem Cluster ausführen, Daten in Azure Data Lake Storage Gen1 lesen und schreiben, ohne dass Sie Dienstprinzipal-Anmeldeinformationen für den Zugriff auf den Speicher konfigurieren müssen.

Ausführliche Anleitungen zur Einrichtung und Verwendung finden Sie unter Zugriff auf Azure Data Lake Storage mithilfe von Passthrough (Legacy) für Microsoft Entra ID (früher Azure Active Directory)-Anmeldeinformationen.

Erstellen und Zuweisen von Berechtigungen für den Dienstprinzipal

Wenn die ausgewählte Zugriffsmethode einen Dienstprinzipal mit entsprechenden Berechtigungen erfordert und Sie über keine verfügen, führen Sie die folgenden Schritte aus:

  1. Erstellen Sie eine Microsoft Entra ID-Anwendung (ehemals Azure Active Directory) und einen Dienstprinzipal, der auf Ressourcen zugreifen können. Notieren Sie die folgenden Eigenschaften:
    • application-id: Eine ID zur eindeutigen Identifizierung der Clientanwendung
    • directory-id: Eine ID, die die Microsoft Entra ID-Instanz eindeutig identifiziert.
    • service-credential: Eine Zeichenfolge, mit der die Anwendung die eigene Identität nachweist
  2. Registrieren Sie den Dienstprinzipal, indem Sie die entsprechende Rollenzuweisung (z. B. Mitwirkender) für das Azure Data Lake Storage Gen1-Konto vornehmen.

Direkter Zugriff mit Spark-APIs mithilfe eines Dienstprinzipals und OAuth 2.0

Zum Lesen aus Ihrem Azure Data Lake Storage Gen1-Konto können Sie Spark für die Verwendung von Dienstanmeldeinformationen mit dem folgenden Codeausschnitt in Ihrem Notebook konfigurieren:

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

where

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") ruft den Zugriffsschlüssel für das Speicherkonto ab, der als Geheimnis in einem Geheimnisbereich gespeichert wurde.

Sobald Ihre Anmeldeinformationen eingerichtet sind, können Sie Spark- und Databricks-Standard-APIs zum Zugriff auf die Ressourcen verwenden. Beispiele:

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 ermöglicht die Zugriffssteuerung auf Verzeichnisebene, sodass der Dienstprinzipal Zugriff auf die Verzeichnisse, aus denen Sie lesen möchten, sowie auf die Azure Data Lake Storage Gen1-Ressource haben muss.

Zugriff über den Metastore

Für den Zugriff auf im Metastore angegebene adl://-Speicherorte müssen Sie Konfigurationsoptionen für Hadoop-Anmeldeinformationen beim Erstellen des Clusters als Spark-Optionen angeben, indem Sie den jeweiligen Hadoop-Konfigurationsschlüsseln das Präfix spark.hadoop. hinzufügen, um sie an die vom Metastore verwendeten Hadoop-Konfigurationen weiterzugeben:

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

Warnung

  • Diese Anmeldeinformationen sind für alle Benutzer*innen verfügbar, die auf den Cluster zugreifen.

Bereitstellen einer Azure Data Lake Storage Gen1-Ressource oder eines Gen1-Ordners

Verwenden Sie zum Bereitstellen einer Azure Data Lake Storage Gen1-Ressource oder eines darin enthaltenen Ordners den folgenden Befehl:

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)

where

  • <mount-name> ist ein DBFS-Pfad, der angibt, wo das Azure Data Lake Storage Gen1-Konto oder ein entsprechender Ordner (in source angegeben) in DBFS bereitgestellt werden soll.
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") ruft den Zugriffsschlüssel für das Speicherkonto ab, der als Geheimnis in einem Geheimnisbereich gespeichert wurde.

Greifen Sie auf Dateien in Ihrem Container zu, als wären es lokale Dateien. Beispiel:

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

Einrichten von Dienstanmeldeinformationen für mehrere Konten

Sie können Dienstanmeldeinformationen für mehrere Azure Data Lake Storage Gen1-Konten für die Verwendung in einer einzelnen Spark-Sitzung einrichten, indem Sie den Konfigurationsschlüsseln account.<account-name>hinzufügen. Wenn Sie beispielsweise Anmeldeinformationen für die Konten für den Zugriff auf adl://example1.azuredatalakestore.net und adl://example2.azuredatalakestore.neteinrichten möchten, können Sie wie folgt vorgehen:

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

Dies funktioniert auch für die Spark-Clusterkonfiguration:

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

Im folgenden Notebook wird gezeigt, wie Sie auf Azure Data Lake Storage Gen1 direkt und mithilfe einer Bereitstellung zugreifen können.

ADLS Gen1-Dienstprinzipal-Notebook

Notebook abrufen