En este documento, se muestra cómo habilitar Lightning Engine para acelerar las cargas de trabajo por lotes y las sesiones interactivas de Managed Service para Apache Spark.
Descripción general
Lightning Engine es un acelerador de consultas de alto rendimiento con la tecnología de un motor de optimización de varias capas que realiza técnicas de optimización habituales, como optimizaciones de consultas y ejecución, así como optimizaciones seleccionadas en la capa del sistema de archivos y los conectores de acceso a los datos.
Como se muestra en la siguiente ilustración, Lightning Engine acelera el rendimiento de la ejecución de consultas de Spark
en una carga de trabajo similar a TPC-H
(tamaño del conjunto de datos de 10 TB).
Para obtener más información, consulta Presentamos Lightning Engine, la nueva generación de rendimiento de Apache Spark.
Disponibilidad de Lightning Engine
Lightning Engine y la ejecución de consultas nativas están disponibles para usarse con el entorno de ejecución de Managed Service para Apache Spark
2.3. Lightning Engine y la ejecución de consultas nativas no están disponibles en el entorno de ejecución3.0.Lightning Engine solo está disponible con el nivel de precios premium de Managed Service para Apache Spark.
Cargas de trabajo por lotes: Lightning Engine se habilita automáticamente para las cargas de trabajo por lotes en el nivel Premium. No es necesario que realices ninguna acción.
Sesiones interactivas: Lightning Engine no está habilitado de forma predeterminada para las sesiones interactivas. Para habilitarlo, consulta Habilita Lightning Engine.
Perfiles de entorno de ejecución (plantillas de sesión): Cuando creas un perfil de entorno de ejecución en la consola de Google Cloud , se seleccionan de forma predeterminada el nivel Premium y la opción Habilitar Lightning Engine para acelerar el rendimiento. Cuando creas una plantilla de sesión con Google Cloud CLI o la API de Dataproc, Lightning Engine no está habilitado de forma predeterminada. Para habilitarlo o configurarlo, consulta Habilita Lightning Engine.
Habilitar Lightning Engine
En las siguientes secciones, se muestra cómo habilitar Lightning Engine en una carga de trabajo por lotes de Managed Service para Apache Spark, un perfil de entorno de ejecución (plantilla de sesión) y una sesión interactiva.
Carga de trabajo por lotes
Habilita Lightning Engine en una carga de trabajo por lotes
Puedes usar la consola de Google Cloud , Google Cloud CLI o la API de Dataproc para habilitar Lightning Engine en una carga de trabajo por lotes.
Console
Usa la consola de Google Cloud para habilitar Lightning Engine en una carga de trabajo por lotes.
En la consola de Google Cloud :
- Ir a los lotes de Managed Service para Apache Spark.
- Haz clic en Crear para abrir la página Crear lote.
Selecciona y completa los siguientes campos:
- Contenedor:
- Versión del entorno de ejecución: Selecciona
2.3.
- Versión del entorno de ejecución: Selecciona
Configuración de niveles:
- Selecciona
Premium. Esto habilita y marca automáticamente "Habilitar LIGHTNING ENGINE para acelerar el rendimiento de Spark".
Cuando seleccionas el nivel premium, el nivel de procesamiento del controlador y el nivel de procesamiento del ejecutor se establecen en
Premium. Esta configuración de procesamiento de nivel premium establecida de forma automática no se puede anular para los lotes que usan entornos de ejecución anteriores a3.0.Puedes configurar el nivel de disco del controlador y el nivel de disco del ejecutor en
Premiumo dejarlos en su valor de nivelStandardpredeterminado. Si eliges un nivel de disco premium, debes seleccionar el tamaño del disco. Para obtener más información, consulta las propiedades de asignación de recursos.- Selecciona
Propiedades: Opcional: Ingresa el siguiente par
Key(nombre de la propiedad) yValuesi deseas seleccionar el entorno de ejecución de Native Query Execution:Clave Valor spark.dataproc.lightningEngine.runtimenativo/nativa/indígena/aborigen
- Contenedor:
Completa, selecciona o confirma otros parámetros de configuración de las cargas de trabajo por lotes. Consulta Envía una carga de trabajo por lotes de Spark.
Haz clic en Enviar para ejecutar la carga de trabajo por lotes de Spark.
gcloud
Establece las siguientes marcas del comando
gcloud dataproc batches submit spark
de gcloud CLI para habilitar un motor de Lightning en una carga de trabajo por lotes.
gcloud dataproc batches submit spark \ --project=PROJECT_ID \ --region=REGION \ --version=2.3 \ --properties=dataproc.tier=premium \ OTHER_FLAGS_AS_NEEDED
Notas:
- PROJECT_ID: Es el ID del proyecto de Google Cloud . Los IDs de proyecto se enumeran en la sección Información del proyecto en el panel de la consola de Google Cloud .
- REGION: Es una región de Compute Engine disponible para ejecutar la carga de trabajo.
--properties=dataproc.tier=premium. Cuando se establece el nivel premium, se configuran automáticamente las siguientes propiedades en la carga de trabajo por lotes:spark.dataproc.engine=lightningEngineselecciona Lightning Engine para la carga de trabajo por lotes.spark.dataproc.driver.compute.tieryspark.dataproc.executor.compute.tierse establecen enpremium(consulta las propiedades de asignación de recursos). Esta configuración de procesamiento de nivel premium establecida automáticamente no se puede anular para los lotes que usan entornos de ejecución anteriores a3.0.
Otras propiedades
Motor de consultas nativo:
spark.dataproc.lightningEngine.runtime=nativeAgrega esta propiedad si quieres seleccionar el entorno de ejecución de Ejecución de consultas nativas.Niveles y tamaños de disco: De forma predeterminada, los tamaños de disco del controlador y del ejecutor se establecen en los niveles y tamaños de
standard. Puedes agregar propiedades para seleccionar niveles y tamaños de disco depremium(en múltiplos de375 GiB).
Para obtener más información, consulta las propiedades de asignación de recursos.
OTHER_FLAGS_AS_NEEDED: Consulta Envía una carga de trabajo por lotes de Spark.
API
Para habilitar Lightning Engine en una carga de trabajo por lotes, como parte de tu
solicitud batches.create, haz lo siguiente:
- Establece RuntimeConfig.version
en
2.3. Agrega "dataproc.tier":"premium" a RuntimeConfig.properties. Cuando se establece el nivel premium, se configuran automáticamente las siguientes propiedades en la carga de trabajo por lotes:
spark.dataproc.engine=lightningEngineselecciona Lightning Engine para la carga de trabajo por lotes.spark.dataproc.driver.compute.tieryspark.dataproc.executor.compute.tierse establecen enpremium(consulta las propiedades de asignación de recursos). Esta configuración de procesamiento de nivel premium establecida automáticamente no se puede anular para los lotes que usan entornos de ejecución anteriores a3.0.
Otro RuntimeConfig.properties:
Motor de consultas nativo:
spark.dataproc.lightningEngine.runtime:native. Agrega esta propiedad si deseas seleccionar el entorno de ejecución de Native Query Execution.Niveles y tamaños de disco: De forma predeterminada, los tamaños de disco del controlador y del ejecutor se establecen en los niveles y tamaños de
standard. Puedes agregar propiedades para seleccionar niveles y tamaños depremium(en múltiplos de375 GiB).
Para obtener más información, consulta las propiedades de asignación de recursos.
Consulta Envía una carga de trabajo por lotes de Spark para configurar otros campos de la API de carga de trabajo por lotes.
Perfil de entorno de ejecución
Habilita Lightning Engine en un perfil de entorno de ejecución (plantilla de sesión)
Puedes usar la consola de Google Cloud , Google Cloud CLI o la API de Dataproc para habilitar Lightning Engine en un perfil de entorno de ejecución (plantilla de sesión) para una sesión de Jupyter o Spark Connect.
Console
Usa la consola de Google Cloud para habilitar Lightning Engine en un perfil de entorno de ejecución (plantilla de sesión):
En la consola de Google Cloud , ve a la página Perfiles de entorno de ejecución:
Haz clic en Crear para abrir la página Crear un perfil de entorno de ejecución.
Selecciona y completa los siguientes campos:
Nivel: Verifica que esté seleccionado Premium (predeterminado) y que esté seleccionada la opción Habilitar Lightning Engine para acelerar el rendimiento (seleccionada de forma predeterminada, lo que establece
spark.dataproc.engine=lightningEngine).Configuración adicional: Establece los siguientes parámetros de configuración de las propiedades de Spark y del entorno de ejecución:
Configuración del entorno de ejecución: Haz clic en Editar y verifica que la versión del entorno de ejecución de Spark esté configurada en
2.3y, luego, haz clic en Guardar.Otras personalizaciones: (opcional) Para seleccionar el entorno de ejecución de Native Query Execution, haz clic en Editar, haz clic en Agregar propiedad en Propiedades de Spark, ingresa el siguiente par de Clave (nombre de la propiedad) y Valor y, luego, haz clic en Guardar:
Clave Valor spark.dataproc.lightningEngine.runtimenative
Completa, selecciona o confirma otros parámetros de configuración del perfil de entorno de ejecución. Para obtener más información sobre la configuración del perfil de entorno de ejecución, consulta Crea un perfil de entorno de ejecución.
Haz clic en Crear.
gcloud
No puedes crear directamente una plantilla de sesión de Managed Service para Apache Spark
(perfil de entorno de ejecución) con
gcloud CLI. En su lugar, puedes usar el
comando gcloud beta dataproc session-templates import para importar una
plantilla de sesión existente, editar la plantilla importada para habilitar
Lightning Engine y, de forma opcional, el entorno de ejecución de consultas nativas, y, luego, exportar
la plantilla editada con el comando
gcloud beta dataproc session-templates export.
API
Para habilitar Lightning Engine en una plantilla de sesión (perfil de entorno de ejecución), como parte de tu
solicitud sessionTemplates.create, haz lo siguiente:
- Establece RuntimeConfig.version
en
2.3. - Agrega "dataproc.tier":"premium" y "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties.
Otro RuntimeConfig.properties:
- Motor de consultas nativo:
spark.dataproc.lightningEngine.runtime:native: Agrega esta propiedad a RuntimeConfig.properties para seleccionar el entorno de ejecución de Native Query Execution.
Para obtener más información sobre cómo configurar otros campos de la API de plantilla de sesión, consulta Crea un perfil de entorno de ejecución (plantilla de sesión).
Sesión interactiva
Habilita Lightning Engine en una sesión interactiva
Puedes usar Google Cloud CLI o la API de Dataproc para habilitar Lightning Engine en una sesión interactiva de Managed Service para Apache Spark. También puedes habilitar Lightning Engine en una sesión interactiva en un notebook de BigQuery Studio.
gcloud
Establece las siguientes marcas del comando
gcloud beta dataproc sessions create spark
de gcloud CLI para habilitar Lightning Engine en una sesión interactiva.
gcloud beta dataproc sessions create spark \ --project=PROJECT_ID \ --location=REGION \ --version=2.3 \ --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine \ OTHER_FLAGS_AS_NEEDED
Notas:
- PROJECT_ID: Es el ID del proyecto de Google Cloud . Los ID del proyecto se enumeran en la sección Información del proyecto en el panel de la consola de Google Cloud .
- REGION: Es una región de Compute Engine disponible para ejecutar la carga de trabajo.
--properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine. Estas propiedades habilitan Lightning Engine en la sesión.Otras propiedades:
- Motor de consultas nativo:
spark.dataproc.lightningEngine.runtime=native: Agrega esta propiedad para seleccionar el entorno de ejecución de la ejecución de consultas nativas.
- Motor de consultas nativo:
OTHER_FLAGS_AS_NEEDED: Consulta Crea una sesión interactiva.
API
Para habilitar Lightning Engine en una sesión, como parte de tu
solicitud sessions.create, haz lo siguiente:
- Establece RuntimeConfig.version
en
2.3. - Agrega "dataproc.tier":"premium" y "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties.
Otro RuntimeConfig.properties:
- Motor de consultas nativo:
spark.dataproc.lightningEngine.runtime:native: Agrega esta propiedad a RuntimeConfig.properties si quieres seleccionar el entorno de ejecución de Native Query Execution.
Consulta Crea una sesión interactiva para establecer otros campos de la API de plantilla de sesión.
Notebook de BigQuery
Puedes habilitar Lightning Engine cuando creas una sesión en un notebook de PySpark de BigQuery Studio.
from google.cloud.dataproc_spark_connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session
session = Session()
# Enable Lightning Engine.
session.runtime_config.properties["version"] = "2.3"
session.runtime_config.properties["dataproc.tier"] = "premium"
session.runtime_config.properties["spark.dataproc.engine"] = "lightningEngine"
# Enable THE Native Query Execution runtime.
session.runtime_config.properties["spark.dataproc.lightningEngine.runtime"] = "native"
# Create the Spark session.
spark = (
DataprocSparkSession.builder
.appName("APP_NAME")
.dataprocSessionConfig(session)
.getOrCreate())
# Add Spark application code here:
Verifica la configuración de Lightning Engine
Puedes usar la consola de Google Cloud , Google Cloud CLI o la API de Dataproc para verificar la configuración de Lightning Engine en una carga de trabajo por lotes, un perfil de entorno de ejecución (plantilla de sesión) o una sesión interactiva.
Carga de trabajo por lotes
Para verificar que el nivel del lote esté configurado como
premiumy que el motor esté configurado comoLightning Engine, haz lo siguiente:- Consola deGoogle Cloud : En la página Lotes, consulta las columnas Nivel y Motor del lote. Puedes hacer clic en el ID de lote para ver estos parámetros de configuración en la página de detalles del lote.
- gcloud CLI: Ejecuta el comando
gcloud dataproc batches describe. - API: Envía una solicitud
batches.get.
Perfil de entorno de ejecución
Para verificar que engine esté configurado como
Lightning Enginepara un perfil de entorno de ejecución (plantilla de sesión), haz lo siguiente:Consola deGoogle Cloud : En la página Perfiles de entorno de ejecución, haz clic en el nombre del perfil de entorno de ejecución para ver su configuración en la página de detalles del perfil de entorno de ejecución.
gcloud CLI: Ejecuta el comando
gcloud beta dataproc session-templates describe.API: Envía una solicitud
sessionTemplates.get.
Sesión interactiva
Para verificar que engine esté configurado como
Lightning Engineen una sesión interactiva, haz lo siguiente:Consola deGoogle Cloud : En la página Sesiones interactivas, consulta la columna Motor de la sesión. También puedes hacer clic en el ID de sesión interactiva para ver este parámetro de configuración en la página de detalles de la sesión.
gcloud CLI: Ejecuta el comando
gcloud beta dataproc sessions describe.API: Envía una solicitud
sessions.get.
Ejecución de consultas nativas
La ejecución de consultas nativas (NQE) es una función opcional de Lightning Engine que mejora el rendimiento a través de una implementación nativa basada en Apache Gluten y Velox que está diseñada para el hardware de Google.
El entorno de ejecución de Native Query Execution incluye la administración de la memoria unificada para el cambio dinámico entre la memoria fuera del montón y la memoria en el montón sin necesidad de realizar cambios en las configuraciones existentes de Spark. NQE incluye compatibilidad ampliada para operadores, funciones y tipos de datos de Spark, así como inteligencia para identificar automáticamente oportunidades de usar el motor nativo para operaciones de pushdown óptimas.
Identifica las cargas de trabajo de ejecución de consultas nativas
Usa la ejecución de consultas nativas en las siguientes situaciones:
APIs de DataFrame de Spark, APIs de Dataset de Spark y consultas en SQL de Spark que leen datos de archivos Parquet y ORC. El formato del archivo de salida no afecta el rendimiento de la ejecución de la consulta nativa.
Cargas de trabajo recomendadas por la herramienta de calificación de ejecución de consultas nativas.
No se recomienda la ejecución de consultas nativas para cargas de trabajo con entradas de los siguientes tipos de datos:
- Byte: ORC y Parquet
- Marca de tiempo: ORC
- Struct, Array, Map: Parquet
Limitaciones de la ejecución de consultas nativas
Habilitar la ejecución de consultas nativas en las siguientes situaciones puede causar excepciones, incompatibilidades de Spark o resguardo de la carga de trabajo al motor de Spark predeterminado.
Protocolos de contingencia
La ejecución de consultas nativas en la siguiente ejecución puede hacer que la carga de trabajo recurra al motor de ejecución de Spark, lo que genera una regresión o una falla.
ANSI: Si el modo ANSI está habilitado, la ejecución recurre a Spark.
Modo que distingue mayúsculas de minúsculas: La ejecución de consultas nativas solo admite el modo predeterminado de Spark que no distingue mayúsculas de minúsculas. Si se habilita el modo que distingue mayúsculas de minúsculas, pueden producirse resultados incorrectos.
Análisis de tablas particionadas: La ejecución de consultas nativas admite el análisis de tabla particionada solo cuando la ruta contiene la información de la partición; de lo contrario, la carga de trabajo vuelve al motor de ejecución de Spark.
Comportamiento incompatible
Se puede producir un comportamiento incompatible o resultados incorrectos cuando se usa la ejecución de consultas nativas en los siguientes casos:
Funciones JSON: La ejecución de consultas nativas admite cadenas rodeadas por comillas dobles, no comillas simples. Se producen resultados incorrectos con comillas simples. Si usas "*" en la ruta de acceso con la función
get_json_object, se muestraNULL.Configuración de lectura de Parquet:
- La ejecución de consultas nativas trata
spark.files.ignoreCorruptFilescomo si estuviera configurado en el valor predeterminadofalse, incluso cuando se establece entrue. - La ejecución de consultas nativas ignora
spark.sql.parquet.datetimeRebaseModeInReady devuelve solo el contenido del archivo Parquet. No se consideran las diferencias entre el calendario híbrido heredado (juliano gregoriano) y el calendario gregoriano proléptico. Los resultados de Spark pueden variar.
- La ejecución de consultas nativas trata
NaN: No compatible. Pueden producirse resultados inesperados, por ejemplo, cuando se usaNaNen una comparación numérica.Lectura de columnas de Spark: Se puede producir un error fatal debido a que el vector de columnas de Spark no es compatible con la ejecución de consultas nativas.
Desbordamiento: Cuando las particiones de redistribución se establecen en un número grande, la función de desbordamiento en el disco puede activar un
OutOfMemoryException. Si esto ocurre, reducir la cantidad de particiones puede eliminar esta excepción.