Połączenie do usługi Azure Blob Storage z usługą WASB (starsza wersja)

Firma Microsoft wycofała sterownik obiektów blob usługi Azure Storage (WASB) dla usługi Azure Blob Storage na rzecz sterownika azure Blob Filesystem (ABFS); zobacz Połączenie do usługi Azure Data Lake Storage Gen2 i usługi Blob Storage. ABFS ma wiele korzyści w przypadku WASB; zobacz dokumentację platformy Azure dotyczącą systemu ABFS.

Ten artykuł zawiera dokumentację dotyczącą obsługi kodu korzystającego ze sterownika WASB. Usługa Databricks zaleca używanie usługi ABFS dla wszystkich połączeń z usługą Azure Blob Storage.

Konfigurowanie poświadczeń WASB w usłudze Databricks

Sterownik WASB umożliwia użycie klucza dostępu do konta magazynu lub sygnatury dostępu współdzielonego (SAS). (Jeśli odczytujesz dane z konta magazynu publicznego, nie musisz konfigurować poświadczeń).

Usługa Databricks zaleca używanie wpisów tajnych zawsze, gdy trzeba przekazać poświadczenia w usłudze Azure Databricks. Wpisy tajne są dostępne dla wszystkich użytkowników z dostępem do zakresu zawierającego wpis tajny.

Możesz przekazać poświadczenia:

  • Zakres klastra w konfiguracji platformy Spark
  • Zakres do notesu
  • Dołączone do zainstalowanego katalogu

Usługa Databricks zaleca uaktualnienie wszystkich połączeń do korzystania z usługi ABFS w celu uzyskania dostępu do usługi Azure Blob Storage, która zapewnia podobne wzorce dostępu jak WASB. Użyj usługi ABFS, aby uzyskać najlepsze zabezpieczenia i wydajność podczas interakcji z usługą Azure Blob Storage.

Aby skonfigurować poświadczenia klastra, ustaw właściwości konfiguracji platformy Spark podczas tworzenia klastra. Poświadczenia ustawione na poziomie klastra są dostępne dla wszystkich użytkowników z dostępem do tego klastra.

Aby skonfigurować poświadczenia o zakresie notesu, użyj polecenia spark.conf.set(). Poświadczenia przekazane na poziomie notesu są dostępne dla wszystkich użytkowników z dostępem do tego notesu.

Ustawianie poświadczeń usługi Azure Blob Storage przy użyciu klucza dostępu do konta magazynu

Klucz dostępu do konta magazynu udziela pełnego dostępu do wszystkich kontenerów w ramach konta magazynu. Chociaż ten wzorzec jest przydatny do tworzenia prototypów, należy unikać używania go w środowisku produkcyjnym w celu zmniejszenia ryzyka związanego z udzielaniem nieograniczonego dostępu do danych produkcyjnych.

spark.conf.set(
  "fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
  "<storage-account-access-key>"
)

Możesz uaktualnić identyfikatory URI klucza konta, aby używać systemu ABFS. Aby uzyskać więcej informacji, zobacz tematNawiązywanie połączenia z Azure Data Lake Storage Gen2 i usługą Blob Storage.

Ustawianie poświadczeń usługi Azure Blob Storage przy użyciu sygnatury dostępu współdzielonego (SAS)

Za pomocą tokenów SAS można skonfigurować ograniczony dostęp do pojedynczego kontenera na koncie magazynu, które wygasa w określonym czasie.

spark.conf.set(
  "fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
  "<sas-token-for-container>"
)

Uzyskiwanie dostępu do usługi Azure Blob Storage przy użyciu interfejsu API ramki danych

Interfejs API ramki danych platformy Apache Spark może używać poświadczeń skonfigurowanych na poziomie notesu lub klastra. Wszystkie identyfikatory URI sterowników WASB określają nazwy kontenerów i kont magazynu. Nazwa katalogu jest opcjonalna i może określać wiele katalogów zagnieżdżonych względem kontenera.

wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>

W poniższych przykładach kodu pokazano, jak korzystać z odwołań interfejsu API ramek danych i narzędzi usługi Databricks (dbutils) w celu interakcji z nazwanym katalogiem w kontenerze.

