Acesso Azure Data Lake Storage Gen2 diretamente usando um fornecedor de token SAS

Você pode usar assinaturas de acesso compartilhado de armazenamento (SAS) para aceder diretamente a uma conta de armazenamento Azure Data Lake Storage Gen2. Com o SAS, pode restringir o acesso a uma conta de armazenamento usando fichas temporárias com controlo de acesso fino.

Pode adicionar várias contas de armazenamento e configurar os respetivos fornecedores de fichas SAS na mesma sessão spark.

Importante

O suporte SAS está disponível em Databricks Runtime 7.5 ou superior. Esta é uma funcionalidade experimental para utilizadores avançados.

Implementar um fornecedor de token SAS

Para utilizar o SAS para aceder ao Azure Data Lake Storage Gen2, tem de fornecer uma implementação java ou Scala da SASTokenProvider interface, um dos pontos de extensão oferecidos pela ABFS. Para obter mais informações sobre os pontos de extensão, consulte a secção de Extensibilidade da documentação Hadoop Azure.

A interface tem os seguintes métodos:

package org.apache.hadoop.fs.azurebfs.extensions;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.AccessControlException;

public interface SASTokenProvider {
  /**
   * Initialize authorizer for Azure Blob File System.
   * @param configuration Configuration object.
   * @param accountName Account Name.
   * @throws IOException network problems or similar.
   */
  void initialize(Configuration configuration, String accountName)
      throws IOException;

  /**
   * Invokes the authorizer to obtain a SAS token.
   *
   * @param account the name of the storage account.
   * @param fileSystem the name of the fileSystem.
   * @param path the file or directory path.
   * @param operation the operation to be performed on the path.
   * @return a SAS token to perform the request operation.
   * @throws IOException if there is a network error.
   * @throws AccessControlException if access is denied.
   */
  String getSASToken(String account, String fileSystem, String path, String operation)
      throws IOException, AccessControlException;
}

Para uma implementação por exemplo da SASTokenProvider interface consulte a classe MockSASTokenProvider no repositório Apache Hadoop.

A classe que implementa a SASTokenProvider interface deve estar disponível no tempo de execução. Pode fazê-lo fornecendo diretamente a implementação num caderno como célula de pacote ou anexando um JAR contendo a classe.

Configure o fornecedor de fichas SAS

Pode registar a implementação utilizando os seguintes configs Spark:

spark.hadoop.fs.azure.account.auth.type.<storage-account-name>.dfs.core.windows.net SAS
spark.hadoop.fs.azure.sas.token.provider.type.<storage-account-name>.dfs.core.windows.net <class-name>

onde <class-name> é um nome de classe totalmente qualificado da SASTokenProvider implementação.

DataFrame ou DataSet API

Se estiver a utilizar o DataFrame do Spark ou apis do conjunto de dados, o Databricks recomenda que defina a configuração SAS na sessão do seu portátil:

spark.conf.set("fs.azure.account.auth.type.<storage-account-name>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account-name>.dfs.core.windows.net", "<class-name>")