O que é Photon?

O Photon é o mecanismo de consulta vetorizado nativo do Azure Databricks que acelera suas cargas de trabalho de SQL, chamadas à API DataFrame, pipelines de ETL e cargas de trabalho de streaming sem estado. O Photon processa dados em lotes colunais, proporcionando melhorias significativas de desempenho em relação à execução tradicional baseada em linha. O Photon também é compatível com AS APIs do Apache Spark, portanto, ele funciona com o código existente sem nenhuma alteração necessária.

Como o Photon funciona

Para operações com suporte, o Photon substitui o mecanismo de execução spark SQL baseado em JVM por um runtime C++ nativo. O Otimizador de Consulta do Apache Spark (Catalyst) ainda planeja sua consulta, mas o Photon assume na camada de execução, processando dados em lotes columnares em vez de linha por linha. Quando o Photon encontra uma operação não suportada durante a execução da consulta, ele recorre automaticamente ao ambiente de execução do Spark pelo restante dessa operação.

O Photon processa dados em lotes de milhares de linhas por vez, permitindo que CPUs modernas usem instruções SIMD que avaliam vários valores por ciclo de CPU. Ao executar no C++ nativo em vez da JVM, o Photon elimina pausas de coleta de lixo, atrasos de aquecimento JIT e sobrecarga de memória. O processamento em lote columnar permite leituras sequenciais amigáveis ao cache, o que maximiza a largura de banda de memória e a eficiência do pipeline da CPU.

A arquitetura do Photon melhora o desempenho de várias maneiras:

  • Aceleração de consultas: o Photon oferece uma relação preço/desempenho até 5 vezes melhor para cargas de trabalho de dados e análises em comparação com outros armazéns de dados em nuvem, conforme medido pelos benchmarks TPC-DS padrão do setor.
  • Junções e embaralhamentos otimizados: substitui junções de classificação-mesclagem por junções de hash de alto desempenho e usa um embaralhamento columnar redesenhado para aumentar a taxa de transferência para junções em grande escala.
  • Desempenho de gravação: O gravador nativo de Parquet do Photon acelera gravações em Delta Lake, Apache Iceberg e Parquet, incluindo as operações UPDATE, DELETE, MERGE INTO, INSERT e CREATE TABLE AS SELECT. Tabelas largas com milhares de colunas veem melhorias especialmente significativas.
  • Eficiência de varredura: implementa o pushdown de filtro, a poda de dicionário e o salto de grupos de linhas para reduzir a quantidade de dados lidos do armazenamento, mesmo ao lidar com muitos arquivos pequenos.
  • Cache de disco e simultaneidade: fornece acesso de repetição mais rápido por meio do cache de disco e melhora a taxa de transferência para consultas simultâneas em cargas de trabalho interativas de BI.
  • Integração com as APIs SQL e DataFrame: oferece suporte a APIs SQL e DataFrame em Python, R, Scala e Java, sem exigir alterações no código.

O Photon oferece o maior benefício para consultas de execução mais longa que processam grandes conjuntos de dados. As consultas que normalmente são concluídas em menos de dois segundos não veem uma melhoria significativa porque o tempo de execução é dominado pelo planejamento e pelo agendamento de sobrecarga em vez do processamento de dados.

Integração com a plataforma Azure Databricks

O Photon acelera cargas de trabalho em toda a plataforma de Azure Databricks. Você não precisa alterar seu código ou consultas para aproveitar o Photon.

  • Análises SQL e BI: Photon é o mecanismo padrão para todos os warehouses SQL, alimentando painéis, consultas ad hoc e relatórios agendados.
  • ETL e engenharia de dados: trabalhos em lote criados com SQL ou a API dataframe se beneficiam de verificações, junções, agregações e gravações mais rápidas. O gravador nativo de Parquet é particularmente eficaz para ingestão em tabelas Delta Lake, Apache Iceberg ou Parquet.
  • Lakeflow Spark Declarative Pipelines: ativar o Photon na configuração do pipeline ajuda a acelerar a execução de Lakeflow Spark Declarative Pipelines.
  • Streaming: o Photon dá suporte ao streaming sem estado ao gravar em um coletor Delta ou Parquet. As fontes com suporte incluem Delta, Parquet, CSV, JSON, Kafka e Kinesis. Não há suporte para streaming com estado.
  • IA e machine learning: o Photon melhora o desempenho para operações do Spark SQL, DataFrames, engenharia de recursos e GraphFrames.

