Anpassa behållare med Databricks Container Services

Med Databricks Container Services kan du ange en Docker-avbildning när du skapar ett kluster. Exempel på användnings områden är:

  • Biblioteks anpassning – du har fullständig kontroll över de system bibliotek som du vill installera.
  • Miljö med gyllene behållare – din Docker-avbildning är en låst miljö som aldrig kommer att ändras.
  • Docker CI/CD-integrering – du kan integrera Azure Databricks med dina Docker CI/CD-pipelines.

Du kan också använda Docker-avbildningar för att skapa anpassade miljöer för djup inlärning i kluster med GPU-enheter. Mer information om hur du använder GPU-kluster med Databricks Container Services finns i Databricks Container Services på GPU-kluster.

Om du vill att aktiviteter ska utföras varje gången behållaren startas använder du ett init-skript.

Krav

Anteckning

Databricks Runtime för Machine Learning och Databricks Runtime för genomik stöder inte Databricks Container Services.

  • Databricks Runtime 6,1 eller senare. Om du tidigare har använt Databricks Container Services måste du uppgradera dina bas avbildningar. Se de senaste bilderna i https://github.com/databricks/containers taggade med 6.x .
  • Databricks Container Services måste vara aktiveratpå arbets ytan för Azure Databricks.
  • Datorn måste köra en nyligen Docker-daemon (en som testas och fungerar med klient-18.03.0-CE) och docker kommandot måste vara tillgängligt på PATH .

Steg 1: Skapa din bas

Det finns flera minimi krav för att Azure Databricks ska kunna starta ett kluster. Därför rekommenderar vi att du skapar Docker-basen från en bas som Azure Databricks har skapat och testat:

FROM databricksruntime/standard:latest
...

Om du vill ange ytterligare python-bibliotek, till exempel den senaste versionen av Pandas och urllib, använder du den maskinvaruspecifika versionen av pip . För datatabricksruntime/standard:latest behållaren inkluderar du följande:

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

Exempel bas avbildningar finns i Docker Hub på https://hub.docker.com/u/databricksruntime . Dockerfiles som används för att generera dessa baser finns på https://github.com/databricks/containers .

Anteckning

Bas avbildningarna databricksruntime/standard och ska databricksruntime/minimal inte förväxlas med orelaterade databricks-standard och miljöer som databricks-minimal ingår i inte längre tillgänglig Databricks runtime med Conda (beta).

Du kan också bygga din Docker-bas från grunden. Docker-avbildningen måste uppfylla följande krav:

Eller så kan du använda den minimala avbildningen som skapats av Databricks på databricksruntime/minimal .

De minimala kraven som anges ovan omfattar inte heller python, R, ganglia och många andra funktioner som vanligt vis förväntas i Azure Databricks kluster. För att få dessa funktioner kan du skapa en lämplig bas avbildning (dvs. databricksruntime/rbase för R) eller referera till Dockerfiles i GitHub för att fastställa hur du skapar stöd för de specifika funktioner som du vill ha.

Varning

Nu har du kontroll över klustrets miljö. Stor makt medför också ett stort ansvar. Med stor flexibilitet blir det lätt att komma igång. Det här dokumentet innehåller flera rekommendationer baserat på våra upplevelser. Slutligen börjar du med att gå utanför det kända området, och saker kan brytas! Precis som med alla Docker-arbetsflöden kanske saker inte fungerar första gången, eller det andra, men när de börjar fungera fungerar de alltid.

Steg 2: Push-överföra basavbildningen

Skicka den anpassade bas avbildningen till ett Docker-register. Den här processen har testats med Docker Hub och Azure Container Registry (ACR). Docker-register som stöder ingen autentisering eller grundläggande autentisering förväntas fungera.

Steg 3: Starta klustret

Du kan starta klustret med hjälp av användar gränssnittet eller API: et.

Starta klustret med hjälp av användar gränssnittet

  1. Ange en Databricks Runtime-version som stöder Databricks Container Services.

    Välj Databricks-körning

  2. Välj Använd din egen Docker-behållare.

  3. I fältet Docker-avbildnings-URL anger du din anpassade Docker-avbildning.

    Exempel på Docker-avbildnings-URL:

    • DockerHub: <organization>/<repository>:<tag> , till exempel: databricksruntime/standard:latest
    • Azure Container Registry: <your-registry-name>.azurecr.io/<repository-name>:<tag>
  4. Välj autentiseringstyp.

Starta klustret med hjälp av API: et

  1. Skapa en API-token.

  2. Använd kluster-API: et för att starta ett kluster med din anpassade Docker-bas.

    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 kraven beror på din Docker-avbildnings typ:

    • Ta inte med fältet för offentliga Docker-avbildningar basic_auth .
    • För privata Docker-avbildningar måste du inkludera basic_auth fältet med ett huvud namn för tjänsten och ett lösen ord som användar namn och lösen ord.
    • För Azure-ACR måste du inkludera basic_auth fältet med ett huvud namn för tjänsten och ett lösen ord som användar namn och lösen ord. Information om hur du skapar tjänstens huvud namn finns i dokumentationen för Azure ACR Service Principal Authentication .

Använd ett init -skript

Med Databricks Container Services-kluster kan kunder inkludera init-skript i Docker-behållaren. I de flesta fall bör du undvika init-skript och i stället göra anpassningar via Docker direkt (med hjälp av Dockerfile). Vissa uppgifter måste dock utföras när behållaren startar, i stället för när behållaren har skapats. Använd ett init-skript för dessa uppgifter.

Anta till exempel att du vill köra en säkerhets-daemon i en anpassad behållare. Installera och skapa daemonen i Docker-avbildningen via en pipeline för avbildnings utveckling. Lägg sedan till ett init-skript som startar daemonen. I det här exemplet innehåller init-skriptet en rad som systemctl start my-daemon .

I API: et kan du ange init-skript som en del av kluster specifikationen enligt följande. Mer information finns i InitScriptInfo.

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

För Databricks Container Services-avbildningar kan du även lagra init-skript i DBFS eller i moln lagring.

Följande steg sker när du startar ett Databricks Container Services-kluster:

  1. Virtuella datorer förvärvas från moln leverantören.
  2. Den anpassade Docker-avbildningen laddas ned från din lagrings platsen.
  3. Azure Databricks skapar en Docker-behållare från avbildningen.
  4. Databricks Runtime koden kopieras till Docker-behållaren.
  5. Init-scrips körs. Se körnings ordning för init-skript.

Azure Databricks ignorerar Docker CMD och ENTRYPOINT primitiver.