Personalización de contenedores con Databricks Container Services

Databricks Container Services permite especificar una imagen de Docker al crear un clúster. Algunos casos de uso de ejemplo incluyen:

  • Personalización de la biblioteca: tiene control total sobre las bibliotecas del sistema que desea instalar.
  • Entorno de contenedor golden: la imagen de Docker es un entorno bloqueado que nunca cambiará.
  • Integración de CI/CD de Docker: puede integrar Azure Databricks con las canalizaciones de CI/CD de Docker.

También puede usar imágenes de Docker para crear entornos de aprendizaje profundo personalizados en clústeres con dispositivos GPU. Para más información sobre el uso de clústeres de GPU con Databricks Container Services, consulte Databricks Container Services en clústeres de GPU.

Para que las tareas se ejecuten cada vez que se inicie el contenedor, use un script init.

Requisitos

Nota

Databricks Runtime para Machine Learning y Databricks Runtime para Genomics no admiten Databricks Container Services.

  • Databricks Runtime 6.1 o posterior. Si ha usado anteriormente Databricks Container Services, debe actualizar las imágenes base. Vea las imágenes más recientes de https://github.com/databricks/containers etiquetadas con 6.x .
  • El Azure Databricks de trabajo debe tener Habilitado Databricks Container Services.
  • La máquina debe ejecutar un demonio de Docker reciente (uno que se prueba y funciona con la versión 18.03.0-ce del cliente o servidor) y el comando debe estar disponible en dockerPATH .

Paso 1: Creación de la base

Databricks recomienda compilar la base de Docker a partir de una base que Databricks ha creado y probado. También es posible compilar la base de Docker desde cero. En esta sección se describen las dos opciones.

Opción 1. Uso de una base creada por Databricks

En este ejemplo se usa la etiqueta para una imagen que se dirigirá a un clúster con la versión en tiempo de 9.x ejecución Databricks Runtime 9.0 y versiones posteriores:

FROM databricksruntime/standard:9.x
...

Para especificar bibliotecas de Python adicionales, como la versión más reciente de pandas y urllib, use la versión específica del contenedor de pip . Para el datatabricksruntime/standard:9.x contenedor, incluya lo siguiente:

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

Para el datatabricksruntime/standard:8.x contenedor o una versión inferior, incluya lo siguiente:

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

Las imágenes base de ejemplo se hospedan en Docker Hub en https://hub.docker.com/u/databricksruntime . Los dockerfiles usados para generar estas bases se encuentran en https://github.com/databricks/containers .

Nota

Las imágenes base y no se deben confundir con los entornos y no relacionados incluidos en la versión no disponible Databricks Runtime databricksruntime/standarddatabricksruntime/minimal con databricks-standarddatabricks-minimal Conda (Beta).

Opción 2. Creación de su propia base de Docker

También puede compilar la base de Docker desde cero. La imagen de Docker debe cumplir estos requisitos:

Para crear su propia imagen desde cero, debe crear el entorno virtual. También debe incluir paquetes integrados en clústeres de Databricks, como Python, R yImosia. Para empezar, puede usar la imagen base adecuada (es decir, para R o para Python) o hacer referencia al ejemplo databricksruntime/rbasedatabricksruntime/pythondatabricksruntime/rbase. Otra alternativa es comenzar con la imagen mínima creada por Databricks en databricksruntime/minimal .

Nota

Databricks recomienda usar Ubuntu Linux; sin embargo, es posible usar Alpine Linux. Para usar Alpine Linux, debe incluir estos archivos:

Además, debe configurar Python, como se muestra en este dockerfile de ejemplo.

Advertencia

Pruebe la imagen de contenedor personalizada exhaustivamente en un clúster Azure Databricks personalizado. El contenedor puede funcionar en una máquina local o de compilación, pero cuando el contenedor se inicia en un clúster de Azure Databricks, el inicio del clúster puede producir un error, es posible que se deshabiliten ciertas características o que el contenedor deje de funcionar, incluso en modo silencioso. En el peor de los casos, podría dañar los datos o exponerlos accidentalmente a entidades externas.

Paso 2: Inserción de la imagen base

Insertar la imagen base personalizada en un registro de Docker. Este proceso es compatible con los registros siguientes:

También se espera que otros registros de Docker que no admitan ninguna autenticación o autenticación básica funcionen.

Paso 3: Ejecución del clúster

Puede iniciar el clúster mediante la interfaz de usuario o la API.

Inicio del clúster mediante la interfaz de usuario

  1. Especifique una Databricks Runtime que admita Databricks Container Services.

    Select Databricks runtime

  2. Seleccione Use your own Docker container (Usar su propio contenedor de Docker).

  3. En el campo Docker Image URL (Dirección URL de la imagen de Docker), escriba la imagen personalizada de Docker.

    Ejemplos de url de imagen de Docker:

    Registro Formato de etiqueta
    Docker Hub <organization>/<repository>:<tag> (por ejemplo: databricksruntime/standard:latest )
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  4. Seleccione el tipo de autenticación.

Inicio del clúster mediante la API

  1. Genere un token de API.

  2. Use Clusters API 2.0 para iniciar un clúster con la base de Docker personalizada.

    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 Los requisitos dependen del tipo de imagen de Docker:

    • En el caso de las imágenes públicas de Docker, no incluya el campo .
    • Para las imágenes privadas de Docker, debe incluir el campo , con un identificador de entidad de servicio y una contraseña basic_auth como nombre de usuario y contraseña.
    • Por Azure Container Registry, debe establecer el campo en el identificador y la contraseña basic_auth de una entidad de servicio. Consulte Azure Container Registry de autenticación de entidad de servicio para obtener información sobre cómo crear la entidad de servicio.

Uso de un script init

Los clústeres de Databricks Container Services permiten a los clientes incluir scripts de init en el contenedor de Docker. En la mayoría de los casos, debe evitar los scripts de init y, en su lugar, realizar personalizaciones a través de Docker directamente (mediante dockerfile). Sin embargo, ciertas tareas se deben ejecutar cuando se inicia el contenedor, en lugar de cuando se ha creado el contenedor. Use un script init para estas tareas.

Por ejemplo, supongamos que desea ejecutar un demonio de seguridad dentro de un contenedor personalizado. Instale y compile el demonio en la imagen de Docker a través de la canalización de creación de imágenes. A continuación, agregue un script init que inicie el demonio. En este ejemplo, el script init incluiría una línea como systemctl start my-daemon .

En la API, puede especificar scripts de init como parte de la especificación del clúster como se muestra a continuación. Para obtener más información, vea InitScriptInfo.

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

En el caso de las imágenes de Databricks Container Services, también puede almacenar scripts de init en DBFS o almacenamiento en la nube.

Los pasos siguientes se llevan a cabo al iniciar un clúster de Databricks Container Services:

  1. Las máquinas virtuales se adquieren del proveedor de nube.
  2. La imagen personalizada de Docker se descarga desde el repositorio.
  3. Azure Databricks crea un contenedor de Docker a partir de la imagen.
  4. Databricks Runtime código se copia en el contenedor de Docker.
  5. Se ejecutan los scrips de init. Vea Init script execution order (Orden de ejecución del script de init).

Azure Databricks omite docker y CMDENTRYPOINT primitivos.