Рекомендации по лучшим практикам для каталога DBFS и Unity Catalog
Каталог Unity представляет ряд новых конфигураций и концепций, которые подходят к управлению данными совершенно иначе, чем DBFS. В этой статье описано несколько рекомендаций по работе с внешними расположениями каталога Unity и DBFS.
Databricks рекомендует не использовать DBFS и подключенное облачное хранилище объектов для большинства вариантов использования в рабочих областях Azure Databricks с поддержкой каталога Unity. В этой статье описывается несколько сценариев, в которых следует использовать подключенное облачное хранилище объектов. Обратите внимание, что Databricks не рекомендует использовать корневой каталог DBFS в сочетании с каталогом Unity, если только вы не должны перенести файлы или данные, хранящиеся там в каталог Unity.
Как DBFS используется в рабочих областях с поддержкой каталога Unity?
Действия, выполняемые в таблицах в hive_metastore
используют устаревшие шаблоны доступа к данным, которые могут включать данные и учетные данные хранения, управляемые DBFS. Управляемые таблицы в рабочей области hive_metastore
хранятся в корневой папке DBFS.
Как DBFS работает в режиме доступа к одному пользователю?
Кластеры, настроенные с одним режимом доступа пользователей, имеют полный доступ к DBFS, включая все файлы в корневом каталоге DBFS и подключенных данных.
Как DBFS работает в режиме общего доступа?
Режим общего доступа объединяет управление данными каталога Unity с устаревшими списками контроля доступа (ACL) Azure Databricks. Доступ к данным в hive_metastore
предоставляется только тем пользователям, которым явным образом выданы разрешения.
Для взаимодействия с файлами непосредственно с помощью DBFS необходимо иметь предоставленные разрешения ANY FILE
. Так как ANY FILE
позволяет пользователям обойти устаревшие списки управления доступом к таблицам в hive_metastore
и получить доступ ко всем данным, управляемым DBFS, Databricks рекомендует осторожность при предоставлении этой привилегии.
Не используйте DBFS с внешними расположениями каталога Unity
Каталог Unity защищает доступ к данным во внешних расположениях, используя полные облачные URI пути для идентификации разрешений в каталогах объектного хранилища с управлением. Монтажи DBFS используют совершенно другую модель доступа к данным, которая полностью обходит каталог Unity. Databricks рекомендует не повторно использовать тома облачного хранилища объектов между подключениями DBFS и внешними томами UC, в том числе при совместном использовании данных между рабочими областями или учетными записями.
Защита управляемого каталогом Unity хранилища
Каталог Unity использует управляемые расположения хранилища для хранения файлов данных для управляемых таблиц и томов.
Databricks рекомендует следующее для управляемых расположений хранения:
- Используйте новые учетные записи хранения или контейнеры.
- Определите настраиваемую политику идентификации для каталога Unity.
- Ограничить доступ ко всем ресурсам Azure Databricks, управляемым каталогом Unity.
- Ограничить доступ ко всем политикам идентификационного доступа, созданным для каталога Unity.
Добавление существующих данных во внешние места
Можно загрузить существующие учетные записи хранения данных в каталог Unity с помощью внешних мест хранения. Для обеспечения максимальной безопасности Databricks рекомендует загружать только учетные записи хранения в внешние расположения после отзыва всех остальных учетных данных хранилища и шаблонов доступа.
Никогда не следует загружать учетную запись хранения, используемую как корень DBFS, в качестве внешнего местоположения в каталоге Unity.
Конфигурации кластера игнорируются доступом к файловой системе каталога Unity
Каталог Unity не учитывает конфигурации кластера для параметров файловой системы. Это означает, что параметры файловой системы Hadoop для настройки пользовательского поведения с облачным хранилищем объектов не работают при доступе к данным с помощью каталога Unity.
Ограничение на доступ по нескольким путям
Хотя вы обычно можете использовать каталог Unity и DBFS вместе, пути, которые совпадают или находятся в отношениях родитель/потомок, нельзя ссылаться с помощью различных методов доступа в одной команде или ячейке записной книжки.
Например, если внешняя таблица foo
определена в hive_metastore
в расположении a/b/c
, а внешнее расположение указано в Unity Catalog на a/b/
, следующий код приведет к ошибке.
spark.read.table("foo").filter("id IS NOT NULL").write.mode("overwrite").save("a/b/c")
Эта ошибка не возникает, если эта логика разбивается на две ячейки:
df = spark.read.table("foo").filter("id IS NOT NULL")
df.write.mode("overwrite").save("a/b/c")