Fluxos de trabalho CI/CD em Databricks

O CI/CD (Continuous Integration and Continuous Delivery) tornou-se uma pedra angular da engenharia e análise de dados modernas, pois garante que as alterações de código sejam integradas, testadas e implantadas de forma rápida e confiável. O Databricks reconhece que você pode ter diversos requisitos de CI/CD moldados por suas preferências organizacionais, fluxos de trabalho existentes e ambiente de tecnologia específico, e fornece uma estrutura flexível que suporta várias opções de CI/CD.

Esta página descreve fluxos de trabalho recomendados de CI/CD para o ajudar a desenhar e construir pipelines robustos e personalizados de CI/CD que se alinhem com as suas necessidades e restrições únicas. Ao aproveitar esses insights, você pode acelerar suas iniciativas de engenharia e análise de dados, melhorar a qualidade do código e reduzir o risco de falhas de implantação.

Princípios fundamentais da IC/CD

Pipelines de CI/CD eficazes compartilham princípios fundamentais, independentemente das especificidades da implementação. As seguintes práticas recomendadas universais aplicam-se às preferências organizacionais, aos fluxos de trabalho dos desenvolvedores e aos ambientes de nuvem, garantindo a consistência em diversas implementações. Isso aplica-se independentemente de sua equipe priorizar o desenvolvimento prioritário de notebooks ou fluxos de trabalho de infraestrutura-como-código. Adote estes princípios como diretrizes, ao mesmo tempo em que adapta as especificidades à pilha tecnológica e aos processos da sua organização.

  • Controle a versão de tudo
    • Armazene blocos de anotações, scripts, definições de infraestrutura (IaC) e configurações de trabalho no Git.
    • Use estratégias de ramificação, como o Gitflow, que estejam alinhadas com ambientes padrão de desenvolvimento, preparação e implantação de produção.
  • Automatize os testes
    • Implemente testes de unidade para lógica de negócios usando bibliotecas, como pytest para Python e ScalaTest para Scala.
    • Valide a funcionalidade de notebook e fluxo de trabalho com ferramentas, como Databricks CLI bundle validate.
    • Use testes de integração para fluxos de trabalho e pipelines de dados, como chispa para Spark DataFrames.
  • Empregar infraestrutura como código (IaC)
    • Defina clusters, jobs e configurações de espaços de trabalho com Declarative Automation Bundles YAML ou Terraform.
    • Parametrizar em vez de codificar configurações referentes ao ambiente, como o tamanho do cluster e informações confidenciais.
  • Isolar ambientes
    • Mantenha espaços de trabalho separados para desenvolvimento, preparação e produção.
    • Use o MLflow Model Registry para controle de versão de modelos entre ambientes.
  • Escolha ferramentas que correspondam ao seu ecossistema de nuvem:
    • Azure: Azure DevOps e Pacotes de Automação Declarativa ou Terraform.
    • AWS: GitHub Actions e Pacotes de Automação Declarativa ou Terraform.
    • GCP: Cloud Build e Pacotes de Automação Declarativa ou Terraform.
  • Monitore e automatize reversões
    • Acompanhe as taxas de sucesso da implantação, o desempenho do trabalho e a cobertura do teste.
    • Implemente mecanismos de reversão automatizados para implantações com falha.
  • Unificar a gestão de ativos
    • Use Pacotes de Automação Declarativa para implementar código, trabalhos e infraestrutura como uma única unidade. Evite o gerenciamento em silos de blocos de anotações, bibliotecas e fluxos de trabalho.

Note

O Databricks recomenda a federação de identidades de carga de trabalho para autenticação de CI/CD. A federação de identidades de carga de trabalho elimina a necessidade de segredos do Databricks, o que o torna a maneira mais segura de autenticar seus fluxos automatizados para o Databricks. Consulte Habilitar federação de identidade de carga de trabalho em CI/CD.

Pacotes de Automação Declarativa para CI/CD

