Containers aanpassen met Databricks Container Services

Databricks Container Services kunt u een Docker-installatiekopieën opgeven wanneer u een cluster maakt. Enkele voorbeelden van use cases zijn:

  • Bibliotheekaanpassing: u hebt volledige controle over de systeembibliotheken die u wilt installeren.
  • Gouden containeromgeving: uw Docker-installatiekopieën zijn een vergrendelde omgeving die nooit verandert.
  • Docker CI/CD-integratie: u kunt Azure Databricks integreren met uw Docker CI/CD-pijplijnen.

U kunt ook Docker-installatiekopieën gebruiken om aangepaste Deep Learning-omgevingen te maken op clusters met GPU-apparaten. Zie Databricks Container Services op GPU-clusters voor meer informatie over het gebruik van GPU-clusters met Databricks Container Services.

Gebruik een init-script om taken uit te voeren telkens wanneer de container wordt gestart.

Vereisten

Notitie

Databricks Runtime voor Machine Learning en Databricks Runtime voor Genomics biedt geen ondersteuning voor Databricks Container Services.

  • Databricks Runtime 6.1 of hoger. Als u eerder Databricks Container Services hebt gebruikt, moet u uw basisinstallatiekopieën upgraden. Bekijk de nieuwste afbeeldingen in https://github.com/databricks/containers getagd met 6.x.
  • Voor uw Azure Databricks-werkruimte moet Databricks Container Services zijn ingeschakeld.
  • Op uw computer moet een recente Docker-daemon worden uitgevoerd (een die is getest en werkt met Client/Server versie 18.03.0-ce) en de docker opdracht moet beschikbaar zijn op uw PATHcomputer.

Stap 1: uw basis compileren

Databricks raadt u aan om uw Docker-basis te bouwen vanaf een basis die Databricks heeft gebouwd en getest. Het is ook mogelijk om uw Docker-basis helemaal opnieuw te bouwen. In deze sectie worden de twee opties beschreven.

Optie 1. Een basis gebruiken die is gebouwd door Databricks

In dit voorbeeld wordt de 9.x tag gebruikt voor een installatiekopieën die gericht zijn op een cluster met runtimeversie Databricks Runtime 9.0 en hoger:

FROM databricksruntime/standard:9.x
...

Als u aanvullende Python bibliotheken wilt opgeven, zoals de nieuwste versie van pandas en urllib, gebruikt u de containerspecifieke versie van pip. Neem voor de datatabricksruntime/standard:9.x container het volgende op:

RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3

Neem het volgende op voor de datatabricksruntime/standard:8.x container of lager:

RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3

Voorbeeld van basisinstallatiekopieën worden gehost op Docker Hub op https://hub.docker.com/u/databricksruntime. De Dockerfiles die worden gebruikt om deze bases te genereren, bevinden zich op https://github.com/databricks/containers.

Notitie

De basisinstallatiekopieën databricksruntime/standard en databricksruntime/minimal moeten niet worden verward met de niet-gerelateerde databricks-standard en databricks-minimal omgevingen die zijn opgenomen in de niet langer beschikbare Databricks Runtime met Conda (bèta).

Optie 2. Uw eigen Docker-basis bouwen

U kunt ook een volledig nieuwe Docker-basis bouwen. De Docker-installatiekopieën moeten voldoen aan deze vereisten:

Als u uw eigen installatiekopieën helemaal zelf wilt maken, moet u de virtuele omgeving maken. U moet ook pakketten opnemen die zijn ingebouwd in Databricks clusters, zoals Python, R en Ganglia. Om aan de slag te gaan, kunt u de juiste basisinstallatiekopieën (dat wil gezegd, databricksruntime/rbase voor R of databricksruntime/python voor Python) gebruiken of verwijzen naar de voorbeeld-Dockerfiles in GitHub. Een ander alternatief is om te beginnen met de minimale installatiekopie die is gebouwd door Databricks bij databricksruntime/minimal.

Notitie

Databricks raadt het gebruik van Ubuntu Linux aan. Het is echter mogelijk om Alpine Linux te gebruiken. Als u Alpine Linux wilt gebruiken, moet u deze bestanden opnemen:

Bovendien moet u Python instellen, zoals wordt weergegeven in dit voorbeeld Dockerfile.

Waarschuwing

Test uw aangepaste containerinstallatiekopieën grondig op een Azure Databricks-cluster. Uw container werkt mogelijk op een lokale of buildcomputer, maar wanneer uw container wordt gestart op een Azure Databricks-cluster, kan het starten van het cluster mislukken, zijn bepaalde functies mogelijk uitgeschakeld of werkt uw container mogelijk niet meer, zelfs op de achtergrond. In het slechtste geval kunnen uw gegevens beschadigd raken of per ongeluk uw gegevens blootstellen aan externe partijen.

