Menyesuaikan kontainer dengan Databricks Container Service
Layanan Kontainer Databricks memungkinkan Anda menentukan gambar Docker saat membuat komputasi. Beberapa contoh kasus penggunaan:
- Kustomisasi pustaka - Anda memiliki kontrol penuh atas pustaka sistem yang ingin Anda pasang.
- Lingkungan kontainer keemasan - gambar Docker Anda adalah lingkungan terkunci yang tidak akan pernah berubah.
- Integrasi Docker CI/CD - Anda dapat mengintegrasikan Azure Databricks dengan alur Docker CI/CD Anda.
Anda juga dapat menggunakan gambar Docker untuk membuat lingkungan pembelajaran mendalam kustom pada komputasi dengan perangkat GPU. Untuk informasi tambahan tentang menggunakan komputasi GPU dengan Databricks Container Services, lihat Databricks Container Services pada komputasi GPU.
Agar tugas dijalankan setiap kali kontainer dimulai, gunakan skrip init.
Persyaratan
- Ruang kerja Azure Databricks Anda harus mengaktifkan Layanan Kontainer Databricks.
- Komputer Anda harus menjalankan daemon Docker terbaru (yang diuji dan bekerja dengan Client/Server Versi 18.03.0-ce) dan
docker
perintah harus tersedia pada komputer AndaPATH
.
Batasan
- Databricks Container Services tidak didukung pada komputasi menggunakan mode akses standar (sebelumnya mode akses bersama).
- Databricks Runtime for Pembelajaran Mesin tidak mendukung Databricks Container Services.
- Untuk mengakses Volumes pada Databricks Container Services, tambahkan konfigurasi berikut ke dalam bidang dari konfigurasi Spark
compute: . -
172.17.0.0/16
adalah rentang IP default yang digunakan oleh Docker. Untuk mencegah masalah konektivitas karena konflik IP, hindari menyiapkan sumber daya di subnet ini.
Langkah 1: Bangun basis Anda
Databricks merekomendasikan agar Anda membangun basis Docker Anda dari basis yang telah dibangun dan diuji oleh Databricks. Anda juga dapat membangun basis Docker Anda dari awal. Bagian ini menjelaskan dua opsi tersebut.
Opsi 1. Gunakan basis yang dibangun oleh Databricks
Contoh ini menggunakan 9.x
tag untuk gambar yang akan menargetkan komputasi dengan versi runtime Databricks Runtime 9.1 LTS ke atas:
FROM databricksruntime/standard:9.x
...
Untuk menentukan pustaka Python tambahan, seperti versi terbaru pandas dan urllib, gunakan versi khusus kontainer pip
. Untuk databricksruntime/standard:9.x
kontainer, sertakan yang berikut:
RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3
Untuk databricksruntime/standard:8.x
kontainer atau yang lebih rendah, sertakan yang berikut:
RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3
Gambar dasar dihosting di Docker Hub di https://hub.docker.com/u/databricksruntime. Dockerfiles yang digunakan untuk menghasilkan basis ini berada di https://github.com/databricks/containers.
Catatan
Gambar yang dihosting Docker Hub dengan Akhiran "-LTS" akan di-patch. Semua gambar lainnya adalah contoh dan tidak di-patch secara teratur.
Catatan
Gambar dasar databricksruntime/standard
dan databricksruntime/minimal
tidak boleh dikacaukan dengan yang tidak terkait databricks-standard
dan databricks-minimal
lingkungan yang termasuk dalam Runtime bahasa umum Databricks yang tidak lagi tersedia dengan Conda (Beta).
Opsi 2. Bangun basis Docker Anda sendiri
Anda juga dapat membangun basis Docker Anda dari awal. Gambar Docker harus memenuhi persyaratan berikut:
- JDK 8u191 sebagai Java pada sistem
PATH
- bash
- iproute2 (ubuntu iproute)
- coreutils (coreutils ubuntu)
- procps (ubuntu procps)
- sudo (ubuntu sudo)
- Ubuntu Linux
Untuk membangun gambar Anda sendiri dari awal, Anda harus membuat lingkungan virtual. Anda juga harus menyertakan paket yang disertakan dalam komputasi Databricks, seperti Python dan R. Untuk memulai, Anda dapat menggunakan gambar dasar yang sesuai:
- Untuk R:
databricksruntime/rbase
- Untuk Python:
databricksruntime/python
- Untuk gambar minimal yang dibangun oleh Databricks:
databricksruntime/minimal
Anda juga dapat merujuk ke contoh Dockerfiles di GitHub.
Catatan
Databricks merekomendasikan untuk menggunakan Linux Ubuntu; Namun, dimungkinkan untuk menggunakan Linux Alpine. Untuk menggunakan Linux Alpine, Anda harus menyertakan file-file ini:
Selain itu, Anda harus menyiapkan Python, seperti yang ditunjukkan dalam contoh Dockerfile .
Peringatan
Uji gambar kontainer kustom Anda secara menyeluruh pada komputasi Azure Databricks. Kontainer Anda mungkin berfungsi pada komputer lokal atau build, tetapi ketika kontainer Anda diluncurkan di Azure Databricks, peluncuran komputasi mungkin gagal, fitur tertentu mungkin dinonaktifkan, atau kontainer Anda mungkin berhenti berfungsi, bahkan diam-diam. Dalam skenario terburuk, itu bisa merusak data Anda atau secara tidak sengaja mengekspos data Anda ke pihak eksternal.
Langkah 2: Dorong gambar dasar Anda
Dorong gambar dasar kustom Anda ke registri Docker. Proses ini didukung dengan pendaftar berikut:
- Docker Hub tanpa autentikasi atau autentikasi dasar.
- Azure Container Registry dengan autentikasi dasar.
Pendaftar Docker lain yang tidak mendukung autentikasi atau autentikasi dasar juga diharapkan berfungsi.
Catatan
Jika Anda menggunakan Docker Hub untuk registri Docker Anda, pastikan untuk memeriksa bahwa batas tarif mengakomodasi jumlah komputasi yang Anda harapkan untuk diluncurkan dalam periode enam jam. Batas tarif ini berbeda untuk pengguna anonim, pengguna yang diautentikasi tanpa langganan berbayar, dan langganan berbayar. Lihat dokumentasi Docker untuk mengetahui detailnya. Jika batas ini terlampaui, Anda akan mendapatkan respons "429 Terlalu Banyak Permintaan".
Langkah 3: Luncurkan komputasi Anda
Anda dapat meluncurkan komputasi menggunakan UI atau API.
Luncurkan komputasi Anda menggunakan UI
Pada halaman Buat komputasi, tentukan Versi Runtime Databricks yang mendukung Layanan Kontainer Databricks.
Di bawah , pilih tab Docker.
Pilih Gunakan kontainer Docker Anda sendiri.
Di bidang URL Gambar Docker, masukkan gambar Docker kustom Anda.
Contoh URL gambar Docker:
Registri Format tag Docker Hub <organization>/<repository>:<tag>
(misalnya:databricksruntime/standard:latest
)Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
Pilih jenis autentikasi. Anda dapat menggunakan rahasia untuk menyimpan nilai autentikasi nama pengguna dan kata sandi. Lihat autentikasi gambar Docker.
Luncurkan komputasi Anda menggunakan API
Gunakan Databricks CLI untuk meluncurkan komputasi dengan basis Docker kustom Anda.
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" }'
autentikasi gambar Docker
Persyaratan autentikasi bergantung pada jenis gambar Docker Anda. Anda juga dapat menggunakan rahasia untuk menyimpan nama pengguna dan kata sandi autentikasi. Lihat Menggunakan rahasia untuk autentikasi.
- Untuk gambar Docker publik, Anda tidak perlu menyertakan informasi autentikasi. Di UI, atur Autentikasi ke Default. Untuk panggilan API, tidak menyertakan bidang
basic_auth
. - Untuk citra Docker privat, autentikasi menggunakan ID dan kata sandi prinsipal layanan (atau rahasia yang berlaku) sebagai nama pengguna dan kata sandi.
- Untuk Azure Container Registry, autentikasi menggunakan ID dan kata sandi perwakilan layanan (atau rahasia yang berlaku) sebagai nama pengguna dan kata sandi. Lihat Dokumentasi autentikasi perwakilan layanan Azure Container Registry untuk informasi tentang pembuatan perwakilan layanan.
Menggunakan rahasia untuk autentikasi
Layanan Kontainer Databricks mendukung penggunaan rahasia untuk autentikasi. Saat membuat sumber daya komputasi Anda di UI, gunakan bidang Autentikasi untuk memilih Nama pengguna dan kata sandi, lalu alih-alih memasukkan nama pengguna atau kata sandi teks biasa Anda, masukkan rahasia Anda menggunakan format {{secrets/<scope-name>/<dcs-secret>}}
. Jika Anda menggunakan API, masukkan rahasia di bidang basic_auth
.
Untuk informasi tentang membuat rahasia, lihat Manajemen rahasia.
Gunakan skrip init
Layanan Kontainer Databricks memungkinkan pelanggan untuk menyertakan skrip init dalam kontainer Docker. Dalam kebanyakan kasus, Anda harus menghindari skrip init dan sebagai gantinya membuat penyesuaian melalui Docker secara langsung (menggunakan Dockerfile). Namun, tugas-tugas tertentu harus dijalankan ketika kontainer dimulai, bukan ketika kontainer dibangun. Gunakan skrip init untuk tugas-tugas ini.
Misalnya, Anda ingin menjalankan daemon keamanan di dalam kontainer kustom. Pasang dan bangun daemon di gambar Docker melalui alur pembuatan gambar Anda. Kemudian, tambahkan skrip init yang memulai daemon. Dalam contoh ini, skrip init akan menyertakan baris seperti systemctl start my-daemon
.
Di API, Anda dapat menentukan skrip init sebagai bagian dari spesifikasi komputasi sebagai berikut. Untuk informasi selengkapnya, lihat API Kluster.
"init_scripts": [
{
"file": {
"destination": "file:/my/local/file.sh"
}
}
]
Untuk gambar Databricks Container Services, Anda juga dapat menyimpan skrip init di penyimpanan cloud.
Langkah-langkah berikut terjadi saat Anda meluncurkan komputasi yang menggunakan Databricks Container Services:
- VM diperoleh dari penyedia cloud.
- Gambar Docker kustom diunduh dari repositori Anda.
- Azure Databricks membuat kontainer Docker dari gambar.
- Kode Runtime bahasa umum Databricks disalin ke dalam kontainer Docker.
- Skrip init dijalankan. Lihat Apa itu skrip init?.
Azure Databricks mengabaikan Docker CMD
dan ENTRYPOINT
primitif.
Aktifkan Layanan Kontainer
Untuk menggunakan kontainer kustom pada komputasi Anda, admin ruang kerja harus mengaktifkan Layanan Kontainer Databricks.
Admin ruang kerja dapat mengaktifkan Layanan Kontainer Databricks menggunakan Databricks CLI. Dalam isi permintaan JSON, tentukan enableDcs
ke true
, seperti dalam contoh berikut:
databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'