Acessando o Azure Data Lake Storage Gen1 da Databricks
A Microsoft anunciou a aposentadoria planejada do Azure Data Lake Storage Gen1 (anteriormente Azure Data Lake Store, também conhecido como ADLS) e recomenda que todos os usuários migrem para o Azure Data Lake Storage Gen2. Databricks recomenda a atualização para Azure Data Lake Storage Gen2 para obter melhor desempenho e novo recurso.
O senhor pode acessar o Azure Data Lake Storage Gen1 diretamente usando uma entidade de serviço.
Criar e conceder permissões à entidade de serviço
Se o método de acesso selecionado exigir uma entidade de serviço com as permissões adequadas e o senhor não tiver uma, siga estas etapas:
-
Crie um aplicativo Microsoft Entra ID (anteriormente Azure Active Directory) e uma entidade de serviço que possa acessar o recurso. Observe as seguintes propriedades:
application-id
: uma ID que identifica de forma exclusiva o aplicativo cliente.directory-id
: Uma ID que identifica de forma exclusiva a instância do Microsoft Entra ID.service-credential
: Uma cadeia de caracteres que o aplicativo usa para provar sua identidade.
-
registrar a entidade de serviço, concedendo a atribuição de função correta, como Contribuinte, no site Azure Data Lake Storage Gen1 account.
Acesse diretamente com as APIs do Spark usando uma entidade de serviço e OAuth 2.0
Para ler a partir do site Azure Data Lake Storage Gen1 account, o senhor pode configurar o site Spark para usar as credenciais de serviço com o seguinte snippet no 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")
onde
dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
recupera seu armazenamento account access key que foi armazenado como segredo em um Secret Scope.
Depois de configurar suas credenciais, o senhor pode usar os endereços padrão Spark e Databricks APIs para acessar o recurso. Por exemplo:
val df = spark.read.format("parquet").load("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")
dbutils.fs.ls("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")
O Azure Data Lake Storage Gen1 fornece controle de acesso em nível de diretório, portanto, a entidade de serviço deve ter acesso aos diretórios dos quais o senhor deseja ler, bem como ao recurso Azure Data Lake Storage Gen1.
Acesso por meio de metastore
Para acessar os locais adl://
especificados no metastore, o senhor deve especificar as opções de configuração de credenciais Hadoop como opções Spark ao criar o clustering, adicionando o prefixo spark.hadoop.
à chave de configuração Hadoop correspondente para propagá-las para as configurações Hadoop usadas pelo 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
- Essas credenciais estão disponíveis para todos os usuários que acessam o clustering.
Montar o recurso ou a pasta do Azure Data Lake Storage Gen1
Para montar um recurso do Azure Data Lake Storage Gen1 ou uma pasta dentro dele, use o seguinte comando:
- Python
- Scala
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)
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)
onde
<mount-name>
é um caminho DBFS que representa onde o Azure Data Lake Storage Gen1 account ou uma pasta dentro dele (especificado emsource
) será montado em DBFS.dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
recupera seu armazenamento account access key que foi armazenado como segredo em um Secret Scope.
Acesse os arquivos em seu contêiner como se fossem arquivos locais, por exemplo:
- Python
- Scala
df = spark.read.format("text").load("/mnt/<mount-name>/....")
df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")
val df = spark.read.format("text").load("/mnt/<mount-name>/....")
val df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")
Configurar credenciais de serviço para várias contas
O senhor pode configurar credenciais de serviço para várias contas Azure Data Lake Storage Gen1 para uso em uma única sessão Spark adicionando account.<account-name>
à chave de configuração. Por exemplo, se quiser configurar credenciais para a conta de acesso a adl://example1.azuredatalakestore.net
e adl://example2.azuredatalakestore.net
, o senhor pode fazer isso da seguinte forma:
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")
Isso também funciona para a configuração de clustering:Spark
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
O seguinte Notebook demonstra como acessar Azure Data Lake Storage Gen1 diretamente e com uma montagem.