Stap 2: uw basisinstallatiekopie pushen

Push uw aangepaste basisinstallatiekopieën naar een Docker-register. Dit proces wordt ondersteund met de volgende registers:

Andere Docker-registers die geen verificatie of basisverificatie ondersteunen, werken naar verwachting ook.

Notitie

Als u Docker Hub gebruikt voor uw Docker-register, moet u controleren of de frequentielimieten geschikt zijn voor het aantal clusters dat u verwacht te starten in een periode van zes uur. Deze frequentielimieten verschillen voor anonieme gebruikers, geverifieerde gebruikers zonder een betaald abonnement en betaalde abonnementen. Raadpleeg de Docker-documentatie voor meer informatie. Als deze limiet is overschreden, krijgt u het antwoord '429 Te veel aanvragen'.

Stap 3: uw cluster starten

U kunt uw cluster starten met behulp van de gebruikersinterface of de API.

Uw cluster starten met behulp van de gebruikersinterface

  1. Geef een Databricks Runtime-versie op die ondersteuning biedt voor Databricks Container Services.

    Select Databricks runtime

  2. Selecteer Uw eigen Docker-container gebruiken.

  3. Voer in het veld URL van de Docker-installatiekopieën uw aangepaste Docker-installatiekopieën in.

    Voorbeelden van URL voor Docker-installatiekopieën:

    Register Labelindeling
    Docker Hub <organization>/<repository>:<tag> (bijvoorbeeld: databricksruntime/standard:latest)
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  4. Selecteer het verificatietype.

Uw cluster starten met behulp van de API

  1. Genereer een API-token.

  2. Gebruik de Clusters API 2.0 om een cluster te starten met uw aangepaste Docker-basis.

    curl -X POST -H "Authorization: Bearer <token>" https://<databricks-instance>/api/2.0/clusters/create -d '{
      "cluster_name": "<cluster-name>",
      "num_workers": 0,
      "node_type_id": "Standard_DS3_v2",
      "docker_image": {
        "url": "databricksruntime/standard:latest",
        "basic_auth": {
          "username": "<docker-registry-username>",
          "password": "<docker-registry-password>"
        }
      },
      "spark_version": "7.3.x-scala2.12",
    }'
    

    basic_auth vereisten zijn afhankelijk van het type Docker-installatiekopie:

    • Neem voor openbare Docker-installatiekopieën het basic_auth veld niet op.
    • Voor privé-Docker-installatiekopieën moet u het basic_auth veld opnemen met behulp van een service-principal-id en -wachtwoord als gebruikersnaam en wachtwoord.
    • Voor Azure Container Registry moet u het basic_auth veld instellen op de id en het wachtwoord voor een service-principal. Zie Azure Container Registry documentatie voor verificatie van service-principals voor informatie over het maken van de service-principal.

Een init-script gebruiken

Databricks Container Services-clusters kunnen klanten init-scripts opnemen in de Docker-container. In de meeste gevallen moet u init-scripts vermijden en in plaats daarvan rechtstreeks aanpassingen maken via Docker (met behulp van de Dockerfile). Bepaalde taken moeten echter worden uitgevoerd wanneer de container wordt gestart, in plaats van wanneer de container wordt gebouwd. Gebruik een init-script voor deze taken.

Stel dat u een beveiligingsdemon wilt uitvoeren in een aangepaste container. Installeer en bouw de daemon in de Docker-installatiekopieën via de pijplijn voor het bouwen van installatiekopieën. Voeg vervolgens een init-script toe waarmee de daemon wordt gestart. In dit voorbeeld bevat het init-script een regel zoals systemctl start my-daemon.

In de API kunt u init-scripts als onderdeel van de clusterspecificatie als volgt opgeven. Zie InitScriptInfo voor meer informatie.

"init_scripts": [
    {
        "file": {
            "destination": "file:/my/local/file.sh"
        }
    }
]

Voor Databricks Container Services-installatiekopieën kunt u ook init-scripts opslaan in DBFS of cloudopslag.

De volgende stappen worden uitgevoerd wanneer u een Databricks Container Services-cluster start:

  1. VM's worden verkregen van de cloudprovider.
  2. De aangepaste Docker-installatiekopieën worden gedownload uit uw opslagplaats.
  3. Azure Databricks maakt een Docker-container op basis van de installatiekopieën.
  4. Databricks Runtime-code wordt gekopieerd naar de Docker-container.
  5. De init-scrips worden uitgevoerd. Zie de uitvoeringsvolgorde van het Init-script.

Azure Databricks negeert de Docker CMD en ENTRYPOINT primitieven.