Delen via


Containers aanpassen met Databricks Container Service

Met Databricks Container Services kunt u een Docker-installatiekopieën opgeven wanneer u rekenkracht maakt. Enkele voorbeelden van gebruiksvoorbeelden 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 docker-installatiekopieën ook gebruiken om aangepaste Deep Learning-omgevingen te maken op rekenkracht met GPU-apparaten. Zie Databricks Container Services op GPU-rekenkracht voor meer informatie over het gebruik van GPU-rekenkracht met Databricks Container Services.

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

Vereisten

  • 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.

Beperkingen

  • Databricks Container Services wordt niet ondersteund voor berekeningen met behulp van de modus voor gedeelde toegang.
  • Databricks Runtime voor Machine Learning biedt geen ondersteuning voor Databricks Container Services.
  • Als u toegang wilt krijgen tot volumes in Databricks Container Services, voegt u de volgende configuratie toe aan het spark-configuratieveld van het rekenproces: spark.databricks.unityCatalog.volumes.enabled true.

Stap 1: Uw basis bouwen

Databricks raadt u aan om uw Docker-basis te bouwen op basis van 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 berekening met runtimeversie Databricks Runtime 9.1 LTS en hoger:

FROM databricksruntime/standard:9.x
...

Als u extra Python-bibliotheken wilt opgeven, zoals de nieuwste versie van Pandas en URLlib, gebruikt u de containerspecifieke versie van pip. Neem voor de databricksruntime/standard:9.x container het volgende op:

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

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

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

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

Docker Hub gehoste installatiekopieën met tags met het achtervoegsel '-LTS' worden gepatcht. Alle andere installatiekopieën zijn voorbeelden en worden niet regelmatig gepatcht.

Notitie

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

Optie 2. Uw eigen Docker-basis bouwen

U kunt ook uw Docker-basis helemaal zelf 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 Compute, zoals Python en R. U kunt de juiste basisinstallatiekopieën gebruiken om aan de slag te gaan:

  • Voor R: databricksruntime/rbase
  • Voor Python: databricksruntime/python
  • Voor de minimale installatiekopie die is gebouwd door Databricks: databricksruntime/minimal

U kunt ook verwijzen naar de voorbeeld-Dockerfiles in GitHub.

Notitie

Databricks raadt aan Ubuntu Linux te gebruiken; 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-berekening. Uw container werkt mogelijk op een lokale of buildcomputer, maar wanneer uw container wordt gestart in Azure Databricks, kan het starten van de rekenkracht mislukken, kunnen bepaalde functies worden 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 beschikbaar maken voor externe partijen.

Stap 2: Uw basisinstallatiekopieën 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, zullen naar verwachting ook werken.

Notitie

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

Stap 3: Uw rekenproces starten

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

Uw rekenproces starten met behulp van de gebruikersinterface

  1. Geef op de pagina Compute maken een Databricks Runtime-versie op die ondersteuning biedt voor Databricks Container Services.

  2. Selecteer onder Geavanceerde opties het tabblad Docker.

  3. Selecteer Uw eigen Docker-container gebruiken.

  4. Voer in het veld URL van 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>
  5. Het verificatietype selecteren. U kunt geheimen gebruiken om waarden voor gebruikersnaam en wachtwoordverificatie op te slaan. Zie Geheimen gebruiken voor verificatie.

Uw rekenproces starten met behulp van de API

  1. Genereer een API-token.

  2. Gebruik de Databricks CLI om een rekenproces te starten met uw aangepaste Docker-basis.

    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"
    }'
    

    basic_auth vereisten zijn afhankelijk van het type Docker-installatiekopie:

    • Neem het basic_auth veld niet op voor openbare Docker-installatiekopieën.
    • Voor persoonlijke 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. Raadpleeg de verificatiedocumentatie voor azure Container Registry-service-principals voor informatie over het maken van de service-principal.
    • U kunt ook een geheim gebruiken om verificatiegegevens op te slaan. Zie Geheimen gebruiken voor verificatie.

Een init-script gebruiken

Met Databricks Container Services 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 het 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 beveiligingsdaemon in een aangepaste container wilt uitvoeren. 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 volgt opgeven als onderdeel van de rekenspecificatie. Zie de Clusters-API 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 cloudopslag.

De volgende stappen worden uitgevoerd wanneer u een berekening start die gebruikmaakt van Databricks Container Services:

  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-scripts worden uitgevoerd. Zie Wat zijn init-scripts?

Azure Databricks negeert de Docker CMD en ENTRYPOINT primitieven.

Geheimen gebruiken voor verificatie

Databricks Container Service biedt ondersteuning voor het gebruik van geheimen voor verificatie. Wanneer u uw rekenresource maakt, voert u in plaats van uw gebruikersnaam of wachtwoord zonder opmaak uw geheim in te voeren met behulp van de {{secrets/<scope-name>/<dcs-secret>}} indeling. Zie Geheimen beheren voor meer informatie over het maken van geheimen.

Container Services inschakelen

Als u aangepaste containers op uw rekenproces wilt gebruiken, moet een werkruimtebeheerder Databricks Container Services inschakelen.

Werkruimtebeheerders kunnen Databricks Container Service inschakelen met behulp van de Databricks CLI. Geef enableDcs in de hoofdtekst van een JSON-aanvraag op aan true, zoals in het volgende voorbeeld:

databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'