Qual é Photon?

Photon é o motor nativo de consultas vetorizadas do Azure Databricks que acelera as suas cargas de trabalho SQL, chamadas à API DataFrame, pipelines ETL e cargas de trabalho de streaming sem estado. A Photon processa dados em lotes colunares, proporcionando melhorias significativas de desempenho em relação à execução tradicional baseada em linhas. O Photon também é compatível com as APIs do Apache Spark, por isso funciona com o teu código existente sem necessidade de alterações.

Como funciona o Photon

Para operações suportadas, o Photon substitui o motor de execução Spark SQL baseado em JVM por um runtime nativo C++. O otimizador de consultas Apache Spark (Catalyst) continua a planear a sua consulta, mas o Photon assume a camada de execução, processando os dados em lotes colunares em vez de linha a linha. Quando o Photon encontra uma operação não suportada durante a execução da consulta, ele recua transparentemente para o runtime do Spark durante o restante período dessa operação.

O Photon processa dados em lotes de milhares de linhas de cada vez, permitindo que CPUs modernas utilizem instruções SIMD que avaliam múltiplos valores por ciclo de CPU. Ao executar em C++ nativo em vez da JVM, o Photon elimina pausas de recolha de lixo, atrasos no aquecimento do JIT e sobrecarga de memória. O processamento em lote em colunas permite leituras sequenciais amigas da cache, o que maximiza a largura de banda da memória e a eficiência do pipeline da CPU.

A arquitetura da Photon melhora o desempenho de várias formas:

  • Aceleração de consultas: A Photon oferece até 5 vezes melhor preço/desempenho para cargas de trabalho de dados e análises em comparação com outros armazéns de dados na cloud, conforme medido por benchmarks de TPC-DS padrão da indústria.
  • Junções e redistribuições otimizadas: Substitui as junções de ordenação e intercalação por junções hash de alto desempenho e utiliza uma redistribuição colunar redesenhada para aumentar a taxa de transferência em junções em grande escala.
  • Desempenho de escrita: O gravador Parquet nativo do Photon acelera as operações de escrita no Delta Lake, no Apache Iceberg e em Parquet, incluindo UPDATE, DELETE, MERGE INTO, INSERT e CREATE TABLE AS SELECT. Tabelas largas com milhares de colunas apresentam melhorias especialmente significativas.
  • Eficiência de varrimento: Implementa pushdown de filtros, poda de dicionário e salto de grupos de linhas para reduzir dados lidos do armazenamento, mesmo ao lidar com muitos ficheiros pequenos.
  • Cache de disco e concorrência: Proporciona acesso mais rápido a repetições através da cache de disco e melhora a taxa de transferência para consultas concorrentes em cargas de trabalho interativas de BI.
  • Integração com SQL e APIs de Dataframes: Suporta APIs SQL e DataFrame em Python, R, Scala e Java sem necessidade de alterações de código.

O Photon oferece o maior benefício para consultas de maior duração que processam grandes conjuntos de dados. Consultas que normalmente são concluídas em menos de dois segundos não apresentam melhorias significativas porque o tempo de execução é dominado pela sobrecarga de planeamento e agendamento em vez do processamento de dados.

Integração com a plataforma Azure Databricks

O Photon acelera cargas de trabalho em toda a plataforma Azure Databricks. Não precisas de alterar o teu código ou consultas para tirar partido do Photon.

  • Análise SQL e BI: O Photon é o motor predefinido para todos os warehouses SQL, alimentando dashboards, consultas ad hoc e relatórios agendados.
  • ETL e engenharia de dados: Os trabalhos em lote construídos com SQL ou a API DataFrame beneficiam de scans, joins, agregações e escritas mais rápidas. O gravador Parquet nativo é particularmente eficaz para ingestão em tabelas Delta Lake, Apache Iceberg ou Parquet.
  • Lakeflow Spark Declarative Pipelines: Ativar o Photon na configuração do seu pipeline ajuda a acelerar a execução de Lakeflow Spark Declarative Pipelines.
  • Streaming: O Photon suporta streaming stateless ao escrever para um atenuador Delta ou Parquet. As fontes suportadas incluem Delta, Parquet, CSV, JSON, Kafka e Kinesis. Streaming com estado não é suportado.
  • IA e aprendizagem automática: A Photon melhora o desempenho para operações Spark SQL, DataFrames, engenharia de funcionalidades e GraphFrames.