Os Declarative Automation Bundles (anteriormente conhecidos como Databricks Asset Bundles) oferecem uma abordagem poderosa e unificada para gerir código, fluxos de trabalho e infraestrutura dentro do ecossistema Databricks e são recomendados para os seus pipelines CI/CD. Ao agrupar esses elementos em uma única unidade definida pelo YAML, os pacotes simplificam a implantação e garantem a consistência entre os ambientes. No entanto, para usuários acostumados aos fluxos de trabalho tradicionais de CI/CD, a adoção de pacotes pode exigir uma mudança de mentalidade.

Por exemplo, os desenvolvedores Java são usados para construir JARs com Maven ou Gradle, executar testes de unidade com JUnit e integrar essas etapas em pipelines de CI/CD. Da mesma forma, os desenvolvedores Python geralmente empacotam o código em rodas e testam com pytest, enquanto os desenvolvedores SQL se concentram na validação de consultas e no gerenciamento de notebooks. Com os pacotes, esses fluxos de trabalho convergem para um formato mais estruturado e prescritivo, enfatizando a agregação de código e infraestrutura para uma implantação perfeita.

As seções a seguir exploram como os desenvolvedores podem adaptar seus fluxos de trabalho para aproveitar os pacotes de forma eficaz.

Para começares rapidamente com os Pacotes de Automação Declarativa, experimenta um tutorial: Desenvolve um trabalho com Pacotes de Automação Declarativa ou Desenvolve pipelines com Pacotes de Automação Declarativa.

Controlo de origem

Os bundles permitem-te facilmente conter tudo – código-fonte, artefactos de build e ficheiros de configuração – e localizá-los no mesmo repositório de código-fonte, mas também podes separar os ficheiros de configuração bundle dos ficheiros relacionados com código. A escolha depende do fluxo de trabalho da sua equipa, da complexidade do projeto e dos requisitos de CI/CD, mas para simplificar fluxos de trabalho e partilha de boas práticas, a Databricks recomenda que utilize um único repositório tanto para a configuração do código como do bundle.

Além disso, a Databricks recomenda uma estratégia de ramificação baseada no trunk para minimizar conflitos de fusão e garantir que a branch principal está sempre pronta para implementação, e recomenda também a utilização de artefactos versionados, como hashes de commit do Git, ao carregá-los para a Databricks ou para armazenamento externo, de modo a garantir a rastreabilidade e a capacidade de reversão.

Para mais informações sobre estas boas práticas, consulte Controlo de versões.

Fluxo de trabalho de CI/CD com pacotes

Um fluxo de trabalho simples recomendado usando Pacotes de Automação Declarativa é o seguinte:

  1. Compilar e testar o código
    • Acionado em uma solicitação pull ou uma confirmação para a ramificação principal.
    • Compile código e execute testes de unidade.
    • Exporte um ficheiro versionado, por exemplo, my-app-1.0.jar.
  2. Carregue e armazene o arquivo compilado, como um JAR, em um volume do Databricks Unity Catalog.
    • Armazene o arquivo compilado em um volume do Databricks Unity Catalog ou em um repositório de artefatos, como o AWS S3 ou o Armazenamento de Blobs do Azure.
    • Use um esquema de versionamento vinculado a hashes de confirmação do Git ou versionamento semântico, por exemplo, dbfs:/mnt/artifacts/my-app-${{ github.sha }}.jar.
  3. Validar o pacote
    • Execute databricks bundle validate para garantir que a databricks.yml configuração esteja correta.
    • Esta etapa garante que as configurações incorretas, por exemplo, bibliotecas ausentes, sejam detetadas antecipadamente.
  4. Implantar o pacote

CI/CD para aprendizagem automática

