Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Einschränkungen
- Databricks Container-Dienste werden nicht auf Computern unterstützt, die den Standard-Zugriffsmodus verwenden (früher gemeinsamer Zugriffsmodus).
- Databricks Runtime für Machine Learning unterstützt keine Databricks-Containerdienste.
- Um auf Volumes auf Databricks Container-Dienste zuzugreifen, fügen Sie die folgende Konfiguration zum Feld Spark config des Compute hinzu:
spark.databricks.unityCatalog.volumes.enabled true
. - Für den Zugriff auf Verbund-Hive-Metastore auf Databricks Container-Diensten fügen Sie die folgende Konfiguration zum Feld Spark config des Computes hinzu:
spark.databricks.unityCatalog.hms.federation.enabled true
. 172.17.0.0/16
ist der standardmäßige IP-Bereich, der von Docker verwendet wird. Um Konnektivitätsprobleme aufgrund eines IP-Konflikts zu verhindern, vermeiden Sie das Einrichten von Ressourcen in diesem Subnetz.
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 "Erweitert" 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>
(zum Beispiel:databricksruntime/standard:latest
)Azure Container Registry (Registrierungsdienst für Container von Azure) <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. Siehe Docker-Imageauthentifizierung.
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" }'
Docker-Imageauthentifizierung
Die Authentifizierungsanforderungen hängen vom Docker-Imagetyp ab. Sie können auch geheime Schlüssel verwenden, um Authentifizierungsbenutzernamen und Kennwörter zu speichern. Weitere Informationen finden Sie unter Verwenden von geheimen Schlüsseln für die Authentifizierung.
- Für öffentliche Docker-Images müssen Sie keine Authentifizierungsinformationen einschließen. Legen Sie in der Benutzeroberfläche die Authentifizierung auf "Standard" fest. Für den API-Aufruf geben Sie die
basic_auth
-Felder nicht an. - Für private Docker-Images authentifizieren Sie sich mit einer ID des Dienstprinzipals und einem Kennwort (oder anwendbaren Secrets) als Benutzernamen und Kennwort.
- Für Azure Container Registry authentifizieren Sie sich mit einer ID des Dienstprinzipals und einem Kennwort (oder anwendbaren Secrets) als Benutzernamen und Kennwort. Weitere Informationen zum Erstellen des Dienstprinzipals finden Sie unter Azure Container Registry-Authentifizierung mit Dienstprinzipalen.
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 Computerressource in der Benutzeroberfläche erstellen, verwenden Sie das Feld Authentifizierung, um Benutzername und Kennwort auszuwählen. Anstatt Ihren Benutzernamen oder Ihr Kennwort im Klartext einzugeben, geben Sie Ihre Geheimnisse mithilfe des {{secrets/<scope-name>/<dcs-secret>}}
-Formats ein. Wenn Sie die API verwenden, geben Sie die geheimen Schlüssel in die basic_auth
Felder ein.
Informationen zum Erstellen geheimer Schlüssel finden Sie unter "Geheime Verwaltung".
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
.
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"}'