Rechtstreeks toegang tot Azure Data Lake Storage Gen2 met behulp van een SAS-tokenprovider

U kunt Shared Access Signatures (SAS) voor opslag gebruiken om rechtstreeks toegang te krijgen tot een Azure Data Lake Storage Gen2-opslagaccount. Met SAS kunt u de toegang tot een opslagaccount beperken met behulp van tijdelijke tokens met fijnkeurig toegangsbeheer.

U kunt meerdere opslagaccounts toevoegen en de respectieve SAS-tokenproviders configureren in dezelfde Spark-sessie.

Belangrijk

SAS-ondersteuning is beschikbaar in Databricks Runtime 7.5 en hoger. Dit is een experimentele functie voor geavanceerde gebruikers.

Een SAS-tokenprovider implementeren

Als u SAS wilt gebruiken voor toegang tot Azure Data Lake Storage Gen2, moet u een Java- of Scala-implementatie van de interface bieden, een van de extensiepunten die worden aangeboden SASTokenProvider door ABFS. Zie de sectie Uitbreidingsmogelijkheden van de Hadoop Azure-documentatie voor meer informatie over de uitbreidingspunten.

De interface heeft de volgende methoden:

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;
}

Zie de klasse SASTokenProvider MockSASTokenProvider in de Apache Hadoop-opslagplaats voor een voorbeeld van de implementatie van de interface.

De klasse die de SASTokenProvider interface implementeert, moet beschikbaar zijn tijdens runtime. U kunt dit doen door de implementatie rechtstreeks in een notebook op te geven als een pakketcel of door een JAR met de klasse te koppelen.

De SAS-tokenprovider configureren

U kunt de implementatie registreren met behulp van de volgende Spark-configuraties:

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>

waarbij <class-name> een volledig gekwalificeerde klassenaam van de implementatie SASTokenProvider is.

DataFrame of DataSet-API

Als u Spark DataFrame of Gegevensset-API's gebruikt, raadt Databricks u aan de SAS-configuratie in te stellen in de sessieconfiguraties van uw notebook:

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