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:
- Übergeben Sie Ihre Microsoft Entra ID-Anmeldeinformationen, was auch als Passthrough für Anmeldeinformationen bezeichnet wird.
- Direktes Verwenden eines Dienstprinzipals
Automatischer Zugriff mit Ihren Microsoft Entra ID-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 für Microsoft Entra ID-Anmeldeinformationen (Legacy).
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:
- 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 Clientanwendungdirectory-id
: Eine ID, die die Microsoft Entra ID-Instanz eindeutig identifiziert.service-credential
: Eine Zeichenfolge, mit der die Anwendung die eigene Identität nachweist
- 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 (insource
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.net
einrichten 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.