Habilitação do Photon

O Photon está sempre habilitado na computação sem servidor, em warehouses SQL e em pipelines declarativos do Lakeflow Spark sem servidor.

Para computação clássica de uso geral, computação para trabalhos e pipelines clássicos do Lakeflow Spark Declarative Pipelines, o Photon é habilitado por padrão e pode ser ativado ou desativado com a caixa de seleção Usar aceleração do Photon, em Desempenho, ao criar ou editar a computação. Consulte Usar aceleração do Photon. Se você criar esses recursos usando a API de Clusters ou a API de Trabalhos, deverá habilitar explicitamente o Photon definindo runtime_engine como PHOTON. Se você usar a API de Pipelines, defina photon como true.

Recursos que exigem habilitação do Photon

Os seguintes recursos exigem a habilitação do Photon:

Tipos de instância com suporte

O Photon oferece suporte a vários tipos de instâncias nos nós de driver e trabalhador. Os tipos de instância do Photon consomem DBUs a uma taxa diferente do mesmo tipo de instância que executa o runtime não Photon. Para obter mais informações sobre instâncias do Photon e consumo de DBU, consulte a página de preços do Azure Databricks.

Operadores, expressões e tipos de dados compatíveis

O Photon abrange os seguintes operadores, expressões e tipos de dados. Quando uma consulta usa uma operação sem suporte, o Photon recorre automaticamente ao ambiente de execução do Spark nessa parte da execução.

Operadores

  • Verificação (Parquet, Delta, CSV, JSON), Filtro, Project
  • Agregação/junção/embaralhamento de hash
  • Junção Nested-Loop
  • Null-Aware Anti-Junção
  • Junção Espacial (variantes de difusão e embaralhamento com suporte a ST_Intersects, ST_Contains, ST_Covers, ST_Equals, ST_Touches, ST_Within e ST_DWithin)
  • União, Expansão, ScalarSubquery
  • Coletor de Gravação Delta/Parquet
  • Classificar, TopK, Limite
  • Função de janela

Expressões

Essas categorias são representativas, não exaustivas. As funções individuais dentro de cada categoria podem ter limitações.

  • Comparação/lógica
  • Aritmética / Matemática
  • Condicional (IF, CASE, etc.)
  • String
  • Conversões
  • Agregações, incluindo Min/Max/MinBy/MaxBy em tipos aninhados
  • Data/Data e hora/Formato de data

Tipos de dados

  • Byte/Short/Int/Long
  • booleano
  • Cadeia de caracteres/binário
  • Decimal
  • Flutuante/Duplo
  • Data/Carimbo de data/hora
  • TimestampNTZ
  • Estrutura
  • Matriz
  • Mapeamento
  • Variant
  • Nulo
  • Geometria
  • Geografia
  • Cadeia de caracteres agrupada

Monitorar o uso de fótons

Você pode monitorar o quanto de sua consulta é executada no Photon usando as seguintes ferramentas:

  • Interface do usuário do Spark (computação clássica de todos os fins e trabalhos): na guia SQL/DataFrame da interface do usuário do Spark, os operadores photon aparecem em laranja na visualização do DAG da consulta. Os operadores Spark padrão aparecem em azul. Isso ajuda a identificar quais partes da consulta se beneficiam do Photon e quais retornam ao runtime do Spark.
  • Perfil da consulta (SQL warehouses e computação sem servidor): a exibição "Detalhes da execução" mostra a porcentagem do tempo da tarefa gasto no Photon. O plano de consulta distingue os operadores Photon (roxo) dos operadores padrão (cinza).

Se você observar que uma consulta não está usando o Photon conforme o esperado, verifique se a consulta usa operações sem suporte, UDFs ou formatos de dados que causam um fallback para o runtime do Spark.

Limitações

  • Se a carga de trabalho atingir uma operação sem suporte, o recurso de computação alterna de forma transparente para o runtime do Spark para o restante dessa operação. Sua consulta ainda produz resultados corretos.
  • O Photon não dá suporte a UDFs (funções definidas pelo usuário), APIs RDD ou APIs de conjunto de dados.
  • Não há suporte para streaming com estado. Photon suporta apenas streaming sem estado.
  • O Photon não melhora as consultas que normalmente são executadas em menos de dois segundos.