df = spark.read.format("parquet").load("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

dbutils.fs.ls("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

Aby zaktualizować system ABFS zamiast WASB, zaktualizuj identyfikatory URI. Aby uzyskać więcej informacji, zobacz Access Azure Storage (Uzyskiwanie dostępu do usługi Azure Storage)

Uzyskiwanie dostępu do usługi Azure Blob Storage za pomocą usługi SQL

Poświadczenia ustawione w konfiguracji sesji notesu nie są dostępne dla notesów z uruchomionym programem Spark SQL.

Po skonfigurowaniu klucza dostępu konta lub sygnatury dostępu współdzielonego w konfiguracji klastra można użyć standardowych zapytań Spark SQL w usłudze Azure Blob Storage:

-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/";

Aby zaktualizować system ABFS zamiast WASB, zaktualizuj identyfikatory URI; Zobacz Access Azure Storage (Uzyskiwanie dostępu do usługi Azure Storage)

Instalowanie kontenerów usługi Azure Blob Storage w systemie plików DBFS

Kontener usługi Azure Blob Storage lub folder można zainstalować w kontenerze do systemu plików DBFS. Aby uzyskać zalecenia dotyczące usługi Databricks, zobacz Instalowanie magazynu obiektów w chmurze w usłudze Azure Databricks.

Ważne

  • Usługa Azure Blob Storage obsługuje trzy typy obiektów blob: blokowe, dołączane i stronicowe. Blokowe obiekty blob można instalować tylko w systemie plików DBFS.
  • Do obiektów w kontenerach usługi Blob Storage zainstalowanych w systemie plików DBFS mają dostęp do odczytu i zapisu wszyscy użytkownicy.
  • Po utworzeniu punktu instalacji za pośrednictwem klastra użytkownicy tego klastra mogą natychmiast uzyskać dostęp do punktu instalacji. Aby użyć punktu instalacji w innym uruchomionym klastrze, należy uruchomić dbutils.fs.refreshMounts() go w tym uruchomionym klastrze, aby udostępnić nowo utworzony punkt instalacji.

System plików DBFS używa poświadczenia podanego podczas tworzenia punktu instalacji w celu uzyskania dostępu do zainstalowanego kontenera usługi Blob Storage. Jeśli kontener usługi Blob Storage jest instalowany przy użyciu klucza dostępu do konta magazynu, system plików DBFS używa tymczasowych tokenów SAS pochodzących z klucza konta magazynu podczas uzyskiwania dostępu do tego punktu instalacji.

Instalowanie kontenera usługi Azure Blob Storage

Usługa Databricks zaleca używanie systemu ABFS zamiast WASB. Aby uzyskać więcej informacji na temat instalowania za pomocą systemu ABFS, zobacz: Instalowanie usługi ADLS Gen2 lub usługi Blob Storage przy użyciu systemu ABFS.

  1. Aby zainstalować kontener usługi Blob Storage lub folder wewnątrz kontenera, użyj następującego polecenia:

    Python

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
      mount_point = "/mnt/<mount-name>",
      extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})
    

    Scala

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>",
      mountPoint = "/mnt/<mount-name>",
      extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))
    

    where

    • <storage-account-name> to nazwa konta usługi Azure Blob Storage.
    • <container-name> to nazwa kontenera na koncie usługi Azure Blob Storage.
    • <mount-name> to ścieżka systemu plików DBFS reprezentująca miejsce, w którym kontener usługi Blob Storage lub folder wewnątrz kontenera (określony w sourcepliku ) zostanie zainstalowany w systemie plików DBFS.
    • <conf-key>może być albo albo fs.azure.account.key.<storage-account-name>.blob.core.windows.netfs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net
    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")Pobiera klucz, który został zapisany jako wpis tajny w zakresie wpisu tajnego.
  2. Uzyskiwanie dostępu do plików w kontenerze tak, jakby były plikami lokalnymi, na przykład:

    Python

    # python
    df = spark.read.format("text").load("/mnt/<mount-name>/...")
    df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    Scala

    // scala
    val df = spark.read.format("text").load("/mnt/<mount-name>/...")
    val df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    SQL

    -- SQL
    CREATE DATABASE <db-name>
    LOCATION "/mnt/<mount-name>"