Acelera las cargas de trabajo y las sesiones por lotes de Spark con Lightning Engine

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ón 3.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.

  1. En la consola de Google Cloud :

    1. Ir a los lotes de Managed Service para Apache Spark.
    2. Haz clic en Crear para abrir la página Crear lote.
  2. Selecciona y completa los siguientes campos:

    • Contenedor:
      • Versión del entorno de ejecución: Selecciona 2.3.
    • 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 a 3.0.

      Puedes configurar el nivel de disco del controlador y el nivel de disco del ejecutor en Premium o dejarlos en su valor de nivel Standard predeterminado. 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.

    • Propiedades: Opcional: Ingresa el siguiente par Key (nombre de la propiedad) y Value si deseas seleccionar el entorno de ejecución de Native Query Execution:

      Clave Valor
      spark.dataproc.lightningEngine.runtime nativo/nativa/indígena/aborigen

  3. 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.

  4. 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=lightningEngine selecciona Lightning Engine para la carga de trabajo por lotes.
    • spark.dataproc.driver.compute.tier y spark.dataproc.executor.compute.tier se establecen en premium (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 a 3.0.
  • Otras propiedades

    • Motor de consultas nativo: spark.dataproc.lightningEngine.runtime=native Agrega 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 de premium (en múltiplos de 375 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=lightningEngine selecciona Lightning Engine para la carga de trabajo por lotes.
    • spark.dataproc.driver.compute.tier y spark.dataproc.executor.compute.tier se establecen en premium (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 a 3.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 de premium (en múltiplos de 375 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):

  1. En la consola de Google Cloud , ve a la página Perfiles de entorno de ejecución:

    Ir a Perfiles de entorno de ejecución

  2. Haz clic en Crear para abrir la página Crear un perfil de entorno de ejecución.

  3. 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.3 y, 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.runtime native

  4. 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.

  5. 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:

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.
  • 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:

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 premium y que el motor esté configurado como Lightning 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 Engine para 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 Engine en 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 muestra NULL.

  • Configuración de lectura de Parquet:

    • La ejecución de consultas nativas trata spark.files.ignoreCorruptFiles como si estuviera configurado en el valor predeterminado false, incluso cuando se establece en true.
    • La ejecución de consultas nativas ignora spark.sql.parquet.datetimeRebaseModeInRead y 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.
  • NaN: No compatible. Pueden producirse resultados inesperados, por ejemplo, cuando se usa NaN en 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.