Serviços de Contêiner do Databricks para computação padrão

Importante

Os Serviços de Contêiner do Databricks para computação padrão estão em Beta. Um administrador do workspace deve habilitar esse recurso na página Visualizações do workspace. Esse é um serviço separado dos Serviços de Contêiner do Databricks para computação dedicada, que geralmente está disponível.

Os Serviços de Contêiner do Databricks para computação padrão permitem que você especifique uma imagem do Docker ao criar computação padrão, proporcionando acesso a contêineres personalizados em ambientes de computação compartilhados. Sua imagem do Docker é a única definição do ambiente de carga de trabalho, portanto, você pode reproduzir o ambiente remoto localmente para resultados consistentes em desenvolvimento e produção.

Além disso, para ajudar a criar sua imagem personalizada, Azure Databricks fornece uma imagem base alinhada com versões de ambiente serverless que você pode estender para atender às suas necessidades.

Requirements

Para usar os Serviços de Contêiner do Databricks para computação padrão:

  • O recurso de computação deve estar executando o Databricks Runtime 18.3 ou superior e usar o modo de acesso Standard .
  • Você deve ter um daemon recente do Docker com o docker comando disponível em seu PATH.

Etapa 1: Habilitar os Serviços de Contêiner do Databricks para computação padrão

Para usar os Serviços de Contêiner do Databricks para computação padrão, um administrador de workspace deve habilitar o recurso na página Visualizações :

  1. Entre no workspace do Azure Databricks como administrador.
  2. No menu do usuário no canto superior direito, clique em Visualizações.
  3. Localize o DCS para computação padrão e ative-o.

Etapa 2: Criar sua imagem personalizada

Estas instruções mostram como criar uma imagem personalizada estendendo uma imagem base fornecida pelo Databricks (recomendado). A imagem base contém as dependências necessárias para iniciar suas cargas de trabalho, como Ubuntu, Python e JDK. Você pode extrair databricksruntime/environment:v5-standard, adicionar seus pacotes por cima e herdar atualizações contínuas gerenciadas pela Databricks e patches de segurança.

Se você quiser criar uma imagem base mínima do zero, consulte Referência: crie uma imagem base mínima do zero.

Etapa 2a: Baixe a imagem base

Para baixar a imagem base, execute:

docker pull databricksruntime/environment:v5-standard

Etapa 2b: gravar um Dockerfile que estende a imagem base

Instale pacotes de Python personalizados no ambiente virtual /databricks/python3 da imagem base. Esse é o ambiente virtual do sistema que inicia suas cargas de trabalho.

FROM databricksruntime/environment:v5-standard

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

O exemplo a seguir mostra como instalar um pacote de um repositório privado.

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

Você pode usar qualquer instrução padrão do Dockerfile (por exemplo, , RUN, ENV, WORKDIR). COPY As instruções a seguir são ignoradas devido à forma como Azure Databricks inicia sua carga de trabalho:

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

Note

Para cargas de trabalho em Scala, copie os arquivos JAR para o diretório /scala-jars/user na imagem e chmod 0644 neles para que o usuário do sandbox possa lê-los. O Azure Databricks carrega JARs deste caminho no classpath do Spark.

Etapa 2c: Criar a imagem

Para criar a imagem, execute:

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

Warning

Teste sua imagem personalizada minuciosamente em uma computação Azure Databricks. Uma imagem que funciona em uma máquina local ou de compilação pode falhar ao iniciar, desativar recursos silenciosamente ou parar de funcionar quando executada no Azure Databricks.

Referência: criar uma imagem base mínima do zero

Se você precisar de controle total sobre o conteúdo da sua imagem base (por exemplo, para atender a requisitos rigorosos de tamanho da imagem, cadeia de suprimentos ou conformidade), poderá criar do zero um equivalente mínimo de databricksruntime/environment:v5-standard em vez de estendê-lo.

Warning

Criar do zero é uma opção avançada. Você assume a responsabilidade de acompanhar as alterações feitas upstream da imagem v5-standard, incluindo as versões fixadas do Python, patches de segurança, ferramentas da plataforma e os arquivos exigidos pela plataforma em /databricks/ e /etc/environment. Em vez disso, o Databricks recomenda estender databricksruntime/environment:v5-standard conforme mostrado anteriormente na Etapa 2.