Os projetos de aprendizado de máquina introduzem desafios exclusivos de CI/CD em comparação com o desenvolvimento de software tradicional. Ao implementar CI/CD para projetos de ML, você provavelmente precisará considerar o seguinte:

  • Coordenação de várias equipes: cientistas de dados, engenheiros e equipes de MLOps geralmente usam ferramentas e fluxos de trabalho diferentes. O Databricks unifica estes processos com MLflow para rastreamento de experiências, OpenSharing para governação de dados e Declarative Automation Bundles para infraestrutura como código.
  • Controle de versão de dados e modelos: os pipelines de ML exigem o acompanhamento não apenas de código, mas também de esquemas de dados de treinamento, distribuições de recursos e artefatos de modelo. A Delta Lake fornece transações ACID e viagens no tempo para versionamento de dados, enquanto o MLflow Model Registry trata da linhagem dos modelos.
  • Reprodutibilidade entre ambientes: os modelos de ML dependem de combinações específicas de dados, códigos e infraestrutura. Os Pacotes de Automação Declarativa garantem a implantação atómica destes componentes em ambientes de desenvolvimento, staging e produção com definições YAML.
  • Retreinamento e monitoramento contínuos: Os modelos se degradam devido à deriva de dados. Os Lakeflow Jobs permitem pipelines de re-treino automatizados, enquanto o MLflow se integra com o Prometheus e o Databricks Data Quality Monitoring para rastreamento de desempenho.

Pilhas MLOps para ML CI/CD

O Databricks aborda a complexidade de ML CI/CD através dos MLOps Stacks, um framework de produção que combina Declarative Automation Bundles, fluxos de trabalho CI/CD pré-configurados e modelos modulares de projetos ML. Estas stacks reforçam as práticas recomendadas, ao mesmo tempo que permitem flexibilidade para a colaboração entre várias equipas nas funções de engenharia de dados, ciência de dados e MLOps.

Team Responsibilities Exemplo de componentes do pacote Artefatos de exemplo
Engenheiros de dados Garanta a criação de pipelines de ETL e a qualidade dos dados Lakeflow Spark Declarative Pipelines YAML, políticas de cluster etl_pipeline.yml, feature_store_job.yml
Cientistas de dados Desenvolver lógica de treinamento de modelo, validar métricas Projetos MLflow, fluxos de trabalho baseados em notebooks train_model.yml, batch_inference_job.yml
Os engenheiros de MLOps Orquestre implantações, monitorize fluxos de trabalho Variáveis de ambiente, painéis de monitoramento databricks.yml, lakehouse_monitoring.yml

A colaboração ML CI/CD pode ter a seguinte aparência:

  • Os engenheiros de dados confirmam alterações no pipeline de ETL num pacote, acionando a validação automatizada do schema e uma implantação de teste.
  • Os cientistas de dados submetem código ML, que executa testes unitários e é implementado num espaço de trabalho de staging para testes de integração.
  • Os engenheiros do MLOps revisam as métricas de validação e promovem modelos aprovados para a produção usando o MLflow Registry.

Para obter detalhes sobre a implementação, consulte:

Ao alinhar as equipes com pacotes padronizados e pilhas de MLOps, as organizações podem simplificar a colaboração enquanto mantêm a auditabilidade em todo o ciclo de vida do ML.

CI/CD para desenvolvedores SQL

Os desenvolvedores SQL que usam o Databricks SQL para gerenciar tabelas de streaming e exibições materializadas podem aproveitar a integração do Git e os pipelines de CI/CD para simplificar seus fluxos de trabalho e manter pipelines de alta qualidade. Com a introdução do suporte Git para consultas, os desenvolvedores SQL podem se concentrar em escrever consultas enquanto aproveitam o Git para controlar a versão de seus .sql arquivos, o que permite colaboração e automação sem precisar de profundo conhecimento em infraestrutura. Além disso, o editor SQL permite a colaboração em tempo real e integra-se perfeitamente com fluxos de trabalho Git.

