Databricks-Containerdienste für Standardrechenleistung

Important

Databricks-Containerdienste für Standardberechnungen befinden sich in der Betaversion. Ein Arbeitsbereichsadministrator muss dieses Feature über die Arbeitsbereichvorschauseite aktivieren. Dies ist ein anderer Dienst als Databricks Container Services für dedizierte Rechenressourcen, der allgemein verfügbar ist.

Mit Databricks-Containerdiensten für standard compute können Sie ein Docker-Image angeben, wenn Sie standard compute erstellen, sodass Sie auf benutzerdefinierte Container in gemeinsam genutzten Computeumgebungen zugreifen können. Ihr Docker-Image ist die einzige Definition der Workloadumgebung, sodass Sie die Remoteumgebung lokal reproduzieren können, um konsistente Ergebnisse in der Gesamten Entwicklung und Produktion zu erzielen.

Um ihr benutzerdefiniertes Image zu erstellen, stellt Azure Databricks ein Basisimage bereit, das an serverlosen Umgebungsversionen ausgerichtet ist, die Sie erweitern können, um Ihre Anforderungen zu erfüllen.

Requirements

So verwenden Sie Databricks-Containerdienste für die Standardberechnung:

  • Die Computeressource muss Databricks Runtime 18.3 oder höher ausführen und den Standardzugriffsmodus verwenden.
  • Sie müssen über einen aktuellen Docker-Daemon verfügen, der den docker Befehl auf Ihrem PATHServer zur Verfügung hat.

Schritt 1: Aktivieren von Databricks-Containerdiensten für die Standardberechnung

Um Databricks-Containerdienste für die Standardberechnung zu verwenden, muss ein Arbeitsbereichsadministrator das Feature über die Vorschauseite aktivieren:

  1. Melden Sie sich als Administrator bei Ihrem Azure Databricks-Arbeitsbereich an.
  2. Klicken Sie im Benutzermenü oben rechts auf "Vorschauen".
  3. Suchen Sie DCS für die Standardberechnung , und aktivieren Sie sie.

Schritt 2: Erstellen Ihres benutzerdefinierten Images

In diesen Anweisungen wird gezeigt, wie Sie ein benutzerdefiniertes Image erstellen, indem Sie ein databricks-bereitgestelltes Basisimage erweitern (empfohlen). Das Basisimage enthält die Abhängigkeiten, die zum Starten Ihrer Workloads erforderlich sind, z. B. Ubuntu, Python und JDK. Sie können databricksruntime/environment:v5-standard abrufen, Ihre Pakete darauf aufbauen und weiterhin von Databricks verwaltete Updates und Sicherheitspatches übernehmen.

Wenn Sie ein minimales Basisimage von Grund auf neu erstellen möchten, lesen Sie "Referenz: Erstellen eines minimalen Basisimages von Grund auf neu".

Schritt 2a: Ziehen des Basisimages

Um das Basis-Image herunterzuladen, führen Sie Folgendes aus:

docker pull databricksruntime/environment:v5-standard

Schritt 2b: Schreiben einer Dockerfile-Datei, die das Basisimage erweitert

Installieren Sie benutzerdefinierte Python Pakete in der /databricks/python3 virtuellen Umgebung des Basisimages. Dies ist die virtuelle Systemumgebung, die Ihre Workloads startet.

FROM databricksruntime/environment:v5-standard

RUN /databricks/python3/bin/python -m pip install <your python package>

Das folgende Beispiel zeigt, wie Sie ein Paket aus einem privaten Repository installieren.

FROM databricksruntime/environment:v5-standard

ENV PIP_INDEX_URL=https://pypi.org/simple

RUN /databricks/python3/bin/python -m pip install --no-cache-dir simplejson

Sie können jede Standardanweisung in einem Dockerfile verwenden (zum Beispiel RUN, ENV, WORKDIR, COPY). Die folgenden Anweisungen werden ignoriert, da Azure Databricks Ihre Workload startet:

  • USER
  • CMD
  • ENTRYPOINT
  • EXPOSE
  • HEALTHCHECK
  • SHELL
  • STOPSIGNAL