A Databricks fornece um Dockerfile de referência e requirements.txt que recriam o ambiente Python essencial do v5-standard. Baixe ambos os arquivos no mesmo diretório antes de compilar:

Para criar a imagem, execute:

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

Se o host de build não conseguir acessar https://pypi.org, substitua o índice do pip durante a build executando:

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

Antes de prosseguir para a próxima etapa, verifique se os pacotes de Python coletados são importados de forma limpa executando:

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

Etapa 3: Enviar sua imagem por push para um registro

Em seguida, envie sua imagem por push para um registro do Docker. Os Serviços de Contêiner do Databricks dão suporte aos mesmos registros na computação padrão e dedicada:

Outros registros que não dão suporte a autenticação ou autenticação básica também devem funcionar. A autenticação básica usa o nome de usuário e a senha do registro.

Para obter o melhor desempenho no download de imagens, use um registro de contêiner na mesma nuvem e região que o seu workspace do Azure Databricks.

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

Note

Se você usar Docker Hub, verifique se os limites de taxa acomodam a computação que você espera iniciar em um período de seis horas. Confira a documentação do Docker para obter detalhes. Se esse limite for excedido, as solicitações retornarão 429 Too Many Requests.

Etapa 4: Iniciar sua computação

Você pode iniciar a computação que usa sua imagem personalizada usando a interface do usuário ou a API. Os seguintes requisitos devem ser atendidos:

  • O modo de acesso de computação deve ser Standard (na API, definido data_security_mode como DATA_SECURITY_MODE_STANDARD). Se a computação estiver definida com o modo de acesso Dedicado, será usada uma versão diferente do Databricks Container Services, que requer uma imagem base diferente e não conseguirá iniciar com a imagem base que você criou.
  • A versão do Databricks Runtime deve ser 18.3 ou superior.

Note

Para iniciar usando um pool de instâncias, o pool deve ser criado com preloaded_docker_images definido, e o docker_image do cluster deve corresponder. Consulte Usar os Serviços de Contêiner do Databricks com um pool de instâncias antes de iniciar.

Inicie sua computação usando a interface do usuário

  1. Na página Criar computação, verifique se o modo de acesso está definido como Standard e se o Databricks Runtime está definido como 18.3 ou acima.

  2. Em Avançado, selecione a guia Docker.

  3. Selecione Usar seu contêiner do Docker.

  4. No campo URL de Imagem do Docker , insira sua imagem personalizada.

    Registry Formato de marca
    Docker Hub <organization>/<repository>:<tag> (por exemplo: databricksruntime/environment:v5-standard)
    Registro de Contêiner do Azure <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. Selecione o tipo de autenticação. Consulte Autenticação de imagem do Docker.

Note

Se você não vir as configurações do Docker ao criar computação, os Serviços de Contêiner do Databricks poderão não estar habilitados em seu workspace. Um administrador de workspace deve habilitá-lo antes que qualquer usuário possa especificar uma imagem do Docker. Consulte a Etapa 1: Habilitar os Serviços de Contêiner do Databricks para computação padrão.

Inicie sua computação usando a API

Veja a seguir um exemplo de chamada à API que cria uma computação padrão com sua imagem personalizada. Verifique se data_security_mode está definido para DATA_SECURITY_MODE_STANDARD e spark_version está definido para 18.3.x-scala2.13 ou acima.

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

Autenticação de imagens do Docker

Os requisitos de autenticação dependem do tipo de imagem do Docker. Você também pode usar segredos para armazenar nomes de usuário e senhas de autenticação. Confira Usar segredos para autenticação.

  • Para imagens públicas do Docker, você não precisa incluir informações de autenticação. Na interface do usuário, defina Autenticação como Padrão. Para a chamada à API, não inclua os campos basic_auth.
  • Para imagens privadas do Docker, autentique-se usando um ID de entidade de serviço e senha (ou segredos aplicáveis) como nome de usuário e senha.
  • Para o Registro de Contêiner do Azure, autentique-se usando um ID da entidade de serviço e senha (ou segredos aplicáveis) como nome de usuário e senha. Confira a documentação da autenticação de entidade de serviço do Registro de Contêiner do Azure para obter informações sobre como criar a entidade de serviço.

