Programar e orquestrar fluxos de trabalho
Os Fluxos de Trabalho do Databricks têm ferramentas que permitem agendar e orquestrar tarefas de processamento de dados no Azure Databricks. Você usa Fluxos de Trabalho Databricks para configurar Trabalhos Databricks.
Este artigo apresenta conceitos e opções relacionados ao gerenciamento de cargas de trabalho de produção usando trabalhos do Databricks.
O que são Databricks Jobs?
Um trabalho é a unidade principal para agendar e orquestrar cargas de trabalho de produção no Azure Databricks. Os trabalhos consistem em uma ou mais tarefas. Juntas, as tarefas e trabalhos permitem configurar e implantar o seguinte:
- Lógica personalizada, incluindo Spark, SQL, OSS Python, ML e código arbitrário.
- Recursos de computação com ambientes e bibliotecas personalizados.
- Agendas e gatilhos para executar cargas de trabalho.
- Lógica condicional para controlar o fluxo entre tarefas.
Os trabalhos fornecem uma abordagem processual para definir relações entre tarefas. Os pipelines Delta Live Tables fornecem uma abordagem declarativa para definir relações entre conjuntos de dados e transformações. Você pode incluir pipelines Delta Live Tables como uma tarefa em um trabalho. Consulte Tarefa de pipeline Delta Live Tables para trabalhos.
Os trabalhos podem variar em complexidade, desde uma única tarefa executando um bloco de anotações Databricks até milhares de tarefas executadas com lógica condicional e dependências.
Como posso configurar e executar Jobs?
Você pode criar e executar um trabalho usando a interface do usuário de Trabalhos, a CLI do Databricks ou invocando a API de Trabalhos. Usando a interface do usuário ou a API, você pode reparar e executar novamente um trabalho com falha ou cancelado. Você pode monitorar os resultados da execução do trabalho usando a interface do usuário, a CLI, a API e as notificações (por exemplo, e-mail, destino do webhook ou notificações do Slack).
Se você preferir uma abordagem de infraestrutura como código (IaC) para configurar e orquestrar seus trabalhos, use Databricks Asset Bundles (DABs). Os pacotes podem conter definições YAML de trabalhos e tarefas, são gerenciados usando a CLI do Databricks e podem ser compartilhados e executados em diferentes espaços de trabalho de destino (como desenvolvimento, preparação e produção). Para saber mais sobre como usar DABs para configurar e orquestrar seus trabalhos, consulte Databricks Asset Bundles.
Para saber mais sobre como usar a CLI do Databricks, consulte O que é a CLI do Databricks?. Para saber mais sobre como usar a API de Trabalhos, consulte a API de Trabalhos.
Qual é a configuração mínima necessária para um trabalho?
Todos os trabalhos no Azure Databricks exigem o seguinte:
- Código-fonte (como um bloco de anotações Databricks) que contém lógica a ser executada.
- Um recurso de computação para executar a lógica. O recurso de computação pode ser computação sem servidor, computação de trabalhos clássicos ou computação multiuso. Consulte Configurar computação para trabalhos.
- Um cronograma especificado para quando o trabalho deve ser executado. Opcionalmente, você pode omitir a definição de uma agenda e acionar o trabalho manualmente.
- Um nome único.
Nota
Se você desenvolver seu código em blocos de anotações Databricks, poderá usar o botão Agendar para configurar esse bloco de anotações como um trabalho. Consulte Criar e gerenciar trabalhos agendados de blocos de anotações.
O que é uma tarefa?
Uma tarefa representa uma unidade de lógica a ser executada como uma etapa em um trabalho. As tarefas podem variar em complexidade e podem incluir o seguinte:
- Um bloco de notas
- Um JAR
- Consultas SQL
- Um pipeline DLT
- Outro trabalho
- Tarefas de fluxo de controle
Você pode controlar a ordem de execução das tarefas especificando dependências entre elas. Você pode configurar tarefas para serem executadas em sequência ou em paralelo.
Os trabalhos interagem com informações de estado e metadados de tarefas, mas o escopo da tarefa é isolado. Você pode usar valores de tarefa para compartilhar contexto entre tarefas agendadas. Consulte Usar valores de tarefa para passar informações entre tarefas.
Quais opções de fluxo de controle estão disponíveis para trabalhos?
Ao configurar trabalhos e tarefas em trabalhos, você pode personalizar configurações que controlam como todo o trabalho e tarefas individuais são executados. Estas opções são:
- Acionadores
- Tentativas
- Executar se tarefas condicionais
- Tarefas condicionais if/else
- Para cada tarefa
- Limiares de duração
- Configurações de simultaneidade
Tipos de gatilho
Você deve especificar um tipo de gatilho ao configurar um trabalho. Você pode escolher entre os seguintes tipos de gatilho:
Você também pode optar por acionar seu trabalho manualmente, mas isso é reservado principalmente para casos de uso específicos, como:
- Você usa uma ferramenta de orquestração externa para disparar trabalhos usando chamadas de API REST.
- Você tem um trabalho que raramente é executado e requer intervenção manual para validação ou resolução de problemas de qualidade de dados.
- Você está executando uma carga de trabalho que só precisa ser executada uma ou algumas vezes, como uma migração.
Consulte Automatizando tarefas com agendas e gatilhos.
Tentativas
As novas tentativas especificam quantas vezes uma determinada tarefa deve ser executada novamente se a tarefa falhar com uma mensagem de erro. Os erros são muitas vezes transitórios e resolvidos através do reinício. Alguns recursos no Azure Databricks, como a evolução do esquema com o Structured Streaming, pressupõem que você execute trabalhos com novas tentativas para redefinir o ambiente e permitir que um fluxo de trabalho continue.
Se você especificar novas tentativas para uma tarefa, a tarefa será reiniciada até o número especificado de vezes se encontrar um erro. Nem todas as configurações de trabalho suportam tentativas de tarefas. Consulte Definir uma política de novas tentativas.
Quando executado no modo de gatilho contínuo, o Databricks tenta automaticamente com backoff exponencial. Consulte Como as falhas são tratadas para trabalhos contínuos?.
Executar se tarefas condicionais
Você pode usar o tipo de tarefa Executar se para especificar condicionais para tarefas posteriores com base no resultado de outras tarefas. Você adiciona tarefas ao seu trabalho e especifica tarefas dependentes do upstream. Com base no status dessas tarefas, você pode configurar uma ou mais tarefas downstream para serem executadas. Os empregos suportam as seguintes dependências:
- Todos tiveram sucesso
- Pelo menos um conseguiu
- Nenhum falhou
- Tudo feito
- Pelo menos uma reprovou
- Tudo falhou
Consulte Configurar dependências de tarefas
Tarefas condicionais if/else
Você pode usar o tipo de tarefa Se/else para especificar condicionais com base em algum valor. Consulte Adicionar lógica de ramificação a um trabalho com a tarefa Se/senão.
Os trabalhos suportam taskValues
o que você define em sua lógica e permitem que você retorne os resultados de algum cálculo ou estado de uma tarefa para o ambiente de trabalhos. Você pode definir condições If/else em relação a taskValues
parâmetros de trabalho ou valores dinâmicos.
O Azure Databricks dá suporte aos seguintes operandos para condicionais:
==
!=
>
>=
<
<=
Consulte também:
- Usar valores de tarefa para passar informações entre tarefas
- O que é uma referência de valor dinâmico?
- Parametrizar trabalhos
Para cada tarefa
Use a For each
tarefa para executar outra tarefa em um loop, passando um conjunto diferente de parâmetros para cada iteração da tarefa.
Adicionar a For each
tarefa a um trabalho requer a definição de duas tarefas: A For each
tarefa e uma tarefa aninhada. A tarefa aninhada é a tarefa a ser executada para cada iteração da For each
tarefa e é um dos tipos de tarefa padrão de Trabalhos do Databricks. Vários métodos são suportados para passar parâmetros para a tarefa aninhada.
Consulte Executar uma tarefa de trabalho parametrizada do Azure Databricks em um loop.
Limiar de duração
Você pode especificar um limite de duração para enviar um aviso ou interromper uma tarefa ou trabalho se uma duração especificada for excedida. Exemplos de quando você pode querer definir essa configuração incluem o seguinte:
- Você tem tarefas propensas a ficar preso em um estado suspenso.
- Você deve avisar um engenheiro se um SLA para um fluxo de trabalho for excedido.
- Para evitar custos inesperados, você deseja falhar em um trabalho configurado com um cluster grande.
Consulte Configurar limites para a duração da execução do trabalho ou as métricas da lista de pendências de streaming e Configurar limites para a duração da execução da tarefa ou as métricas da lista de pendências de streaming.
Simultaneidade
A maioria dos trabalhos é configurada com a simultaneidade padrão de 1 trabalho simultâneo. Isso significa que, se uma execução de trabalho anterior não tiver sido concluída no momento em que um novo trabalho deve ser acionado, a próxima execução de trabalho será ignorada.
Alguns casos de uso existem para aumentar a simultaneidade, mas a maioria das cargas de trabalho não requer a alteração dessa configuração.
Para obter mais informações sobre como configurar a simultaneidade, consulte Configurações de enfileiramento e simultaneidade de trabalhos do Databricks.
Como posso monitorizar os trabalhos?
A interface do usuário de trabalhos permite que você veja execuções de trabalho, incluindo execuções em andamento. Consulte Monitoramento e observabilidade para trabalhos do Databricks.
Você pode receber notificações quando um trabalho ou tarefa é iniciado, concluído ou falha. Você pode enviar notificações para um ou mais endereços de e-mail ou destinos do sistema. Consulte Adicionar notificações em um trabalho.
As tabelas do sistema incluem um lakeflow
esquema onde você pode exibir registros relacionados à atividade do trabalho em sua conta. Consulte Referência da tabela do sistema de trabalhos.
Você também pode juntar as tabelas do sistema de trabalhos com tabelas de faturamento para monitorar o custo dos trabalhos em toda a sua conta. Verifique Monitorizar os custos & de desempenho do trabalho com tabelas do sistema.
Limitações
As seguintes limitações existem:
- Um espaço de trabalho é limitado a 2000 execuções de tarefas simultâneas. É devolvida uma resposta
429 Too Many Requests
quando pede uma execução que não pode ser iniciada imediatamente. - O número de trabalhos que um espaço de trabalho pode criar em uma hora é limitado a 10000 (inclui "envio de execuções"). Este limite também afeta as tarefas criadas pela API REST e os fluxos de trabalho do bloco de notas.
- Um espaço de trabalho pode conter até 12000 empregos salvos.
- Um trabalho pode conter até 100 tarefas.
Posso gerenciar fluxos de trabalho programaticamente?
O Databricks tem ferramentas e APIs que permitem agendar e orquestrar seus fluxos de trabalho programaticamente, incluindo o seguinte:
- CLI do Databricks
- Pacotes de ativos Databricks
- Extensão Databricks para Visual Studio Code
- Databricks SDKs
- Trabalhos REST API
Para obter mais informações sobre ferramentas de desenvolvedor, consulte Ferramentas de desenvolvedor.
Orquestração de fluxo de trabalho com Apache AirFlow
Você pode usar o Apache Airflow para gerenciar e agendar seus fluxos de trabalho de dados. Com o Airflow, você define seu fluxo de trabalho em um arquivo Python e o Airflow gerencia o agendamento e a execução do fluxo de trabalho. Consulte Orquestrar trabalhos do Azure Databricks com o Apache Airflow.
Orquestração do fluxo de trabalho com o Azure Data Factory
O Azure Data Factory (ADF) é um serviço de integração de dados na nuvem que permite compor serviços de armazenamento, movimentação e processamento de dados em pipelines de dados automatizados. Você pode usar o ADF para orquestrar um trabalho do Azure Databricks como parte de um pipeline do ADF.
O ADF também tem suporte interno para executar notebooks Databricks, scripts Python ou código empacotado em JARs em um pipeline do ADF.
Para saber como executar um bloco de anotações Databricks em um pipeline do ADF, consulte Executar um bloco de anotações Databricks com a atividade do bloco de anotações Databricks no Azure Data Factory, seguido por Transformar dados executando um bloco de anotações Databricks.
Para saber como executar um script Python em um pipeline do ADF, consulte Transformar dados executando uma atividade Python no Azure Databricks.
Para saber como executar código empacotado em um JAR em um pipeline do ADF, consulte Transformar dados executando uma atividade JAR no Azure Databricks.