Databricks Container Services per l'elaborazione standard

Importante

Databricks Container Services per il calcolo standard è in versione beta. Un amministratore dell'area di lavoro deve abilitare questa funzionalità dalla pagina Anteprime dell'area di lavoro. Si tratta di un servizio separato da Databricks Container Services per calcolo dedicato, disponibile a livello generale.

Databricks Container Services per il calcolo standard consente di specificare un'immagine Docker quando si crea un ambiente di calcolo standard, consentendo di accedere a contenitori personalizzati in ambienti di calcolo condivisi. L'immagine Docker è l'unica definizione dell'ambiente del carico di lavoro, quindi è possibile riprodurre l'ambiente remoto in locale per ottenere risultati coerenti tra lo sviluppo e la produzione.

Inoltre, per creare l'immagine personalizzata, Azure Databricks fornisce un'immagine di base allineata alle versioni dell'ambiente serverless che è possibile estendere per soddisfare le proprie esigenze.

Requirements

Per usare Databricks Container Services per il calcolo standard:

  • La risorsa di calcolo deve eseguire Databricks Runtime 18.3 o versione successiva e usare la modalità di accesso Standard .
  • È necessario disporre di un demone Docker recente con il comando docker disponibile sul proprio PATH.

Passaggio 1: Abilitare Databricks Container Services per il calcolo standard

Per usare Databricks Container Services per il compute standard, un amministratore del workspace deve abilitare la funzione dalla pagina Previews:

  1. Accedere all'area di lavoro di Azure Databricks come amministratore.
  2. Nel menu utente in alto a destra, fare clic su Anteprime.
  3. Trovare DCS per il calcolo standard e attivarlo.

Passaggio 2: Creare l'immagine personalizzata

Queste istruzioni illustrano come creare un'immagine personalizzata estendendo un'immagine di base fornita da Databricks (scelta consigliata). L'immagine di base contiene le dipendenze necessarie per avviare i carichi di lavoro, ad esempio Ubuntu, Python e JDK. È possibile eseguire il pull di databricksruntime/environment:v5-standard, aggiungere i propri pacchetti sopra ed ereditare gli aggiornamenti continui gestiti da Databricks e le patch di sicurezza.

Per creare un'immagine di base minima da zero, vedere Riferimento: creare un'immagine di base minima da zero.

Passaggio 2a: Eseguire il pull dell'immagine di base

Per eseguire il pull dell'immagine di base, eseguire:

docker pull databricksruntime/environment:v5-standard

Passaggio 2b: Scrivere un Dockerfile che estende l'immagine di base

Installare pacchetti di Python personalizzati nell'ambiente virtuale /databricks/python3 dell'immagine di base. Si tratta dell'ambiente virtuale di sistema che avvia i carichi di lavoro.

FROM databricksruntime/environment:v5-standard

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

L'esempio seguente illustra come installare un pacchetto da un repository privato.

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

È possibile usare qualsiasi istruzione Dockerfile standard (ad esempio, RUN, ENVWORKDIR, , COPY). Le istruzioni seguenti vengono ignorate a causa del modo in cui Azure Databricks avvia il carico di lavoro:

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

Annotazioni

Per i carichi di lavoro in Scala, copiate i file JAR nella directory /scala-jars/user nell'immagine e chmod 0644 in modo che l'utente sandbox possa leggerli. Azure Databricks carica i JAR da questo percorso sul classpath di Spark.

Passaggio 2c: Compilare l'immagine

Per compilare l'immagine, eseguire:

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

Avvertimento

Testare accuratamente l'immagine personalizzata in un ambiente di calcolo Azure Databricks. Un'immagine che funziona in un computer locale o di compilazione potrebbe non essere avviata, disabilitare automaticamente le funzionalità o interrompere il funzionamento quando viene avviata in Azure Databricks.

Riferimento: creare un'immagine di base minima da zero

Se è necessario il controllo completo sul contenuto dell'immagine di base , ad esempio per soddisfare requisiti rigorosi di dimensioni dell'immagine, supply chain o conformità, è possibile creare un equivalente minimo di databricksruntime/environment:v5-standard da zero anziché estenderlo.

Avvertimento

Compilare da zero è un'opzione avanzata. Si assume la responsabilità di tenere traccia delle modifiche upstream all'immagine v5-standard, inclusi i pin Python, le patch di sicurezza, gli strumenti della piattaforma e i file necessari per la piattaforma in /databricks/ e /etc/environment. Databricks consiglia invece di estendere databricksruntime/environment:v5-standard come illustrato in precedenza nel passaggio 2.

