¿Qué es Photon?

Photon es el motor de consultas vectorizado nativo de Azure Databricks que acelera las cargas de trabajo de SQL, las llamadas API de DataFrame, las canalizaciones ETL y las cargas de trabajo de streaming sin estado. Photon procesa los datos en lotes de columnas, lo que proporciona mejoras de rendimiento significativas en la ejecución tradicional basada en filas. Photon también es compatible con las API de Apache Spark, por lo que funciona con el código existente sin que se requieran cambios.

Funcionamiento de Photon

Para las operaciones admitidas, Photon reemplaza el motor de ejecución de Spark SQL basado en JVM por un entorno de ejecución nativo de C++. El optimizador de consultas de Apache Spark (Catalyst) sigue planeando la consulta, pero Photon se encarga de la capa de ejecución, procesando los datos en lotes en columnas en lugar de filas por fila. Cuando Photon encuentra una operación no admitida durante la ejecución de la consulta, vuelve de forma transparente al tiempo de ejecución de Spark durante el resto de esa operación.

Photon procesa datos en lotes de miles de filas a la vez, lo que permite que las CPU modernas usen instrucciones SIMD que evalúen varios valores por ciclo de CPU. Al ejecutarse en C++ nativo en lugar de la JVM, Photon elimina las pausas de recolección de basura, los retrasos de calentamiento del JIT y la sobrecarga de memoria. El procesamiento por lotes en columnas permite lecturas secuenciales fáciles de almacenar en caché, lo que maximiza el ancho de banda de memoria y la eficacia de la canalización de CPU.

La arquitectura de Photon mejora el rendimiento de varias maneras:

  • Aceleración de consultas: Photon proporciona hasta 5 veces mejor precio/rendimiento para cargas de trabajo de datos y análisis en comparación con otros almacenes de datos en la nube, medidos por pruebas comparativas de TPC-DS estándar del sector.
  • Uniones y barajados optimizados: Reemplaza las uniones sort-merge por uniones hash de alto rendimiento y utiliza un barajado columnar rediseñado para aumentar el rendimiento en uniones a gran escala.
  • Rendimiento de escritura: el escritor nativo Parquet de Photon acelera las operaciones de escritura en Delta Lake, Apache Iceberg y Parquet, incluidas las operaciones UPDATE, DELETE, MERGE INTO, INSERT y CREATE TABLE AS SELECT. Las tablas anchas con miles de columnas experimentan mejoras especialmente significativas.
  • Eficiencia de escaneo: implementa la inserción de filtros, la poda de diccionarios y el salto de grupos de filas para reducir la cantidad de datos leídos del almacenamiento, incluso al manejar muchos archivos pequeños.
  • Caché de disco y simultaneidad: proporciona acceso de repetición más rápido a través de la caché de disco y mejora el rendimiento de las consultas simultáneas en cargas de trabajo de BI interactivas.
  • Integration with SQL and Dataframes API: admite API de SQL y DataFrame en Python, R, Scala y Java sin que se requieran cambios en el código.

Photon proporciona la mayor ventaja para las consultas de ejecución más larga que procesan grandes conjuntos de datos. Las consultas que normalmente se completan en menos de dos segundos no ven una mejora significativa porque el tiempo de ejecución está dominado por la planeación y la programación de la sobrecarga en lugar del procesamiento de datos.

Integración con la plataforma Azure Databricks

Photon acelera las cargas de trabajo en la plataforma Azure Databricks. No necesitas cambiar tu código ni tus consultas para aprovechar Photon.

  • Analítica SQL y BI: Photon es el motor predeterminado para todos los almacenes SQL, e impulsa paneles, consultas ad hoc e informes programados.
  • ETL e ingeniería de datos: los trabajos por lotes creados con SQL o dataFrame API se benefician de exámenes, combinaciones, agregaciones y escrituras más rápidos. El escritor nativo de Parquet es especialmente eficaz para la ingesta en tablas de Delta Lake, Apache Iceberg o Parquet.
  • Lakeflow Spark Declarative Pipelines: Habilitar Photon en la configuración de tu pipeline ayuda a acelerar la ejecución de Lakeflow Spark Declarative Pipelines.
  • Streaming: Photon admite streaming sin estado al escribir en un receptor Delta o Parquet. Entre los orígenes admitidos se incluyen Delta, Parquet, CSV, JSON, Kafka y Kinesis. No se admite el streaming con estado.
  • Inteligencia artificial y aprendizaje automático: Photon mejora el rendimiento de las operaciones de Spark SQL, DataFrames, ingeniería de características y GraphFrames.

