DBFS 및 Unity 카탈로그 모범 사례

Unity 카탈로그는 DBFS와 완전히 다른 데이터 거버넌스에 접근하는 여러 가지 새로운 구성 및 개념을 소개합니다. 이 문서에서는 Unity 카탈로그 외부 위치 및 DBFS 작업과 관련된 몇 가지 모범 사례를 요약해서 보여줍니다.

Databricks에서는 Unity 카탈로그 지원 Azure Databricks 작업 영역에서 대부분의 사용 사례에 DBFS 및 탑재된 클라우드 개체 스토리지를 사용하지 않는 것이 좋습니다. 이 문서에서는 탑재된 클라우드 개체 스토리지를 사용해야 하는 몇 가지 시나리오를 설명합니다. Databricks에서는 저장된 데이터 또는 파일을 Unity 카탈로그로 마이그레이션해야 하는 경우를 제외하고 Unity 카탈로그와 함께 DBFS 루트를 사용하지 않는 것이 좋습니다.

Unity 카탈로그 지원 작업 영역에서 DBFS는 어떻게 사용되나요?

DBFS 루트는 작업 영역 범위 hive_metastore에서 관리되는 테이블을 만드는 것을 포함하여 Azure Databricks 작업 영역에서 수행되는 여러 작업과 관련된 파일을 저장하기 위한 기본 위치입니다. hive_metastore의 테이블에 대해 수행되는 작업에는 DBFS에서 관리되는 데이터 및 스토리지 자격 증명이 포함될 수 있는 레거시 데이터 액세스 패턴이 사용됩니다.

DBFS는 단일 사용자 액세스 모드에서 어떻게 작동하나요?

단일 사용자 액세스 모드로 구성된 클러스터에는 DBFS 루트 및 탑재된 데이터의 모든 파일을 포함하여 DBFS에 대한 모든 액세스 권한이 있습니다. DBFS 루트와 탑재는 이 액세스 모드에서 사용할 수 있으므로 Unity 카탈로그 데이터베이스에 액세스해야 하는 ML 워크로드에 적합합니다.

Databricks는 DBFS 및 Unity 카탈로그 둘 다에서 관리하는 데이터에 액세스해야 하는 프로덕션 워크로드에 예약된 작업 및 단일 사용자 액세스 모드가 있는 서비스 주체를 사용하는 것이 좋습니다.

DBFS는 공유 액세스 모드에서 어떻게 작동하나요?

공유 액세스 모드는 Unity 카탈로그 데이터 거버넌스를 Azure Databricks 레거시 테이블 ACL과 결합합니다. hive_metastore의 데이터 액세스는 권한이 명시적으로 부여된 사용자만 가능합니다.

DBFS를 사용하여 직접 파일과 상호 작용하려면 ANY FILE 권한이 부여되어야 합니다. ANY FILE은 사용자가 hive_metastore에 있는 레거시 테이블 ACL을 우회하고 DBFS에서 관리되는 모든 데이터에 액세스하도록 허용하므로, Databricks에서 이 권한을 부여할 때는 주의가 필요합니다.

Unity 카탈로그 액세스 위치에 DBFS 사용 안 함

Unity 카탈로그는 관리되는 개체 스토리지 디렉터리에 부여된 권한을 식별하기 위해 전체 클라우드 URI 경로를 사용하여 외부 위치의 데이터에 대한 액세스를 보호합니다. DBFS 탑재는 Unity 카탈로그를 완전히 우회하는 완전히 다른 데이터 액세스 모델을 사용합니다. Databricks에서는 DBFS 탑재와 UC 외부 볼륨 사이에 클라우드 개체 스토리지 볼륨을 재사용하지 않는 것이 좋습니다.

Unity 카탈로그 관리 스토리지 보안

각 Unity 카탈로그 메타스토어에는 Azure Databricks 계정 관리자가 구성한 개체 스토리지 계정이 포함되어 있습니다. Unity 카탈로그는 이 위치를 사용하여 Unity 카탈로그 관리 테이블에 대한 모든 데이터 및 메타데이터를 저장합니다.

Unity 카탈로그 메타스토어에 사용되는 스토리지 계정은 다음과 같아야 합니다.

  • Unity 카탈로그에 대해 새로 만들어야 합니다.
  • Unity 카탈로그에 대해 사용자 지정 ID 정책을 정의해야 합니다.
  • Unity 카탈로그를 통해서만 액세스할 수 있어야 합니다.
  • Unity 카탈로그에 대해 만든 ID 액세스 정책을 사용해서만 액세스할 수 있어야 합니다.

외부 위치에 기존 데이터 추가

외부 위치를 사용하여 기존 스토리지 계정을 Unity 카탈로그에 로드할 수 있습니다. 최고의 보안을 위해 Databricks에서는 다른 모든 스토리지 자격 증명 및 액세스 패턴이 취소된 경우에만 스토리지 계정을 외부 위치에 로드하는 것이 좋습니다.

DBFS 루트로 사용되는 스토리지 계정을 Unity 카탈로그의 외부 위치로 로드하지 않아야 합니다.

클러스터 구성이 Unity 카탈로그 파일 시스템 액세스에서 무시됨

Unity 카탈로그는 파일 시스템 설정에 대해 클러스터 구성을 준수하지 않습니다. 즉, Unity 카탈로그를 사용하여 데이터에 액세스할 때 클라우드 개체 스토리지로 사용자 지정 동작을 구성하기 위한 Hadoop 파일 시스템 설정이 작동하지 않습니다.

여러 경로 액세스에 대한 제한 사항

일반적으로 Unity 카탈로그와 DBFS를 함께 사용할 수 있지만 동일하거나 부모/자식 관계를 공유하는 경로는 서로 다른 액세스 방법을 사용하는 동일한 명령 또는 Notebook 셀에서 참조할 수 없습니다.

예를 들어 외부 테이블 foohive_metastore에서 a/b/c 위치에 정의되어 있고 외부 위치가 a/b/에서 Unity 카탈로그에 정의된 경우 다음 코드는 오류를 발생시킵니다.

spark.read.table("foo").filter("id IS NOT NULL").write.mode("overwrite").save("a/b/c")

이 논리를 2개 셀로 구분하면 이 오류가 발생하지 않습니다.

df = spark.read.table("foo").filter("id IS NOT NULL")
df.write.mode("overwrite").save("a/b/c")