Databricks fornisce un Dockerfile di riferimento e requirements.txt che ricreano l'ambiente Python essenziale di v5-standard. Scaricare entrambi i file nella stessa directory prima della compilazione:

Per compilare l'immagine, eseguire:

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

Se l'host di compilazione non riesce a raggiungere https://pypi.org, eseguire l'override dell'indice pip in fase di compilazione eseguendo:

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

Prima di procedere con il passaggio successivo, verificare che i pacchetti Python curati importano in modo pulito eseguendo:

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

Passaggio 3: Carica l'immagine in un registry

Eseguire quindi il push dell'immagine in un registro Docker. Databricks Container Services supporta gli stessi registri in calcolo standard e dedicato:

Dovrebbero funzionare anche altri registri che non supportano l'autenticazione o l'autenticazione di base. L'autenticazione di base usa il nome utente e la password del Registro di sistema.

Per ottenere prestazioni ottimali per il pull delle immagini, usare un registro nella stessa area cloud e area dell'area di lavoro Azure Databricks.

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

Annotazioni

Se si usa Docker Hub, verificare che i limiti di velocità corrispondano al calcolo previsto per l'avvio in un periodo di sei ore. Per informazioni dettagliate, vedere la documentazione di Docker. Se questo limite viene superato, le richieste restituiscono 429 Too Many Requests.

Passaggio 4: Avviare il calcolo