Para fluxos de trabalho centrados em SQL:

  • Arquivos SQL de controle de versão

    • Armazene arquivos .sql em repositórios Git usando pastas Git Databricks ou provedores Git externos, por exemplo, GitHub, Azure DevOps.
    • Use ramificações (por exemplo, desenvolvimento, preparação, produção) para gerenciar alterações específicas do ambiente.
  • Integre .sql arquivos em pipelines de CI/CD para automatizar a implantação:

    • Valide alterações de sintaxe e esquema durante solicitações pull.
    • Implante .sql arquivos em fluxos de trabalho ou trabalhos do Databricks SQL.
  • Parametrizar para isolamento ambiental

    • Use variáveis em .sql arquivos para fazer referência dinâmica a recursos específicos do ambiente, como caminhos de dados ou nomes de tabelas:

      CREATE OR REFRESH STREAMING TABLE ${env}_sales_ingest AS SELECT * FROM read_files('s3://${env}-sales-data')
      
  • Agendar e monitorar atualizações

    • Use tarefas SQL em um trabalho do Databricks para agendar atualizações para tabelas e exibições materializadas (REFRESH MATERIALIZED VIEW view_name).
    • Monitore o histórico de atualizações usando tabelas do sistema.

Um fluxo de trabalho pode ser:

  1. Desenvolva: escreva e teste .sql scripts localmente ou no editor SQL do Databricks e, em seguida, faça commit deles numa branch do Git.
  2. Validar: Durante uma solicitação pull, valide a sintaxe e a compatibilidade de esquema usando verificações de CI automatizadas.
  3. Implantar: Após a mesclagem, implante os scripts de .sql no ambiente de destino usando pipelines de CI/CD, por exemplo, Ações do GitHub ou Pipelines do Azure.
  4. Monitor: Use painéis e alertas do Databricks para acompanhar o desempenho de consultas e a atualização dos dados.

CI/CD para desenvolvedores de painéis

O Databricks suporta a integração de painéis de controlo em fluxos de trabalho CI/CD utilizando Pacotes de Automação Declarativa. Esse recurso permite que os desenvolvedores de dashboards:

  • Painéis de controle de versão, que garantem auditabilidade e simplificam a colaboração entre as equipes.
  • Automatize implantações de painéis juntamente com trabalhos e pipelines em todos os ambientes, para alinhamento de ponta a ponta.
  • Reduza os erros manuais e garanta que as atualizações sejam aplicadas de forma consistente em todos os ambientes.
  • Mantenha fluxos de trabalho de análise de alta qualidade enquanto adere às práticas recomendadas de CI/CD.

Para painéis em CI/CD:

  • Use o databricks bundle generate comando para exportar painéis existentes como arquivos JSON e gerar a configuração YAML que o inclui no pacote:

    resources:
      dashboards:
        sales_dashboard:
          display_name: 'Sales Dashboard'
          file_path: ./dashboards/sales_dashboard.lvdash.json
          warehouse_id: ${var.warehouse_id}
    
  • Armazene esses .lvdash.json arquivos em repositórios Git para rastrear alterações e colaborar de forma eficaz.

  • Implemente automaticamente painéis nos pipelines de CI/CD com databricks bundle deploy. Por exemplo, a etapa Ações do GitHub para implantação:

    name: Deploy Dashboard
      run: databricks bundle deploy --target=prod
    env:
      DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
    
  • Use variáveis, por exemplo ${var.warehouse_id}, para parametrizar configurações como SQL warehouses ou fontes de dados, garantindo uma implantação perfeita em ambientes de desenvolvimento, preparação e produção.

  • Use a bundle generate --watch opção para sincronizar continuamente arquivos JSON do painel local com as alterações feitas na interface do usuário do Databricks. Se ocorrerem discrepâncias, use o sinalizador --force durante a implantação para substituir painéis remotos por versões locais.

Para obter informações sobre painéis em pacotes, consulte recurso de painel. Para obter detalhes sobre os comandos de pacote, consulte o grupo de comandos.