Note

Kopieren Sie für Scala-Workloads Ihre JAR-Dateien in das /scala-jars/user Verzeichnis im Image und chmod 0644 diese, damit der Sandkastenbenutzer sie lesen kann. Azure Databricks lädt JARs von diesem Pfad auf den Spark-Klassenpfad.

Schritt 2c: Erstellen des Images

Führen Sie zum Erstellen des Images Folgendes aus:

docker build -f <your-dockerfile> -t <registry-url>/<project>[/<repo>]:<tag> .

Warning

Testen Sie Ihr benutzerdefiniertes Bild gründlich auf einer Azure Databricks Compute. Ein Image, das auf einem lokalen Rechner oder Buildsystem funktioniert, startet möglicherweise nicht, deaktiviert unbemerkt Funktionen oder funktioniert nicht mehr, wenn es in Azure Databricks gestartet wird.

Referenz: Erstellung eines minimalen Basis-Images von Grund auf

Wenn Sie die volle Kontrolle über den Inhalt Ihres Basisimages benötigen (z. B. um strenge Imagegrößen, Lieferketten- oder Complianceanforderungen zu erfüllen), können Sie ein minimales Äquivalent databricksruntime/environment:v5-standard von Grund auf erstellen, anstatt es zu erweitern.

Warning

Das Erstellen von Grund auf neu ist eine Option für Fortgeschrittene. Sie übernehmen die Verantwortung für das Nachverfolgen von Upstream-Änderungen am Image v5-standard, einschließlich Python-Pins, Sicherheitspatches, Plattform-Tooling und der von der Plattform benötigten Dateien unter /databricks/ und /etc/environment. Stattdessen empfiehlt Databricks, databricksruntime/environment:v5-standard zu erweitern, wie zuvor in Schritt 2 gezeigt.

Databricks stellt ein Referenz-Dockerfile und requirements.txt bereit, die die wesentliche Python-Umgebung von v5-standard nachbilden. Laden Sie beide Dateien vor dem Erstellen in dasselbe Verzeichnis herunter:

Führen Sie zum Erstellen des Images Folgendes aus:

docker build -t <your-registry>/<repo>:<tag> .

Wenn Ihr Build-Host https://pypi.org nicht erreichen kann, überschreiben Sie den pip-Index während des Builds, indem Sie Folgendes ausführen:

docker build --build-arg PIP_INDEX_URL=https://your-mirror/simple -t <your-registry>/<repo>:<tag> .

Bevor Sie mit dem nächsten Schritt fortfahren, überprüfen Sie, ob die kuratierten Python Pakete sauber importiert werden, indem Sie Folgendes ausführen:

docker run --rm --cpus 2 <your-registry>/<repo>:<tag> \
  /databricks/python3/bin/python -c \
  "import pandas, numpy, pyarrow, mlflow, databricks.connect; print('OK')"

Schritt 3: Übertragen Ihres Images in eine Registrierung

Als Nächstes übertragen Sie Ihr Image in eine Docker-Registry. Databricks Container Services unterstützt dieselben Registrierungen sowohl für Standard- als auch für dedizierte Compute:

Andere Registrierungen, die keine Authentifizierung oder Standardauthentifizierung unterstützen, sollten ebenfalls funktionieren. Die Standardauthentifizierung verwendet Ihren Registrierungsbenutzernamen und Ihr Kennwort.

Um eine optimale Bild-Pull-Leistung zu erzielen, verwenden Sie eine Registrierung in derselben Cloud und Region wie Ihr Azure Databricks Arbeitsbereich.

echo "$REGISTRY_PASSWORD" | docker login -u <registry-username> --password-stdin <registry-url>
docker push <registry-url>/<project>[/<repo>]:<tag>

Note

