Uzyskiwanie dostępu do usługi Azure Data Lake Storage Gen1 z usługi Azure Databricks
Firma Microsoft ogłosiła planowane wycofanie usługi Azure Data Lake Storage Gen1 (dawniej Azure Data Lake Store, znanej również jako ADLS) i zaleca wszystkim użytkownikom migrację do usługi Azure Data Lake Storage Gen2. Usługa Databricks zaleca uaktualnienie do usługi Azure Data Lake Storage Gen2 w celu uzyskania najlepszej wydajności i nowych funkcji.
Istnieją dwa sposoby uzyskiwania dostępu do usługi Azure Data Lake Storage Gen1:
- Przekaż identyfikator entra firmy Microsoft credentials, znany również jako przekazywanie poświadczeń .
- Bezpośrednie używanie jednostki usługi.
Automatyczny dostęp przy użyciu Microsoft Entra ID credentials
Możesz uwierzytelnić się automatycznie w usłudze Azure Data Lake Storage Gen1 z klastrów usługi Azure Databricks przy użyciu tej samej tożsamości identyfikatora Entra firmy Microsoft, której używasz do logowania się do usługi Azure Databricks. Po włączeniu przekazywania poświadczeń dla klastra Microsoft Entra ID, polecenia uruchamiane w tym klastrze będą mogły odczytywać i zapisywać dane w usłudze Azure Data Lake Storage Gen1 bez konieczności konfigurowania jednostki usługi credentials w celu uzyskania dostępu do magazynu.
Aby uzyskać pełne instrukcje dotyczące konfiguracji i użycia, zobacz Access Azure Data Lake Storage using Microsoft Entra ID credential passthrough (starsza wersja).
Tworzenie i grant uprawnień do podmiotu usługi
Jeśli wybrana metoda dostępu wymaga jednostki usługi z odpowiednimi uprawnieniami i nie masz jej, wykonaj następujące kroki:
-
Utwórz aplikację Microsoft Entra ID (dawniej Azure Active Directory) i jednostkę usługi, która może uzyskiwać dostęp do zasobów. Zwróć uwagę na następujące właściwości:
-
application-id
: identyfikator, który jednoznacznie identyfikuje aplikację kliencą. -
directory-id
: identyfikator, który jednoznacznie identyfikuje wystąpienie identyfikatora Entra firmy Microsoft. -
service-credential
: ciąg używany przez aplikację do potwierdzenia tożsamości.
-
- Zarejestruj jednostkę usługi, udzielając poprawnego przypisania roli, takiego jak Współautor, na koncie usługi Azure Data Lake Storage Gen1.
Uzyskiwanie dostępu bezpośrednio za pomocą interfejsów API platformy Spark przy użyciu jednostki usługi i protokołu OAuth 2.0
Aby odczytać dane z konta usługi Azure Data Lake Storage Gen1, możesz skonfigurować platformę Spark do korzystania z usługi credentials przy użyciu następującego fragmentu kodu w notesie:
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>")
pobiera klucz dostępu konta magazynu, który został zapisany jako wpis tajny w zakresie wpisu tajnego.
Po ukończeniu setcredentials, możesz użyć standardowych interfejsów API Spark i Databricks, aby uzyskać dostęp do zasobów. Na przykład:
val df = spark.read.format("parquet").load("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")
dbutils.fs.ls("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")
Usługa Azure Data Lake Storage Gen1 zapewnia kontrolę dostępu na poziomie katalogu, dlatego jednostka usługi musi mieć dostęp do katalogów, z których chcesz odczytywać dane, a także z zasobu usługi Azure Data Lake Storage Gen1.
Dostęp za pośrednictwem magazynu metadanych
Aby uzyskać dostęp do adl://
lokalizacji określonych w magazynie metadanych, należy określić opcje konfiguracji poświadczeń usługi Hadoop jako opcje platformy Spark podczas tworzenia klastra, dodając spark.hadoop.
prefiks do odpowiednich kluczy konfiguracji usługi Hadoop, aby propagować je do konfiguracji usługi Hadoop używanych przez magazyn metadanych:
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
Ostrzeżenie
- Te credentials są dostępne dla wszystkich użytkowników, którzy mają dostęp do klastra.
Instalowanie zasobu lub folderu usługi Azure Data Lake Storage Gen1
Aby zainstalować w nim zasób usługi Azure Data Lake Storage Gen1 lub folder, użyj następującego polecenia:
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>
to ścieżka systemu plików DBFS, reprezentująca where konto usługi Azure Data Lake Storage Gen1 lub folder wewnątrz niego (określony wsource
), który zostanie zamontowany w DBFS. -
dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
pobiera klucz dostępu konta magazynu, który został zapisany jako wpis tajny w zakresie wpisu tajnego.
Uzyskiwanie dostępu do plików w kontenerze tak, jakby były plikami lokalnymi, na przykład:
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>/....")
Set podniesienie usług credentials dla wielu kont
Możesz setcredentials usługę dla wielu kont usługi Azure Data Lake Storage Gen1 do użycia w ramach jednej sesji platformy Spark, dodając account.<account-name>
do kluczy konfiguracji. Jeśli na przykład chcesz setcredentials dla obu kont, aby uzyskać dostęp do adl://example1.azuredatalakestore.net
i adl://example2.azuredatalakestore.net
, możesz to zrobić w następujący sposób:
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")
Działa to również w przypadku konfiguracji platformy Spark klastra:
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
W poniższym notesie pokazano, jak uzyskać bezpośredni dostęp do usługi Azure Data Lake Storage Gen1 i przy użyciu instalacji.
Notes jednostki usługi ADLS Gen1
notesu