È possibile avviare il calcolo che usa l'immagine personalizzata usando l'interfaccia utente o l'API. Devono essere soddisfatti i seguenti requisiti:

  • La modalità di accesso alle risorse di calcolo deve essere Standard (nell'API impostare su data_security_modeDATA_SECURITY_MODE_STANDARD). Se il calcolo è impostato sulla modalità di accesso dedicato , viene usata una versione diversa di Databricks Container Services, che prevede un'immagine di base diversa e non verrà avviata con l'immagine di base compilata.
  • La versione di Databricks Runtime deve essere 18.3 o successiva.

Annotazioni

Per eseguire l'avvio su un pool di istanze, è necessario creare il pool con preloaded_docker_images set e deve corrispondere a quello del docker_image cluster. Vedere Usare Databricks Container Services con un pool di istanze prima dell'avvio.

Avviare il calcolo usando l'interfaccia utente

  1. Nella pagina Crea calcolo verificare che la modalità di accesso sia impostata su Standard e il runtime di Databricks sia impostato su 18.3 o versione successiva.

  2. In avanzate, selezionare la scheda Docker.

  3. Selezionare Usa il proprio contenitore Docker.

  4. Nel campo URL immagine Docker immettere l'immagine personalizzata.

    Registry Formato del tag
    Docker Hub <organization>/<repository>:<tag> (ad esempio: databricksruntime/environment:v5-standard)
    Registro dei container di Azure <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. Selezionare il tipo di autenticazione. Consultare l'autenticazione delle immagini Docker.

Annotazioni

Se non vengono visualizzate le impostazioni di Docker quando si crea il calcolo, i servizi contenitore di Databricks potrebbero non essere abilitati nell'area di lavoro. Un amministratore dell'area di lavoro deve abilitarlo prima che qualsiasi utente possa specificare un'immagine Docker. Vedere Passaggio 1: Abilitare Databricks Container Services per il calcolo standard.

Avviare il calcolo usando l'API

Di seguito è riportata una chiamata API di esempio che crea un ambiente di calcolo standard con l'immagine personalizzata. Assicurarsi che data_security_mode sia impostato su DATA_SECURITY_MODE_STANDARD e spark_version sia impostato su 18.3.x-scala2.13 o versione successiva.

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

Autenticazione dell'immagine Docker

I requisiti di autenticazione dipendono dal tipo di immagine Docker. È anche possibile usare i segreti per archiviare nomi utente e password di autenticazione. Vedere Usare i segreti per l'autenticazione.

  • Per le immagini Docker pubbliche, non è necessario includere informazioni di autenticazione. Nell'interfaccia utente impostare Authentication su Default. Per la chiamata API, non includere i campi basic_auth.
  • Per le immagini Docker private, eseguire l'autenticazione usando un ID del principale del servizio e una password (o segreti applicabili) che fungano da nome utente e password.
  • Per Registro Azure Container, eseguire l'autenticazione usando un ID entità servizio e una password (o segreti applicabili) per il nome utente e la password. Per informazioni su come creare l'entità servizio, vedere la documentazione sull'autenticazione dell'entità servizio di Registro Azure Container.

Usare i segreti per l'autenticazione

Il servizio Contenitore Databricks supporta l'uso di segreti per l'autenticazione. Quando si crea la risorsa di calcolo nell'interfaccia utente, usare il campo autenticazione per selezionare nome utente e password, quindi invece di immettere il nome utente o la password di testo normale, immettere i segreti usando il formato {{secrets/<scope-name>/<dcs-secret>}}. Se utilizzi l'API, immetti i segreti nei campi basic_auth.

Per informazioni sulla creazione di segreti, vedere Secret management.

Utilizzare Databricks Container Services con un pool di istanze

Per usare Databricks Container Services con un pool di istanze, è necessario creare il pool usando l'API Pool di istanze, non l'interfaccia utente.

Il pool deve essere creato con le immagini Docker precaricate. Le istanze inattive vengono preriscaldate con la tua immagine personalizzata, così che i carichi di lavoro si avviino più rapidamente. Imposta il campo preloaded_docker_images nella richiesta con gli stessi riferimenti alle immagini e la stessa autenticazione che utilizzi quando avvii direttamente le risorse di calcolo. Il campo è un elenco, quindi un singolo pool può precaricare più immagini.

Il pool e le relative risorse di calcolo collegate devono concordare se Docker è in uso. Se per un pool non è impostato preloaded_docker_images, non è possibile avviare il compute di Databricks Container Services usando quel pool. Creare un nuovo pool con preloaded_docker_images impostato.

Per i pool creati tramite preloaded_docker_images, qualsiasi risorsa di calcolo avviata per il pool deve includere un docker_image corrispondente nella propria richiesta di creazione. In caso contrario, la creazione della risorsa di calcolo non riesce e restituisce 'docker_image' must be provided for cluster created with instance pool: <pool-id>.

Eseguire la migrazione da Databricks Container Services originale

Databricks Container Services per il calcolo standard è un servizio diverso da quello originale di Databricks Container Services per il calcolo dedicato. Questa funzionalità presenta le differenze seguenti:

  • I carichi di lavoro sono eseguiti tramite il protocollo Spark Connect .
  • Gli script Init non modificano l'ambiente di Python del carico di lavoro. È necessario installare tutte le dipendenze Python nell'immagine Docker. È possibile continuare a usare script init per applicazioni che usano dati da Spark, ad esempio gli agenti Datadog o Kafka.

Per eseguire la migrazione dalla versione originale di Databricks Container Services per il compute dedicato, ricrea l'immagine personalizzata su Databricks Container Services per il compute standard e aggiorna la configurazione del compute:

  1. Sostituire la FROM riga nel Dockerfile con FROM databricksruntime/environment:v5-standard (o v5-standard-arm per AWS Graviton).
  2. Converti le istruzioni del Dockerfile nella nuova immagine di base. Sono supportate le istruzioni standard di Dockerfile, con le eccezioni elencate nel passaggio 2: Compilare l'immagine personalizzata.
  3. Installare pacchetti Python in /databricks/python3 anziché in qualsiasi altro virtualenv. I carichi di lavoro (notebook, processi con rotellina Python, processi script Python) letti da questo percorso.
  4. Aggiornare la configurazione di calcolo per usare la modalità di accesso Standard e Databricks Runtime 18.3 o versione successiva.
  5. Sposta nel Dockerfile qualsiasi configurazione dell'ambiente Python precedentemente eseguita da uno script di inizializzazione.

Limitations

Oltre alle limitazioni di calcolo standard, Databricks Container Services per le risorse di calcolo standard presenta le limitazioni seguenti:

  • Le librerie limitate all'ambito di calcolo non sono supportate.
  • I repository di pacchetti privati non sono supportati.
  • Databricks Runtime per Machine Learning non è supportato.
  • Per avviare il calcolo standard con Databricks Container Services in un pool di istanze, è necessario creare il pool con preloaded_docker_images set. Vedi Usare Databricks Container Services con un pool di istanze.

Risoluzione dei problemi

Se la scheda Docker non viene visualizzata sotto Avanzate durante la creazione di una risorsa di calcolo, Databricks Container Services non è abilitato per l'area di lavoro. Un amministratore dell'area di lavoro deve abilitarlo nell'area di lavoro prima che qualsiasi utente possa specificare un'immagine Docker. Vedere Passaggio 1: Abilitare Databricks Container Services per il calcolo standard.