다음을 통해 공유


WASB(레거시)를 사용하여 Azure Blob Storage에 연결하세요.

Microsoft는 ABFS(Azure Blob Filesystem 드라이버)를 위해 Azure Blob Storage용 Windows Azure Storage Blob 드라이버(WASB)를 더 이상 사용하지 않았습니다. Azure Data Lake Storage Gen2 및 Blob Storage에 대한 연결을 참조하세요. ABFS는 WASB보다 많은 이점을 제공합니다. ABFS에 대한 Azure 설명서를 참조하세요.

이 문서에서는 WASB 드라이버를 사용하는 코드를 유지 관리하기 위한 설명서를 제공합니다. Databricks는 Azure Blob Storage에 대한 모든 연결에 ABFS를 사용하는 것이 좋습니다.

Databricks에서 WASB 자격 증명 구성

WASB 드라이버를 사용하면 스토리지 계정 액세스 키 또는 SAS(공유 액세스 서명)를 사용할 수 있습니다. (공용 스토리지 계정에서 데이터를 읽는 경우 자격 증명을 구성할 필요가 없습니다.)

Databricks는 Azure Databricks에서 자격 증명을 전달해야 할 때마다 비밀 사용하는 것이 좋습니다. 포함하는 비밀 범위에 액세스할 수 있는 모든 사용자가 비밀을 사용할 수 있습니다.

자격 증명을 전달할 수 있습니다.

  • Spark 구성에서 클러스터로 범위 지정
  • Notebook으로 범위 지정
  • 탑재된 디렉터리에 연결됨

Databricks는 ABFS를 사용하여 WASB와 유사한 액세스 패턴을 제공하는 Azure Blob Storage액세스하기 모든 연결을 업그레이드하는 것이 좋습니다. Azure Blob Storage와 상호 작용할 때 최상의 보안 및 성능을 위해 ABFS를 사용합니다.

클러스터 자격 증명을 구성하려면 클러스터를 만들 때 Spark 구성 속성을 설정합니다. 클러스터 수준에서 설정된 자격 증명은 해당 클러스터에 액세스할 수 있는 모든 사용자가 사용할 수 있습니다.

Notebook 범위 자격 증명을 구성하려면 "spark.conf.set()"을 사용합니다. 전자 필기장 수준에서 전달된 자격 증명은 해당 Notebook에 액세스할 수 있는 모든 사용자가 사용할 수 있습니다.

스토리지 계정 액세스 키를 사용하여 Azure Blob Storage 자격 증명 설정

스토리지 계정 액세스 키는 스토리지 계정 내의 모든 컨테이너에 대한 전체 액세스 권한을 부여합니다. 이 패턴은 프로토타입 생성에 유용하지만 프로덕션 데이터에 무제한 액세스 권한을 부여하는 것과 관련된 위험을 줄이기 위해 프로덕션에서 사용하지 마세요.

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

ABFS를 사용하도록 계정 키 URI를 업그레이드할 수 있습니다. 자세한 내용은 Azure Data Lake Storage Gen2 및 Blob Storage에 연결을 참조하세요.

SAS(공유 액세스 서명)를 사용하여 Azure Blob Storage 자격 증명 설정

SAS 토큰을 사용하여 특정 시간에 만료되는 스토리지 계정의 단일 컨테이너에 대한 제한된 액세스를 구성할 수 있습니다.

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

DataFrame API를 사용하여 Azure Blob Storage에 액세스

Apache Spark DataFrame API는 Notebook 또는 클러스터 수준에서 구성된 자격 증명을 사용할 수 있습니다. 모든 WASB 드라이버 URI는 컨테이너 및 스토리지 계정 이름을 지정합니다. 디렉터리 이름은 선택 사항이며 컨테이너를 기준으로 여러 중첩된 디렉터리를 지정할 수 있습니다.

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

다음 코드 예제에서는 DataFrames API 및 Databricks 유틸리티(dbutils) 참조 를 사용하여 컨테이너 내에서 명명된 디렉터리와 상호 작용하는 방법을 보여 줍니다.

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

WASB 대신 ABFS를 업데이트하려면 URI를 업데이트합니다. 자세한 내용은 Access Azure Storage를 참조 하세요.

SQL을 사용하여 Azure Blob Storage에 액세스

Notebook의 세션 구성에 설정된 자격 증명은 Spark SQL을 실행하는 Notebook에서 액세스할 수 없습니다.

클러스터 구성에서 계정 액세스 키 또는 SAS를 설정한 후 Azure Blob Storage에서 표준 Spark SQL 쿼리를 사용할 수 있습니다.

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

WASB 대신 ABFS를 업데이트하려면 URI를 업데이트하십시오. Azure Storage에 액세스하려면 참조,을(를) 참조하십시오.

Azure Blob Storage 컨테이너를 DBFS에 탑재

Azure Blob Storage 컨테이너 또는 컨테이너 내부의 폴더를 DBFS에 탑재할 수 있습니다. Databricks 권장 사항은 Azure Databricks에 클라우드 개체 스토리지 탑재를 참조하세요.

Important

  • Azure Blob Storage는 블록, 추가 및 페이지의 세 가지 Blob 유형을 지원합니다. 블록 Blob은 DBFS에만 탑재할 수 있습니다.
  • 모든 사용자는 DBFS에 탑재된 Blob Storage 컨테이너의 개체에 대한 읽기 및 쓰기 권한이 있습니다.
  • 클러스터를 통해 탑재 지점이 만들어지면 해당 클러스터의 사용자는 탑재 지점에 즉시 액세스할 수 있습니다. 실행 중인 다른 클러스터에서 탑재 지점을 사용하려면 실행 중인 클러스터에서 dbutils.fs.refreshMounts()를 실행하여 새로 만들어진 탑재 지점을 사용할 수 있도록 해야 합니다.

DBFS는 탑재된 Blob Storage 컨테이너에 액세스하기 위해 탑재 지점을 만들 때 제공한 자격 증명을 사용합니다. Blob Storage 컨테이너가 스토리지 계정 액세스 키를 사용하여 탑재된 경우 DBFS는 이 탑재 지점에 액세스할 때 스토리지 계정 키에서 파생된 임시 SAS 토큰을 사용합니다.

Azure Blob Storage 컨테이너 탑재

Databricks는 WASB 대신 ABFS를 사용하는 것이 좋습니다. ABFS를 사용하여 탑재하는 방법에 대한 자세한 내용은 ABFS를 사용하여 ADLS Gen2 또는 Blob Storage 탑재를 참조하세요.

  1. Blob Storage 컨테이너 또는 컨테이너 내부의 폴더를 탑재하려면 다음 명령을 사용합니다.

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

    어디

    • <storage-account-name>은 Azure Blob Storage 계정의 이름입니다.
    • <container-name>은 Azure Blob Storage 계정에 있는 컨테이너의 이름입니다.
    • <mount-name> Blob Storage 컨테이너 또는 컨테이너 내의 폴더(source지정됨)가 DBFS에 탑재되는 위치를 나타내는 DBFS 경로입니다.
    • <conf-key>fs.azure.account.key.<storage-account-name>.blob.core.windows.net 또는 fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net일 수 있습니다.
    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")비밀 범위비밀로 저장된 키를 가져옵니다.
  2. 컨테이너의 파일에 로컬 파일인 것처럼 액세스합니다. 예를 들면 다음과 같습니다.

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