Activación de Photon

Photon siempre está habilitado en el cómputo sin servidor, los almacenes SQL y las canalizaciones sin servidor de Lakeflow Spark Declarative Pipelines.

Para la informática clásica de uso general, la informática para trabajos y los pipelines clásicos de Lakeflow Spark Declarative Pipelines, Photon está habilitado de forma predeterminada y se puede activar o desactivar con la casilla Usar aceleración de Photon en Rendimiento al crear o editar los recursos de computación. Consulte Uso de la aceleración de Photon. Si crea estos recursos mediante la API de clústeres o la API de trabajos, debe habilitar explícitamente Photon estableciendo runtime_engine en PHOTON. Si usa la Pipelines API, establezca photon en true.

Características que requieren la habilitación de Photon

Las siguientes características requieren la habilitación de Photon:

Tipos de instancia admitidos

Photon admite una cantidad de tipos de instancia en los nodos de controlador y de trabajo. Los tipos de instancia de Photon consumen unidades de Databricks (DBU) a una velocidad diferente a la del mismo tipo de instancia que ejecuta un entorno de ejecución no Photon. Para obtener más información sobre las instancias de Photon y el consumo de DBU, consulte la página de precios de Azure Databricks.

Operadores, expresiones y tipos de datos compatibles

Photon cubre los siguientes operadores, expresiones y tipos de datos. Cuando una consulta usa una operación no admitida, Photon vuelve de forma transparente al entorno de ejecución de Spark para esa parte de la ejecución.

Operadores

  • Escaneo (Parquet, Delta, CSV, JSON), Filtro, Proyección
  • Agregar / Combinar / Ordenar de forma aleatoria un hash
  • Unión de bucle anidado
  • Unión anti null-aware
  • Unión espacial (variantes de difusión y redistribución que admiten ST_Intersects, ST_Contains, ST_Covers, ST_Equals, ST_Touches, ST_Within y ST_DWithin)
  • Union, Expand, ScalarSubquery
  • Receptor de escritura Delta/Parquet
  • Ordenar, TopK, Limitar
  • Función de ventana

Expresiones

Estas categorías son representativas, no exhaustivas. Las funciones individuales dentro de cada categoría pueden tener limitaciones.

  • Comparación / Lógica
  • Aritmética / Matemáticas
  • Condicional (IF, CASE, etc.)
  • String
  • Casteos
  • Agregados, incluidos Min/Max/MinBy/MaxBy en tipos anidados
  • Fecha/Marca temporal/Formato de fecha

Tipos de datos

  • Byte/Corto/Entero/Largo
  • Booleano
  • Cadena/binario
  • Decimal
  • Flotante / Doble
  • Fecha / Marca de tiempo
  • TimestampNTZ
  • Estructura
  • Matriz
  • Mapa
  • Variant
  • Null
  • Geometría
  • Geografía
  • Cadena cotejada

Supervisión del uso de Photon

Puede supervisar la cantidad de consultas que se ejecuta en Photon mediante las siguientes herramientas:

  • Spark UI (cómputo clásico de uso general y de trabajos): En la pestaña SQL/DataFrame de la Spark UI, los operadores Photon aparecen en naranja en la visualización del DAG de consulta. Los operadores estándar de Spark aparecen en azul. Esto te ayuda a identificar qué partes de tu consulta aprovechan Photon y cuáles recurren al motor de ejecución de Spark.
  • Perfil de consulta (almacenamientos de SQL y proceso sin servidor): la vista Detalles de ejecución muestra el porcentaje de tiempo de tarea invertido en Photon. El plan de consulta distingue los operadores Photon (púrpura) de los operadores estándar (gris).

Si observa que una consulta no usa Photon según lo previsto, compruebe si la consulta usa operaciones no admitidas, UDF o formatos de datos que provocan una reserva en el tiempo de ejecución de Spark.

Limitaciones

  • Si la carga de trabajo alcanza una operación no admitida, el recurso de proceso cambia de forma transparente al entorno de ejecución de Spark durante el resto de esa operación. La consulta sigue produciendo resultados correctos.
  • Photon no admite UDF (funciones definidas por el usuario), API de RDD ni API de conjunto de datos.
  • No se admite el streaming con estado. Photon solo admite streaming sin estado.
  • Photon no mejora las consultas que normalmente se ejecutan en menos de dos segundos.