Usar segredos para autenticação

O Serviço de Contêiner do Databricks dá suporte ao uso de segredos para autenticação. Ao criar o recurso de computação na interface do usuário, use o campo Autenticação para selecionar Nome de Usuário e Senha. Em vez de inserir seu Nome de Usuário ou Senha em texto em formato simples, insira seus segredos usando o formato {{secrets/<scope-name>/<dcs-secret>}}. Se você usar a API, insira os segredos nos campos basic_auth.

Para obter informações sobre criação de segredos, consulte Gerenciamento de segredos.

Usar o Databricks Container Services com um pool de instâncias

Para usar os Serviços de Contêiner do Databricks com um pool de instâncias, você deve criar o pool usando a API de Pools de Instância, não a interface do usuário.

O pool deve ser criado com imagens do Docker pré-carregadas. Isso aquece instâncias ociosas com sua imagem personalizada para que as cargas de trabalho comecem mais rapidamente. Defina o preloaded_docker_images campo na solicitação com as mesmas referências de imagem e autenticação que você usa ao iniciar a computação diretamente. O campo é uma lista, portanto, um único pool pode pré-carregar várias imagens.

O pool e seus recursos de computação anexados devem concordar se o Docker está em uso. Se um pool não tiver preloaded_docker_images definido, você não poderá iniciar a computação dos Serviços de Contêiner do Databricks contra ele. Crie um novo pool com preloaded_docker_images definido.

Para pools criados com preloaded_docker_images, qualquer recurso de computação iniciado para o pool deve fornecer um docker_image correspondente em sua solicitação de criação. Caso contrário, a criação de computação falhará com 'docker_image' must be provided for cluster created with instance pool: <pool-id>.

Migrar do Databricks Container Services original

Os Serviços de Contêiner do Databricks para computação padrão são um serviço diferente dos Serviços de Contêiner do Databricks originais para computação dedicada. Esse recurso tem as seguintes diferenças:

  • As cargas de trabalho são executadas por meio do protocolo Spark Connect .
  • Os scripts de inicialização não modificam o ambiente de Python da carga de trabalho. Você deve instalar todas as dependências Python na imagem do Docker. Você pode continuar usando scripts de inicialização para aplicativos que consomem dados do Spark, como agentes do Datadog ou kafka.

Para migrar dos Serviços de Contêiner do Databricks originais para computação dedicada, recompile sua imagem personalizada nos Serviços de Contêiner do Databricks para computação padrão e atualize sua configuração de computação:

  1. Substitua a linha FROM em seu Dockerfile por FROM databricksruntime/environment:v5-standard (ou v5-standard-arm para AWS Graviton).
  2. Portar as instruções do Dockerfile para a nova imagem base. Há suporte para instruções padrão do Dockerfile, com as exceções listadas na Etapa 2: Criar sua imagem personalizada.
  3. Instale pacotes do Python em /databricks/python3 em vez de em qualquer outro ambiente virtual. Cargas de trabalho (notebooks, trabalhos de roda Python, trabalhos de script Python) são lidas nesse caminho.
  4. Atualize sua configuração de computação para usar o modo de acesso Standard e o Databricks Runtime 18.3 ou superior.
  5. Mova para o Dockerfile qualquer configuração de ambiente do Python que antes era feita por um script de inicialização.

Limitações

Além das limitações de computação padrão, os Serviços de Contêiner do Databricks para computação padrão têm as seguintes limitações:

Troubleshooting

Se a guia Docker não aparecer em Avançado quando você criar computação, os Serviços de Contêiner do Databricks não estarão habilitados para seu workspace. Um administrador de workspace deve habilitá-lo no workspace antes que qualquer usuário possa especificar uma imagem do Docker. Consulte a Etapa 1: Habilitar os Serviços de Contêiner do Databricks para computação padrão.