Anpassen von Containern mit Databricks-Containerdiensten
Mit Databricks Container Services können Sie ein Docker-Image angeben, wenn Sie Compute erstellen. Im Folgenden finden Sie einige Beispiele für Anwendungsfälle:
- Bibliotheksanpassung: Sie haben die vollständige Kontrolle über die Systembibliotheken, die Sie installieren möchten.
- Goldene Containerumgebung: Ihr Docker-Image ist eine gesperrte Umgebung, die sich nie ändert.
- CI/CD-Integration (Docker): Sie können Azure Databricks mit CI/CD-Pipelines von Docker integrieren.
Sie können Docker-Images auch verwenden, um benutzerdefinierte Deep-Learning-Umgebungen für Berechnungen mit GPU-Geräten zu erstellen. Weitere Informationen zur Verwendung von GPU-Compute mit Databricks-Containerdiensten finden Sie unter Databricks-Containerdienste in GPU-Compute.
Verwenden Sie ein Init-Skript für Aufgaben, die bei jedem Containerstart ausgeführt werden sollen.
Anforderungen
- Databricks-Containerdienste müssen für Ihren Azure Databricks-Arbeitsbereich aktiviert sein.
- Auf Ihrem Computer muss ein aktueller Docker-Daemon ausgeführt werden (einer, der getestet wurde und mit der Client- bzw. Serverversion 18.03.0-ce funktioniert). Zudem muss der
docker
-Befehl in IhremPATH
verfügbar sein.
Begrenzungen
- Databricks Container Services wird nicht bei Berechnungen mit gemeinsamem Zugriffsmodus unterstützt.
- Databricks Runtime für Machine Learning unterstützt keine Databricks-Containerdienste.
- Um auf Volumes für Databricks-Containerdienste zuzugreifen, fügen Sie die folgende Konfiguration zum Spark config-Feld der Berechnung hinzu:
spark.databricks.unityCatalog.volumes.enabled true
.
Schritt 1: Erstellen Ihrer Basis
Databricks empfiehlt, dass Sie Ihre Docker-Basis aus einer Basis erstellen, die Databricks erstellt und getestet hat. Es ist auch möglich, Ihre Docker-Basis von Grund auf neu zu erstellen. In diesem Abschnitt werden die beiden Optionen beschrieben.
Option 1. Verwenden einer von Databricks erstellten Basis
In diesem Beispiel wird das Tag 9.x
für ein Image verwendet, das auf eine Computeressource mit der Runtimeversion der Databricks Runtime 9.1 LTS und höher abzielt:
FROM databricksruntime/standard:9.x
...
Um zusätzliche Python-Bibliotheken anzugeben (z. B. die neueste Version von pandas und urllib), verwenden Sie die containerspezifische Version von pip
. Geben Sie für den Container databricksruntime/standard:9.x
Folgendes an:
RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3
Geben Sie für den Container databricksruntime/standard:8.x
oder niedriger Folgendes an:
RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3
Basisimages werden auf Docker Hub unter https://hub.docker.com/u/databricksruntime gehostet. Die Dockerfiles, die zum Generieren dieser Basisimages verwendet werden, befinden sich unter https://github.com/databricks/containers.
Hinweis
In Docker Hub gehostete Images mit Tags mit dem Suffix „-LTS“ werden gepatcht. Alle anderen Images sind Beispiele und werden nicht regelmäßig gepatcht.
Hinweis
Die Basisimages databricksruntime/standard
und databricksruntime/minimal
dürfen nicht mit den nicht in Verbindung stehenden Umgebungen databricks-standard
und databricks-minimal
verwechselt werden, die in der nicht mehr verfügbaren Databricks Runtime-Version mit Conda (Beta) verfügbar sind.
Option 2. Erstellen einer eigenen Docker-Basis
Sie können Ihre Docker-Basis auch von Grund auf neu erstellen. Das Docker-Image muss die folgenden Anforderungen erfüllen:
- JDK 8u191 als Java-Version im Systempfad (
PATH
) - Bash
- iproute2 (ubuntu iproute)
- coreutils (ubuntu coreutils)
- procps (ubuntu procps)
- sudo (ubuntu sudo)
- Ubuntu Linux
Um Ihr eigenes Image von Grund auf neu zu erstellen, müssen Sie die virtuelle Umgebung erstellen. Sie müssen auch Pakete einbinden, die in Databricks Compute integriert sind, wie z. B. Python und R. Für den Anfang können Sie das entsprechende Basis-Image verwenden:
- Für R:
databricksruntime/rbase
- Für Python:
databricksruntime/python
- Für das minimale Image, das von Databricks erstellt wird:
databricksruntime/minimal
Sie können auch auf die Beispiel-Dockerfiles in GitHub verweisen.
Hinweis
Databricks empfiehlt die Verwendung von Ubuntu Linux. Es ist jedoch möglich, Alpine Linux zu verwenden. Um Alpine Linux verwenden zu können, müssen Sie die folgenden Dateien einschließen:
Darüber hinaus müssen Sie Python wie im Beispieldockerfile gezeigt einrichten.
Warnung
Testen Sie Ihr benutzerdefiniertes Container-Image gründlich auf einem Azure Databricks-Compute. Ihr Container kann auf einem lokalen oder Build-Computer funktionieren, aber wenn Ihr Container auf Azure Databricks gestartet wird, kann der Rechenstart fehlschlagen, bestimmte Funktionen können deaktiviert werden, oder Ihr Container kann aufhören zu funktionieren, sogar lautlos. Im schlimmsten Fall können Ihre Daten beschädigt oder versehentlich für externe Parteien freigegeben werden.
Schritt 2: Pushen des Basisimage
Pushen Sie Ihr benutzerdefiniertes Basisimage an eine Docker-Registrierung. Dieser Prozess wird für die folgenden Registrierungen unterstützt:
- Docker Hub ohne Authentifizierung oder mit Basisauthentifizierung
- Azure Container Registry mit Basisauthentifizierung
Andere Docker-Registrierungen, die keine Authentifizierung bzw. die Basisauthentifizierung unterstützen, funktionieren ebenfalls.
Hinweis
Wenn Sie Docker Hub für Ihre Docker-Registry verwenden, stellen Sie sicher, dass die Ratengrenzwerte der Menge an Datenverarbeitung entsprechen, die Sie in einem Zeitraum von sechs Stunden starten möchten. Diese Ratenbeschränkungen unterscheiden sich bei anonymen Benutzer*innen, authentifizierten Benutzer*innen ohne kostenpflichtiges Abonnement und kostenpflichtigen Abonnements. Weitere Informationen finden Sie in der Dokumentation zu Docker. Wenn dieser Grenzwert überschritten wird, erhalten Sie die Antwort „429 – Zu viele Anforderungen“.
Schritt 3: Starten Ihrer Berechnung
Sie können Ihre Berechnung über die Benutzeroberfläche oder die API starten.
Starten der Berechnung mithilfe der Benutzeroberfläche
Geben Sie auf der Berechnung erstellen Seite eine Databricks Runtime Version an, die Databricks Container Services unterstützt.
Wählen Sie unter Erweiterte Optionen die Registerkarte Docker aus.
Klicken Sie auf Use your own Docker container (Eigenen Docker-Container verwenden).
Geben Sie im Feld URL des Docker-Images Ihr benutzerdefiniertes Docker-Image ein.
Beispiele für die URL des Docker-Images:
Registrierung Tagformat Docker Hub <organization>/<repository>:<tag>
(Beispiel:databricksruntime/standard:latest
)Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
Wählen Sie den Authentifizierungstyp aus. Sie können geheime Schlüssel verwenden, um Benutzernamen- und Kennwortauthentifizierungswerte zu speichern. Weitere Informationen finden Sie unter Verwenden von geheimen Schlüsseln für die Authentifizierung.
Starten der Berechnung mithilfe der API
Verwenden Sie die Databricks-CLI, um einen Computevorgang mit Ihrer benutzerdefinierten Docker-Basis zu starten.
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" }'
Die
basic_auth
-Anforderungen hängen vom Docker-Imagetyp ab:- Schließen Sie bei öffentlichen Docker-Images das -Feld nicht
basic_auth
ein. - Bei privaten Docker-Images müssen Sie das Feld
basic_auth
mithilfe einer Dienstprinzipal-ID und einem Kennwort als Benutzername und Kennwort einschließen. - Für Azure Container Registry müssen Sie das
basic_auth
-Feld auf die ID und das Kennwort für einen Dienstprinzipal festlegen. Weitere Informationen zum Erstellen des Dienstprinzipals finden Sie unter Azure Container Registry-Authentifizierung mit Dienstprinzipalen. - Sie können auch einen geheimen Schlüssel verwenden, um Authentifizierungsinformationen zu speichern. Weitere Informationen finden Sie unter Verwenden von geheimen Schlüsseln für die Authentifizierung.
- Schließen Sie bei öffentlichen Docker-Images das -Feld nicht
Verwenden eines Initialisierungsskripts
Databricks Container Services ermöglichen es Kunden, Init-Skripte in den Docker-Container einzubinden. In den meisten Fällen sollten Sie Init-Skripts vermeiden und stattdessen Anpassungen direkt über Docker vornehmen (mithilfe des Dockerfile). Bestimmte Aufgaben müssen jedoch beim Starten des Containers und nicht beim Erstellen ausgeführt werden. Verwenden Sie ein Init-Skript für diese Aufgaben.
Angenommen, Sie möchten einen Sicherheitsdaemon in einem benutzerdefinierten Container ausführen. Installieren und erstellen Sie den Daemon im Docker-Image über Ihre Imagebuildpipeline. Fügen Sie dann ein Init-Skript hinzu, das den Daemon startet. In diesem Beispiel würde das Init-Skript eine Zeile wie systemctl start my-daemon
enthalten.
In der API können Sie Init-Skripte als Teil der Berechnungsspezifikation wie folgt angeben. Weitere Informationen finden Sie in der Cluster-API.
"init_scripts": [
{
"file": {
"destination": "file:/my/local/file.sh"
}
}
]
Für Databricks-Containerdienstimages können Sie auch Init-Skripts im Cloudspeicher speichern.
Die folgenden Schritte finden statt, wenn Sie eine Berechnung starten, die Databricks Container Services verwendet:
- VMs werden vom Cloudanbieter bezogen.
- Das benutzerdefinierte Docker-Image wird aus Ihrem Repository heruntergeladen.
- Azure Databricks erstellt einen Docker-Container aus dem Image.
- Databricks Runtime-Code wird in den Docker-Container kopiert.
- Die Initskripts werden ausgeführt. Weitere Informationen finden Sie unter Was sind Initskripts?.
Azure Databricks ignoriert die Docker-Primitive CMD
und ENTRYPOINT
.
Verwenden von geheimen Schlüsseln für die Authentifizierung
Der Databricks-Containerdienst unterstützt die Verwendung geheimer Schlüssel für die Authentifizierung. Wenn Sie Ihre Computeressource erstellen, geben Sie nicht ihren Nur-Text-Benutzernamen oder Ihr Kennwort ein, sondern geben Sie Ihren geheimen Schlüssel im {{secrets/<scope-name>/<dcs-secret>}}
-Format ein. Informationen zum Erstellen geheimer Schlüssel finden Sie unter Verwalten von geheimen Schlüsseln.
Aktivieren von Containerdiensten
Um benutzerdefinierte Container bei Ihrer Berechnung zu verwenden, muss ein Workspace-Administrator Databricks Container Services aktivieren.
Arbeitsbereichsadministratoren können den Databricks-Containerdienst mithilfe der Databricks-CLI aktivieren. Geben Sie für enableDcs
in einem JSON-Anforderungstext den Wert true
an, wie im folgenden Beispiel angezeigt:
databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'