다음을 통해 공유


DBFS 및 Unity 카탈로그 모범 사례

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

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

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

DBFS에서 hive_metastore 관리하는 데이터 및 스토리지 자격 증명을 포함할 수 있는 레거시 데이터 액세스 패턴을 사용하는 테이블에 대해 수행되는 작업입니다. 작업 영역 범위의 관리 테이블 hive_metastore 은 DBFS 루트에 저장됩니다.

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

단일 사용자 액세스 모드로 구성된 클러스터는 DBFS 루트에 있는 모든 파일 및 탑재된 데이터를 포함하여 DBFS에 대해 전체 액세스 권한을 갖습니다.

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 카탈로그입니다.

Databricks는 관리되는 스토리지 위치에 대해 다음을 권장합니다.

  • 새 스토리지 계정 또는 버킷을 사용합니다.
  • Unity 카탈로그에 대한 사용자 지정 ID 정책을 정의합니다.
  • Unity 카탈로그에서 관리하는 Azure Databricks에 대한 모든 액세스를 제한합니다.
  • 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")