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 uwPATH
computer.
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:
- JDK 8u191 als Java op het systeem
PATH
- bash
- iproute2 (ubuntu iproute)
- coreutils (ubuntu coreutils)
- procps (ubuntu procps)
- sudo (ubuntu sudo)
- Ubuntu Linux
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:
- Docker Hub zonder verificatie of basisverificatie.
- Azure Container Registry met basisverificatie.
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
Geef op de pagina Compute maken een Databricks Runtime-versie op die ondersteuning biedt voor Databricks Container Services.
Selecteer onder Geavanceerde opties het tabblad Docker.
Selecteer Uw eigen Docker-container gebruiken.
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>
Selecteer het verificatietype. 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
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.
- Neem het
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:
- VM's worden verkregen van de cloudprovider.
- De aangepaste Docker-installatiekopieën worden gedownload uit uw opslagplaats.
- Azure Databricks maakt een Docker-container op basis van de installatiekopieën.
- Databricks Runtime-code wordt gekopieerd naar de Docker-container.
- 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 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"}'