Wenn Sie Docker Hub verwenden, überprüfen Sie, ob Ihre Ratelimits die Berechnung berücksichtigen, die Sie in einem Zeitraum von sechs Stunden starten möchten. Weitere Informationen finden Sie in der Dokumentation zu Docker. Wenn dieser Grenzwert überschritten wird, geben Anfragen 429 Too Many Requests zurück.

Schritt 4: Starten der Berechnung

Sie können Rechenressourcen, die Ihr benutzerdefiniertes Image verwenden, über die Benutzeroberfläche oder die API starten. Die folgenden Anforderungen müssen erfüllt sein:

  • Der Berechnungszugriffsmodus muss Standard sein (in der API data_security_mode auf DATA_SECURITY_MODE_STANDARD festlegen). Wenn die Berechnung auf den dedizierten Zugriffsmodus festgelegt ist, wird eine andere Version von Databricks Container Services verwendet, die ein anderes Basisimage erwartet und mit dem erstellten Basisimage nicht gestartet wird.
  • Die Databricks-Runtime-Version muss 18.3 oder höher sein.

Note

Für den Start mit einem Instanzpool muss der Pool mit preloaded_docker_images erstellt werden, und docker_image des Clusters muss übereinstimmen. Siehe Verwenden von Databricks-Containerdiensten mit einem Instanzpool vor dem Start.

Starten der Berechnung mithilfe der Benutzeroberfläche

  1. Stellen Sie auf der Seite "Compute erstellen" sicher, dass der Access-Modus auf "Standard " festgelegt ist und die Databricks-Laufzeit auf 18.3 oder höher festgelegt ist.

  2. Wählen Sie unter "Erweitert" die Registerkarte "Docker " aus.

  3. Klicken Sie auf Use your own Docker container (Eigenen Docker-Container verwenden).

  4. Geben Sie im Feld "Docker Image-URL " Ihr benutzerdefiniertes Image ein.

    Registratur Tagformat
    Docker Hub <organization>/<repository>:<tag> (zum Beispiel: databricksruntime/environment:v5-standard)
    Azure Container Registry (Registrierungsdienst für Container von Azure) <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. Wählen Sie den Authentifizierungstyp aus. Siehe Docker-Imageauthentifizierung.

Note

Wenn beim Erstellen von Compute die Docker-Einstellungen nicht angezeigt werden, sind Databricks Container Services für Ihren Arbeitsbereich möglicherweise nicht aktiviert. Ein Arbeitsbereichsadministrator muss ihn aktivieren, bevor ein Benutzer ein Docker-Image angeben kann. Siehe Schritt 1: Aktivieren von Databricks-Containerdiensten für die Standardberechnung.

Starten der Berechnung mithilfe der API

Im Folgenden sehen Sie einen Beispiel-API-Aufruf, der eine Standardberechnung mit Ihrem benutzerdefinierten Bild erstellt. Stellen Sie sicher, dass data_security_mode auf DATA_SECURITY_MODE_STANDARD und spark_version auf 18.3.x-scala2.13 oder höher festgelegt ist.

databricks clusters create \
--cluster-name <cluster-name> \
--node-type-id Standard_DS3_v2 \
--json '{
  "num_workers": 1,
  "docker_image": {
    "url": "<docker-registry-image-url>",
    "basic_auth": {
      "username": "<docker-registry-username>",
      "password": "<docker-registry-password>"
    }
  },
  "spark_version": "18.3.x-scala2.13",
  "data_security_mode": "DATA_SECURITY_MODE_STANDARD"
}'

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 .
  • 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 Sie Databricks-Containerdienste mit einem Instanzpool

Um Databricks-Containerdienste mit einem Instanzpool zu verwenden, müssen Sie den Pool mit der Instanzpool-API und nicht der Benutzeroberfläche erstellen.

Der Pool muss mit vorinstallierten Docker-Images erstellt werden. Dadurch werden inaktive Instanzen mit Ihrem benutzerdefinierten Abbild vorgewärmt, damit Workloads schneller starten. Legen Sie das preloaded_docker_images Feld für die Anforderung mit denselben Bildverweisen und der Authentifizierung fest, die Sie beim direkten Starten der Berechnung verwenden. Das Feld ist eine Liste, sodass ein einzelner Pool mehrere Bilder vorab laden kann.

