Azure Databricks에서 클라우드 개체 스토리지 탑재

Azure Databricks를 사용하면 클라우드 개체 스토리지를 DBFS(Databricks 파일 시스템)에 탑재하여 클라우드 개념에 익숙하지 않은 사용자의 데이터 액세스 패턴을 간소화할 수 있습니다. 탑재된 데이터는 Unity 카탈로그에서 작동하지 않으며 Databricks는 탑재를 사용하지 않고 대신 Unity 카탈로그를 사용하여 데이터 거버넌스를 관리하는 것이 좋습니다.

Azure Databricks는 클라우드 개체 스토리지를 어떻게 탑재하나요?

Azure Databricks 탑재는 작업 영역과 클라우드 개체 스토리지 간에 링크를 만들어 Databricks 파일 시스템에 상대적인 친숙한 파일 경로를 사용하여 클라우드 개체 스토리지와 상호 작용할 수 있도록 합니다. 탑재는 다음 정보를 저장하는 /mnt 디렉터리 아래에 로컬 별칭을 만들어 작동합니다.

  • 클라우드 개체 스토리지의 위치입니다.
  • 스토리지 계정 또는 컨테이너에 연결할 드라이버 사양입니다.
  • 데이터에 액세스하는 데 필요한 보안 자격 증명입니다.

스토리지 탑재 구문은 무엇인가요?

source는 개체 스토리지의 URI를 지정합니다(필요에 따라 보안 자격 증명을 인코딩할 수 있습니다). mount_point/mnt 디렉터리에서 로컬 경로를 지정합니다. 일부 개체 스토리지 원본은 선택적 encryption_type 인수를 지원합니다. 일부 액세스 패턴의 경우 추가 구성 사양을 사전으로 extra_configs에 전달할 수 있습니다.

참고 항목

Databricks는 탑재 관련 Spark 및 Hadoop 구성을 사용 extra_configs옵션으로 설정하는 것이 좋습니다. 이렇게 하면 구성이 클러스터 또는 세션이 아닌 탑재에 연결됩니다.

dbutils.fs.mount(
  source: str,
  mount_point: str,
  encryption_type: Optional[str] = "",
  extra_configs: Optional[dict[str:str]] = None
)

부적절한 구성으로 작업 영역의 모든 사용자에게 보안되지 않은 액세스를 제공할 수 있으므로 데이터 탑재를 구성하거나 변경하기 전에 작업 영역 및 클라우드 관리자에게 문의하세요.

참고 항목

이 문서에 설명된 방법 외에도 Databricks Terraform 공급자databricks_mount를 사용하여 버킷 탑재를 자동화할 수 있습니다.

탑재 지점 분리

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

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

Warning

오류를 방지하려면 다른 작업이 읽거나 쓰는 동안 탑재 지점을 수정하지 마세요. 탑재를 수정한 후에는 항상 실행 중인 다른 모든 클러스터에서 실행 dbutils.fs.refreshMounts() 하여 탑재 업데이트를 전파합니다. refreshMounts 명령(dbutils.fs.refreshMounts)을 참조하세요.

ABFS를 사용하여 ADLS Gen2 또는 Blob Storage 탑재

인증을 위해 Microsoft Entra ID(이전의 Azure Active Directory) 애플리케이션 서비스 주체를 사용하여 Azure Storage 계정에 데이터를 탑재할 수 있습니다. 자세한 내용은 서비스 원칙 및 Microsoft Entra ID(Azure Active Directory)를 사용하여 Access Storage를 참조하세요.

Important

  • Azure Databricks 작업 영역의 모든 사용자는 탑재된 ADLS Gen2 계정에 액세스할 수 있습니다. 해당 ADLS Gen2 계정에만 액세스할 수 있는 권한을 ADLS Gen2 계정에 액세스하는 데 사용하는 서비스 주체에 부여해야 합니다. 다른 Azure 리소스에 액세스할 수 있는 권한을 부여하면 안 됩니다.
  • 클러스터를 통해 탑재 지점을 만들면 클러스터 사용자가 탑재 지점에 즉시 액세스할 수 있습니다. 실행 중인 다른 클러스터에서 탑재 지점을 사용하려면 실행 중인 클러스터에서 dbutils.fs.refreshMounts()를 실행하여 새로 만들어진 탑재 지점을 사용할 수 있도록 해야 합니다.
  • 작업이 실행되는 동안 탑재 지점을 분리하면 오류가 발생할 수 있습니다. 프로덕션 작업에서 처리의 일부로 스토리지를 분리하지 않는지 확인합니다.
  • 비밀을 사용하는 탑재 지점은 자동으로 새로 고쳐지지 않습니다. 탑재된 스토리지에서 회전, 만료 또는 삭제되는 비밀을 사용하는 401 Unauthorized와 같은 오류가 발생할 수 있습니다. 이러한 오류를 해결하려면 스토리지를 분리했다가 다시 탑재해야 합니다.
  • ABFS 엔드포인트를 사용하여 Azure Data Lake Storage Gen2 스토리지 계정을 성공적으로 탑재하려면 HNS(계층 구조 네임스페이스)를 사용하도록 설정해야 합니다.

Notebook에서 다음을 실행하여 탑재 지점을 인증하고 만듭니다.

configs = {"fs.azure.account.auth.type": "OAuth",
          "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
          "fs.azure.account.oauth2.client.id": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)
val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<application-id>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

바꾸기

  • <application-id>를 Active Directory 애플리케이션에 대한 애플리케이션(클라이언트) ID로 바꿉니다.
  • <scope-name>을 Databricks 비밀 범위 이름으로 바꿉니다.
  • <service-credential-key-name>을 클라이언트 암호가 포함된 키 이름으로 바꿉니다.
  • <directory-id>를 Azure Active Directory 애플리케이션에 대한 디렉터리(테넌트) ID로 바꿉니다.
  • <container-name>을 ADLS Gen2 스토리지 계정의 컨테이너 이름으로 바꿉니다.
  • <storage-account-name>을 ADLS Gen2 스토리지 계정 이름으로 바꿉니다.
  • <mount-name>을 DBFS에서 의도한 탑재 지점 이름으로 바꿉니다.