Настройка контейнеров с помощью службы контейнеров Databricks
Службы контейнеров Databricks позволяют указать образ Docker при создании вычислительных ресурсов. Вот некоторые из вариантов использования:
- Настройка библиотеки: Вы полностью контролируете системные библиотеки, которые хотите установить.
- Оптимальная среда контейнера: образ Docker является заблокированной средой, которая никогда не изменится.
- Интеграция CI/CD Docker: вы можете интегрировать Azure Databricks с конвейерами непрерывной поставки и непрерывной интеграции (CI/CD).
Вы также можете использовать образы Docker для создания пользовательских сред глубокого обучения на вычислительных ресурсах с устройствами GPU. Дополнительные сведения об использовании вычислений GPU с службами контейнеров Databricks см. в разделе Databricks Container Services на вычислительных ресурсах GPU.
Для запуска задач, выполняемых при каждом запуске контейнера, используйте скрипт инициализации.
Требования
- В рабочей области Azure Databricks должны быть включены службы контейнеров Databricks.
- На компьютере должна быть запущена последняя версия управляющей программы Docker (протестированная и работающая с клиентом и сервером версии 18.03.0-ce), а по пути
PATH
должна быть доступна командаdocker
.
Ограничения
- Службы контейнеров Databricks не поддерживаются для вычислений с помощью режима общего доступа.
- Среда выполнения Databricks для Машинное обучение не поддерживает службы контейнеров Databricks.
- Чтобы получить доступ к томам в службах контейнеров Databricks, добавьте следующую конфигурацию в поле конфигурации Spark для вычислений:
spark.databricks.unityCatalog.volumes.enabled true
Шаг 1. Создание базы
Databricks рекомендует создать базовый образ Docker на основе базового образа, построенного и протестированного Databricks. Вы также можете создать базовый образ Docker с нуля. В этом разделе описаны оба варианта.
Вариант 1. Использование базового образа от Databricks
В этом примере используется 9.x
тег для образа, предназначенного для вычислений с версией Databricks Runtime 9.1 LTS и выше:
FROM databricksruntime/standard:9.x
...
Чтобы указать дополнительные библиотеки Python, такие как последняя версия Pandas и urllib, используйте версию pip
для конкретного контейнера. Для контейнера databricksruntime/standard:9.x
включите следующее:
RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3
Для контейнера databricksruntime/standard:8.x
и более ранних версий включите следующее:
RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3
Базовые образы размещаются в Docker Hub в https://hub.docker.com/u/databricksruntime. Файлы Dockerfile, используемые для создания этих базовых образов, доступны по адресу https://github.com/databricks/containers.
Примечание.
Размещенные образы Docker Hub с тегами с суффиксом "-LTS" будут исправлены. Все остальные изображения являются примерами и не исправляются регулярно.
Примечание.
Базовые образы databricksruntime/standard
и databricksruntime/minimal
не следует путать с несвязанными средами databricks-standard
и databricks-minimal
, которые входят в состав более не доступной версии Databricks Runtime с Conda (бета-версия).
Вариант 2. Создание собственного базового образа Docker
Вы также можете создать базовый образ Docker с нуля. Образ Docker должен соответствовать следующим требованиям:
- JDK 8u191 в качестве версии Java в системной переменной
PATH
- bash
- iproute2 (ubuntu iproute)
- coreutils (ubuntu coreutils)
- procps (ubuntu procps)
- sudo (ubuntu sudo)
- Ubuntu Linux
Для создания собственного образа с нуля необходимо создать виртуальную среду. Кроме того, необходимо включить пакеты, встроенные в вычислительные ресурсы Databricks, такие как Python и R. Чтобы приступить к работе, можно использовать соответствующий базовый образ:
- Для R:
databricksruntime/rbase
- Для Python:
databricksruntime/python
- Для минимального образа, созданного Databricks:
databricksruntime/minimal
Вы также можете ссылаться на примеры Dockerfiles в GitHub.
Примечание.
Databricks рекомендует Ubuntu Linux. Однако вместо этой версии можно использовать Alpine Linux. Для использования Alpine Linux необходимо включить следующие файлы:
Кроме того, необходимо настроить Python, как показано в этом примере Dockerfile.
Предупреждение
Тщательно проверьте образ пользовательского контейнера на вычислительных ресурсах Azure Databricks. Контейнер может работать на локальном компьютере или на компьютере сборки, но когда контейнер запускается в Azure Databricks, запуск вычислений может завершиться ошибкой, некоторые функции могут быть отключены, или контейнер может перестать работать даже автоматически. В наихудших сценариях ваши данные могут быть повреждены или случайно оказаться доступны внешним сторонам.
Шаг 2. Отправка базового образа
Отправьте свой пользовательский базовый образ в реестр Docker. Для этого процесса можно использовать следующие реестры:
- Docker Hub без проверки подлинности или с обычной проверкой подлинности.
- Реестр контейнеров Azure с обычной проверкой подлинности.
Также должны работать другие реестры Docker, поддерживающие отсутствие проверки подлинности или обычную проверку подлинности.
Примечание.
Если вы используете Docker Hub для реестра Docker, обязательно проверка, что ограничения скорости соответствуют количеству вычислительных ресурсов, которые вы ожидаете запустить в течение шестичасового периода. Эти ограничения скорости отличаются для анонимных пользователей, а также пользователей, прошедших проверку подлинности без платной подписки и с платными подписками. Подробные сведения см. в документации по Docker. Если это ограничение будет превышено, вы получите ответ 429 Too Many Requests (Слишком много запросов).
Шаг 3. Запуск вычислений
Вы можете запустить вычислительные ресурсы с помощью пользовательского интерфейса или API.
Запуск вычислений с помощью пользовательского интерфейса
На странице "Создание вычислений" укажите версию среды выполнения Databricks, которая поддерживает службы контейнеров Databricks.
В разделе Дополнительные параметры выберите вкладку Docker.
Выберите вариант Использовать собственный контейнер Docker.
В поле URL-адрес образа Docker укажите свой пользовательский образ Docker.
Примеры URL-адреса образа Docker:
Реестр Формат тега Docker Hub <organization>/<repository>:<tag>
(например,databricksruntime/standard:latest
)Реестр контейнеров Azure <your-registry-name>.azurecr.io/<repository-name>:<tag>
Выберите тип проверки подлинности. Секреты можно использовать для хранения значений имени пользователя и проверки подлинности паролей. См. раздел "Использование секретов для проверки подлинности".
Запуск вычислений с помощью API
Используйте интерфейс командной строки Databricks для запуска вычислений с помощью пользовательской базы Docker.
databricks clusters create \ --cluster-name <cluster-name> \ --node-type-id Standard_DS3_v2 \ --json '{ "num_workers": 0, "docker_image": { "url": "databricksruntime/standard:latest", "basic_auth": { "username": "<docker-registry-username>", "password": "<docker-registry-password>" } }, "spark_version": "14.3.x-scala2.12" }'
Требования относительно
basic_auth
зависят от типа образа Docker:- Для общедоступных образов Docker не включайте поле
basic_auth
. - Для частных образов Docker необходимо включить поле
basic_auth
, используя идентификатор и пароль субъекта-службы в качестве имени пользователя и пароля. - Для реестра контейнеров Azure необходимо задать в поле
basic_auth
идентификатор и пароль для субъекта-службы. Сведения о создании субъекта-службы см. в документации по проверке подлинности субъекта-службы в Реестре контейнеров Azure. - Вы также можете использовать секрет для хранения сведений о проверке подлинности. См. раздел "Использование секретов для проверки подлинности".
- Для общедоступных образов Docker не включайте поле
Использование скрипта инициализации
Службы контейнеров Databricks позволяют клиентам включать скрипты инициализации в контейнер Docker. В большинстве случаев следует избегать скриптов инициализации и вместо этого вносить изменения непосредственно через Docker (с помощью Dockerfile). Однако некоторые задачи должны выполняться при запуске контейнера, а не при его построении. Для их выполнения используйте скрипт инициализации.
Например, предположим, что вы хотите запустить управляющую программу в пользовательском контейнере. Установите и создайте управляющую программу в образе Docker с помощью конвейера создания образа. Затем добавьте скрипт инициализации, который запускает управляющую программу. В этом примере скрипт инициализации будет содержать строку наподобие systemctl start my-daemon
.
В API можно указать скрипты инициализации в рамках спецификации вычислений следующим образом. Дополнительные сведения см. в API кластеров.
"init_scripts": [
{
"file": {
"destination": "file:/my/local/file.sh"
}
}
]
Для образов служб контейнеров Databricks можно также хранить скрипты инициализации в облачном хранилище.
При запуске вычислений, использующих службы контейнеров Databricks, выполните следующие действия.
- Поставщик облачных служб выдает виртуальные машины.
- Пользовательский образ Docker скачивается из репозитория.
- Azure Databricks создает контейнер Docker на основе образа.
- Код Databricks Runtime копируется в контейнер Docker.
- Выполняются скрипты инициализации. См. статью "Что такое скрипты инициализации?".
Azure Databricks игнорирует примитивы CMD
и ENTRYPOINT
Docker.
Использование секретов для проверки подлинности
Служба контейнеров Databricks поддерживает использование секретов для проверки подлинности. При создании вычислительного ресурса вместо ввода имени пользователя или пароля обычного текста введите секрет с помощью {{secrets/<scope-name>/<dcs-secret>}}
формата. Сведения о создании секретов см. в разделе "Секреты".
Включение служб контейнеров
Чтобы использовать пользовательские контейнеры для вычислений, администратор рабочей области должен включить службы контейнеров Databricks.
Администраторы рабочей области могут включить службу контейнеров Databricks с помощью интерфейса командной строки Databricks. В тексте запроса JSON укажите enableDcs
true
значение , как показано в следующем примере:
databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'