Ativação de fótons

O Photon está sempre ativado na computação sem servidor, nos armazéns de SQL e nos pipelines sem servidor do Lakeflow Spark Declarative Pipelines.

Para a computação clássica de uso geral, a computação para jobs e os pipelines clássicos do Lakeflow Spark Declarative Pipelines, o Photon está ativado por defeito e pode ser ativado ou desativado com a caixa de seleção Use Photon Acceleration na secção Performance, ao criar ou editar a computação. Ver Usar aceleração de fotões. Se criar estes recursos usando a API Clusters ou Jobs API, deve ativar explicitamente o Photon definindo runtime_engine para PHOTON. Se usar a API Pipelines, defina photon para true.

Funcionalidades que requerem ativação de fotões

As seguintes funcionalidades requerem a ativação do Photon:

Tipos de instância suportados

O Photon suporta vários tipos de instâncias nos nós de condução e de trabalho. Os tipos de instância do Photon consomem DBUs a uma taxa diferente comparado ao mesmo tipo de instância quando executam o runtime não Photon. Para mais informações sobre instâncias Photon e consumo de DBUs, consulte a página de preços Azure Databricks.

Operadores, expressões e tipos de dados suportados

O fotão cobre os seguintes operadores, expressões e tipos de dados. Quando uma consulta utiliza uma operação não suportada, o Photon recua transparentemente para o runtime do Spark nessa parte da execução.

Operadores

  • Scan (Parquet, Delta, CSV, JSON), Filter, Project
  • Agregação de Hash/União/Embaralhamento
  • Nested-Loop Junte-se
  • Null-Aware Anti Junção
  • Junção Espacial (variantes broadcast e aleatórias que suportam ST_Intersects, ST_Contains, ST_Covers, ST_Equals, ST_Touches, ST_Within, e ST_DWithin)
  • União, Expandir, ScalarSubquery
  • Pia de gravação Delta/Parquet
  • Ordenar, TopK, Limitar
  • Função Janela

Expressões

Estas categorias são representativas, não exaustivas. 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 de Tipos
  • Agregados, incluindo Min/Max/MinBy/MaxBy em tipos aninhados
  • Data/Marca temporal/Formato de data

Tipos de dados

  • Byte/Short/Int/Long
  • booleano
  • String/binário
  • Decimal
  • Flutuador/Duplo
  • Carimbo de data/hora
  • TimestampNTZ
  • Estrutura
  • Matriz
  • Mapa
  • Variante
  • Null
  • Geometria
  • Geografia
  • Corda colada

Monitorize a utilização do Photon

Pode monitorizar quanto da sua consulta é executada no Photon usando as seguintes ferramentas:

  • Spark UI (clássico de uso geral e computação de tarefas): No separador SQL/DataFrame da Spark UI, os operadores Photon aparecem a laranja na visualização DAG da consulta. Os operadores padrão do Spark aparecem em azul. Isto ajuda-o a identificar que partes da sua consulta beneficiam do Photon e quais recorrem ao ambiente de execução do Spark.
  • Perfil da consulta (armazéns SQL e computação sem servidor): A vista Detalhes de execução mostra a percentagem do tempo da tarefa despendido no Photon. O plano de consulta distingue os operadores Photon (roxos) dos operadores padrão (cinzentos).

Se notar que uma consulta não está a usar o Photon como esperado, verifique se a consulta utiliza operações não suportadas, UDFs ou formatos de dados que provoquem o recurso ao runtime do Spark.

Limitações

  • Se a sua carga de trabalho atingir uma operação não suportada, o recurso de computação muda de forma transparente para o runtime do Spark durante o restante período dessa operação. A sua consulta continua a produzir resultados corretos.
  • O Photon não suporta UDFs (Funções Definidas pelo Utilizador), APIs RDD ou APIs de Conjuntos de Dados.
  • Streaming com estado não é suportado. O Photon suporta apenas streaming sem estado.
  • O Photon não melhora consultas que normalmente correm em menos de dois segundos.