Azure Blob Storage

Azure Blob Storage는 텍스트 또는 이진 데이터와 같이 많은 양의 구조화되지 않은 개체 데이터를 저장하는 서비스입니다. Blob Storage를 사용하여 세상에 공개적으로 표시하거나 애플리케이션 데이터를 비공개적으로 저장할 수 있습니다. Blob 스토리지의 일반적인 사용은 다음과 같습니다.

  • 브라우저에 직접 이미지 또는 문서 제공
  • 분산 액세스용 파일 저장.
  • 비디오 및 오디오 스트리밍.
  • 백업 및 복원, 재해 복구, 보관을 위한 데이터 저장.
  • 온-프레미스 또는 Azure 호스팅 서비스에서 분석하기 위한 데이터 저장.

참고

Azure Databricks는 Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure Cosmos DBAzure Synapse Analytics와 같은 Azure 데이터 원본도 지원합니다.

이 문서에서는 DBFS(Databricks File System)를 사용하여 스토리지를 탑재하거나 API를 직접 사용하여 Azure Blob Storage에 액세스하는 방법을 설명합니다.

요구 사항

추가 설정 없이 공용 스토리지 계정에서 데이터를 읽을 수 있습니다. 프라이빗 스토리지 계정에서 데이터를 읽으려면 공유 키 또는 SAS(공유 액세스 서명)을 구성해야 합니다.

Azure Databricks에서 자격 증명을 안전하게 활용하려면 Azure Blob Storage 컨테이너 탑재에 표시된 대로 비밀 관리 사용자 가이드를 따르는 것이 좋습니다.

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

Blob Storage 컨테이너 또는 컨테이너 내부의 폴더를 DBFS에 탑재할 수 있습니다. 탑재는 Blob Storage 컨테이너에 대한 포인터이므로 데이터가 로컬로 동기화되지 않습니다.

중요

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

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

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

    where

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

탑재 지점 분리

탑재 지점을 분리하려면 다음 명령을 사용합니다.

dbutils.fs.unmount("/mnt/<mount-name>")

Azure Blob Storage에 직접 액세스

이 섹션에서는 Spark DataFrame API, RDD API 및 Hive 클라이언트를 사용하여 Azure Blob Storage에 액세스하는 방법을 설명합니다.

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

세션 자격 증명 또는 클러스터 자격 증명으로 Azure Blob Storage의 데이터에 액세스하려면 먼저 자격 증명을 구성해야 합니다.

Notebook에서 다음을 실행하여 세션 자격 증명을 구성합니다.

  • 계정 액세스 키 설정:

    spark.conf.set(
      "fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
      "<storage-account-access-key>")
    
  • 컨테이너에 대한 SAS 설정:

    spark.conf.set(
      "fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
      "<complete-query-string-of-sas-for-the-container>")
    

클러스터 자격 증명을 구성하려면 클러스터를 만들 때 Spark 구성 속성을 설정합니다.

  • 계정 액세스 키 구성:

    fs.azure.account.key.<storage-account-name>.blob.core.windows.net <storage-account-access-key>
    
  • 컨테이너에 대한 SAS 구성:

    fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net <complete-query-string-of-sas-for-the-container>
    

경고

이러한 자격 증명은 클러스터에 액세스하는 모든 사용자가 사용할 수 있습니다.

계정 액세스 키 또는 SAS가 Notebook 또는 클러스터 구성에 설정되면 표준 Spark 및 Databricks API를 사용하여 스토리지 계정에서 읽을 수 있습니다.

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

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

Hadoop 구성 옵션은 SparkContext를 통해 액세스할 수 없습니다. RDD API를 사용하여 Azure Blob Storage에서 읽는 경우 클러스터를 만들 때 Hadoop 자격 증명 구성 속성을 Spark 구성 옵션으로 설정하고 해당 Hadoop 구성 키에 spark.hadoop. 접두사를 추가해야 합니다. RDD 작업에 사용되는 Hadoop 구성에 전파하려면:

  • 계정 액세스 키 구성:

    spark.hadoop.fs.azure.account.key.<storage-account-name>.blob.core.windows.net <storage-account-access-key>
    
  • 컨테이너에 대한 SAS 구성:

    spark.hadoop.fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net <complete-query-string-of-sas-for-the-container>
    

경고

이러한 자격 증명은 클러스터에 액세스하는 모든 사용자가 사용할 수 있습니다.

Hive 클라이언트에서 Azure Blob Storage에 액세스

Notebook의 세션 구성에 설정된 자격 증명은 Hive 클라이언트에서 액세스할 수 없습니다. 자격 증명을 Hive 클라이언트에 전파하려면 클러스터를 만들 때 Hadoop 자격 증명 구성 속성을 Spark 구성 옵션으로 설정해야 합니다.

  • 계정 액세스 키 구성:

    spark.hadoop.fs.azure.account.key.<storage-account-name>.blob.core.windows.net <storage-account-access-key>
    
  • 컨테이너에 대한 SAS 구성:

    # Using a SAS token
    spark.hadoop.fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net <complete-query-string-of-sas-for-the-container>
    

경고

이러한 자격 증명은 클러스터에 액세스하는 모든 사용자가 사용할 수 있습니다.

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

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

다음 Notebook은 Azure Blob Storage를 탑재하고 Spark API, Databricks API 및 Hive를 통해 데이터에 액세스하는 방법을 보여 줍니다.

Azure Blob Storage Notebook

Notebook 가져오기