Der Pool und seine angefügten Computeressourcen müssen sich darüber einigen, ob Docker verwendet wird. Wenn für einen Pool preloaded_docker_images nicht festgelegt ist, können Sie dafür kein Databricks Container Services-Compute starten. Erstellen Sie einen neuen Pool mit festgelegtem preloaded_docker_images.

Für Pools, die mit preloaded_docker_images erstellt wurden, muss jede Rechenressource, die für den Pool erstellt wird, in ihrer Erstellungsanforderung ein entsprechendes docker_image angeben. Andernfalls schlägt das Erstellen von Compute-Ressourcen mit 'docker_image' must be provided for cluster created with instance pool: <pool-id> fehl.

Migrieren von den ursprünglichen Databricks-Containerdiensten

Databricks Container Services für Standard-Compute ist ein anderer Dienst als die ursprünglichen Databricks Container Services für dedizierten Compute. Dieses Feature weist die folgenden Unterschiede auf:

  • Workloads werden über das Spark Connect-Protokoll ausgeführt.
  • Init-Skripts ändern die Python Umgebung Ihrer Workload nicht. Sie müssen alle Python Abhängigkeiten im Docker-Image installieren. Sie können init-Skripts weiterhin für Anwendungen verwenden, die Daten von Spark nutzen, z. B. Datadog oder Kafka-Agents.

Um von den ursprünglichen Databricks Container Services für dedizierten Compute zu migrieren, erstellen Sie Ihr benutzerdefiniertes Image auf den Databricks Container Services für Standard-Compute neu und aktualisieren Sie Ihre Compute-Konfiguration:

  1. Ersetzen Sie die FROM Zeile in Ihrer Dockerfile durch FROM databricksruntime/environment:v5-standard (oder v5-standard-arm für AWS Graviton).
  2. Portieren Sie Ihre Dockerfile-Anweisungen zum neuen Basisimage. Standardanweisungen für Dockerfiles werden unterstützt, mit den in Schritt 2: Erstellen Ihres benutzerdefinierten Images aufgeführten Ausnahmen.
  3. Installieren Sie Python-Pakete in /databricks/python3 anstelle eines anderen virtuellen Environments. Workloads (Notizbücher, Python Radaufträge, Python Skriptaufträge) lesen aus diesem Pfad.
  4. Aktualisieren Sie Ihre Compute-Konfiguration so, dass sie den Zugriffsmodus Standard und Databricks Runtime 18.3 oder höher verwendet.
  5. Verlagern Sie jede Einrichtung der Python-Umgebung, die zuvor von einem Init-Skript vorgenommen wurde, in das Dockerfile.

Einschränkungen

Zusätzlich zu den standardmäßigen Computebeschränkungen weist Databricks Container Services für die Standardberechnung die folgenden Einschränkungen auf:

  • Bibliotheken für Compute-Ressourcen werden nicht unterstützt.
  • Private Paketrepositorys werden nicht unterstützt.
  • Databricks Runtime für Machine Learning wird nicht unterstützt.
  • Um die Standardberechnung mit Databricks-Containerdiensten für einen Instanzpool zu starten, muss der Pool mit preloaded_docker_images set erstellt werden. Siehe Verwenden von Databricks-Containerdiensten mit einem Instanzpool.

Troubleshooting

Wenn die Docker-Registerkarte beim Erstellen von Compute nicht unter Erweitert angezeigt wird, ist Databricks Container Services für Ihren Arbeitsbereich nicht aktiviert. Ein Arbeitsbereichsadministrator muss ihn im Arbeitsbereich aktivieren, bevor ein Benutzer ein Docker-Image angeben kann. Siehe Schritt 1: Aktivieren von Databricks-Containerdiensten für die Standardberechnung.