Usa Lightning Engine

Lightning Engine es la nueva generación de rendimiento de Apache Spark, que presenta mejoras exclusivas diseñadas para ofrecer mejoras sustanciales en el rendimiento, la rentabilidad y la estabilidad operativa.

Beneficios

Los beneficios de Lightning Engine incluyen lo siguiente:

  • Operaciones de datos aceleradas: Logra ganancias de rendimiento significativas y ahorros de costos a través de optimizaciones en la interacción de Cloud Storage, incluido el manejo de metadatos, las cargas de trabajo de escritura y la E/S vectorizada.

  • Ejecución de consultas inteligentes: Aprovecha las mejoras avanzadas del optimizador que reducen de forma dinámica los datos analizados, optimizan el procesamiento de datos y generan planes de ejecución más eficientes para consultas más rápidas y rentables.

  • Cargas de trabajo de IA y AA optimizadas: Reduce los tiempos de inicio del clúster para las cargas de trabajo basadas en GPU y simplifica la implementación en entornos seguros con imágenes nativas de IA y AA.

Si bien Lightning Engine ofrece ganancias de rendimiento sustanciales, el impacto específico varía según la carga de trabajo. Es más adecuado para tareas que requieren mucha capacidad de procesamiento y que aprovechan las APIs de Dataframe de Spark, las APIs de Dataset de Spark y las consultas de Spark SQL, en lugar de las operaciones vinculadas a la E/S.

Comparación con el motor estándar

Lightning Engine es una alternativa al motor estándar que se usa para ejecutar trabajos de Spark en un clúster de Managed Service para Apache Spark. En la siguiente tabla, se compara Lightning Engine con las propiedades de activación del motor estándar, la aplicabilidad de la carga de trabajo y los beneficios clave.

Función Motor estándar Lightning Engine
Propiedad de activación --engine=default o anula la marca --engine=lightning
Ideal para Trabajos, desarrollo y pruebas de uso general Cargas de trabajo a nivel empresarial que requieren una aceleración significativa
Beneficios clave Rendimiento de modelo de referencia Interacción optimizada de Cloud Storage, ejecución de consultas inteligentes

Requisitos

Se aplican los siguientes requisitos a la función Lightning Engine:

  • Versión de la imagen: Lightning Engine se debe usar con Managed Service para Apache Spark versión de imagen 2.3.3 o posterior.
  • Trabajos compatibles: Se admiten Spark, PySpark, SparkSQL y SparkR. El motor estándar se ejecutará en otros tipos de trabajos enviados a un clúster de Lightning Engine.

Ejecución de consultas nativa

La ejecución de consultas nativa (NQE) es un componente opcional de Lightning Engine que proporciona un nivel más profundo de aceleración para trabajos específicos. Es un motor nativo basado en Apache Gluten y Velox, optimizado para el hardware de Google, que mejora el rendimiento mediante la ejecución de partes de una consulta de Spark fuera de la JVM.

Se recomienda NQE para:
Tareas que requieren mucha capacidad de procesamiento (en lugar de operaciones vinculadas a la E/S) que aprovechan las APIs de Dataframe de Spark, las APIs de Dataset de Spark y las consultas de Spark SQL que leen datos de archivos Parquet y ORC. El formato del archivo de salida no afecta su rendimiento.
No se recomienda NQE para:
Trabajos que dependen en gran medida de conjuntos de datos distribuidos resistentes (RDDs), funciones definidas por el usuario (UDFs) o la mayoría de las bibliotecas de aprendizaje automático (AA) de Spark.

Requisitos

Se aplican los siguientes requisitos a la función de ejecución de consultas nativa:

  • Motor de ejecución: NQE solo está disponible en clústeres habilitados con el motor Lightning durante la creación del clúster.

  • Sistema operativo: Solo se admiten imágenes Debian-12. Los trabajos habilitados para NQE que usen cualquier otro SO fallarán.

  • Trabajos compatibles: Se admiten Spark, PySpark, SparkSQL y SparkR. El motor estándar se ejecutará (sin NQE) en otros tipos de trabajos enviados a un clúster de Lightning Engine.

  • Tipos de máquinas: Solo se admiten familias de máquinas que usan procesadores Intel o AMD. Los trabajos habilitados para NQE que usen procesadores ARM fallarán (pero pueden beneficiarse de Lightning Engine sin NQE).

  • Sin GPUs ni aceleradores: Los trabajos habilitados para NQE enviados en aceleradores de GPU fallarán (pero pueden beneficiarse de Lightning Engine sin NQE).

  • Tipos de datos: No se admiten las entradas de los siguientes tipos de datos:

    • Byte: ORC y Parquet
    • Struct, Array, Map: Parquet

Precios

Para obtener información sobre los precios, consulta Precios de Managed Service para Apache Spark en Compute Engine.

Crea un clúster de Lightning Engine

En esta sección, se muestra cómo crear un clúster de Managed Service para Apache Spark que habilite Lightning Engine en los trabajos de Spark enviados al clúster.

También puedes habilitar la ejecución de consultas nativa (NQE) en el clúster cuando creas el clúster o habilitar NQE más adelante para trabajos de Spark específicos enviados al clúster.

Antes de comenzar

  1. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that you have the permissions required to complete this guide.

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. Instala Google Cloud CLI.

  7. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  8. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  9. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that you have the permissions required to complete this guide.

  11. Verify that billing is enabled for your Google Cloud project.

  12. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  13. Instala Google Cloud CLI.

  14. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  15. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init

Roles obligatorios

Se requieren ciertos roles de IAM para crear un clúster de Managed Service para Apache Spark y enviar trabajos al clúster. Según las políticas de la organización, es posible que ya se hayan otorgado estos roles. Para verificar las concesiones de roles, consulta ¿Necesitas otorgar roles?.

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Roles de usuario

Para obtener los permisos que necesitas para crear un clúster de Managed Service para Apache Spark, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Rol de cuenta de servicio

Para garantizar que la cuenta de servicio predeterminada de Compute Engine tenga los permisos necesarios para crear un clúster de Managed Service para Apache Spark, pídele a tu administrador que otorgue el rol de IAM de trabajador de Managed Service para Apache Spark (roles/dataproc.worker) a la cuenta de servicio predeterminada de Compute Engine en el proyecto.

Crea el clúster

En los siguientes ejemplos, se muestra cómo crear un clúster de Lightning Engine con la Google Cloud consola, Google Cloud CLI, la API de Dataproc, Python o Terraform. También puedes crear un clúster de Managed Service para Apache Spark con Lightning Engine habilitado con las bibliotecas cliente de Go, Java y Node.js.

Console

  1. En la Google Cloud consola de, ve a Crea un clúster de Apache Spark en Compute Engine. Para obtener más información, consulta Crea un clúster con la Google Cloud consola.

    Ir a Crea un clúster de Apache Spark en Compute Engine

  2. En Define tu clúster, selecciona la casilla de verificación Habilitar Lightning Engine para crear un clúster con Lightning Engine habilitado.

  3. Opcional: Para habilitar el entorno de ejecución nativo de forma predeterminada para los trabajos de Spark, selecciona la casilla de verificación Habilitar la ejecución nativa.

  4. Establece otras opciones de configuración del clúster según sea necesario.

  5. Haz clic en Crear.

gcloud CLI

  1. Para crear un clúster con Lightning Engine habilitado, ejecuta el comando gcloud dataproc clusters create con la marca --engine=lightning. Para obtener más información, consulta Crea un clúster con gcloud CLI.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --engine=lightning \
        --image-version=2.3
    
  2. Opcional: Para habilitar el entorno de ejecución nativo de forma predeterminada para los trabajos de Spark, incluye la propiedad spark:spark.dataproc.lightningEngine.runtime=native.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --engine=lightning \
        --image-version=2.3 \
        --properties='spark:spark.dataproc.lightningEngine.runtime=native'
    

API

Para crear un clúster con Lightning Engine habilitado, envía una solicitud clusters.create. Para obtener más información, consulta Crea un clúster con la API de REST.

  1. En el cuerpo de la solicitud, establece el engine campo en LIGHTNING.

    {
      "projectId": "PROJECT_ID",
      "clusterName": "CLUSTER_NAME",
      "config": {
        "gceClusterConfig": {},
        "softwareConfig": {
          "imageVersion": "2.3"
        }
      },
      "engine": "LIGHTNING"
    }
    
  2. Opcional: Para habilitar el entorno de ejecución nativo de forma predeterminada para todos los trabajos, incluye la propiedad spark:spark.dataproc.lightningEngine.runtime.

    {
      "projectId": "PROJECT_ID",
      "clusterName": "CLUSTER_NAME",
      "config": {
        "gceClusterConfig": {},
        "softwareConfig": {
          "imageVersion": "2.3",
          "properties": {
            "spark:spark.dataproc.lightningEngine.runtime": "native"
          }
        }
      },
      "engine": "LIGHTNING"
    }
    

Python

  1. Para crear un clúster con Lightning Engine habilitado, usa el método create_cluster y establece el campo engine en la configuración del clúster en LIGHTNING. Para obtener más información, consulta Crea un clúster con Python.

    from google.cloud import dataproc_v1
    
    def create_lightning_cluster(project_id, region, cluster_name):
        client_options = {"api_endpoint": f"{region}-dataproc.googleapis.com:443"}
        cluster_client = dataproc_v1.ClusterControllerClient(client_options=client_options)
    
        cluster = {
            "project_id": project_id,
            "cluster_name": cluster_name,
            "config": {
                "engine": "LIGHTNING",
                "software_config": {
                    "image_version": "2.3-debian12",
                },
            }
        }
    
        operation = cluster_client.create_cluster(
            project_id=project_id,
            region=region,
            cluster=cluster
        )
        result = operation.result()
        print(f"Cluster created successfully: {result.cluster_name}")
    
  2. Opcional: Para habilitar el entorno de ejecución nativo de forma predeterminada para los trabajos de Spark, incluye la propiedad spark:spark.dataproc.lightningEngine.runtime.

    from google.cloud import dataproc_v1
    
    def create_lightning_native_cluster(project_id, region, cluster_name):
        client_options = {"api_endpoint": f"{region}-dataproc.googleapis.com:443"}
        cluster_client = dataproc_v1.ClusterControllerClient(client_options=client_options)
    
        cluster = {
            "project_id": project_id,
            "cluster_name": cluster_name,
            "config": {
                "engine": "LIGHTNING",
                "software_config": {
                    "image_version": "2.3-debian12",
                    "properties": {
                        "spark:spark.dataproc.lightningEngine.runtime": "native"
                    }
                }
            }
        }
    
        operation = cluster_client.create_cluster(
            project_id=project_id,
            region=region,
            cluster=cluster
        )
        result = operation.result()
        print(f"Cluster created successfully: {result.cluster_name}")
    

Terraform

  1. En la configuración del recurso google_dataproc_cluster, establece el argumento engine en LIGHTNING.
  2. Para obtener más detalles y opciones avanzadas, consulta la documentación oficial de Terraform para el google_dataproc_cluster recurso.

Verifica el motor del clúster

Console

  1. En la Google Cloud consola de, ve a la página Detalles del clúster.
  2. Verifica que el valor Lightning Engine aparezca en el campo Motor.
  3. Si habilitaste la ejecución de consultas nativa, verifica que native aparezca en el campo Ejecución nativa.

gcloud

  1. Para verificar el motor y NQE (si está habilitado), ejecuta el comando gcloud dataproc clusters describe:

    gcloud dataproc clusters describe CLUSTER_NAME --project=PROJECT_ID --region=REGION
    
  2. Verifica el resultado de las propiedades engine y lightningEngine.runtime:

    clusterName: lightning-engine-cluster
    engine: lightningEngine
    lightningEngine.runtime: native
    

Envía un trabajo con Lightning Engine

Después de crear un clúster de Lightning Engine, cuando envías un trabajo de Spark al clúster, Lightning Engine se habilita automáticamente en el trabajo.

Habilita la ejecución de consultas nativa para un trabajo

Si habilitaste la ejecución de consultas nativa (NQE) cuando creaste un clúster de Lightning Engine, todos los trabajos de Spark se ejecutarán con NQE habilitado, a menos que inhabilite NQE en un trabajo específico.

Si no habilitaste NQE cuando creaste el clúster de Lightning Engine, puedes habilitar NQE para un trabajo específico cuando lo envíes, como se muestra en los siguientes ejemplos.

gcloud

Para habilitar la ejecución de consultas nativa cuando envías un trabajo de Spark, incluye la propiedad spark.dataproc.lightningEngine.runtime=native:

```none
gcloud dataproc jobs submit spark \
    --cluster=CLUSTER_NAME \
    --region=REGION \
    --properties=spark.dataproc.lightningEngine.runtime=native \
    -- ...
```

API

Para habilitar la ejecución de consultas nativa cuando envías un trabajo de Spark, incluye la propiedad spark.dataproc.lightningEngine.runtime en tu solicitud:

```json
{
  "job":{
    "placement":{
      "clusterName": ...
    },
    "sparkJob":{
      "mainClass": ...,
      "properties":{
         "spark.dataproc.lightningEngine.runtime":"native"
      }
    }
  }
}
```

Inhabilita la ejecución de consultas nativa para un trabajo

Si habilitaste la ejecución de consultas nativa (NQE) cuando creaste un clúster de Lightning Engine, todos los trabajos de Spark se ejecutarán con NQE habilitado, a menos que inhabilite NQE en un trabajo específico.

Puedes inhabilitar NQE para un trabajo de Spark específico cuando lo envíes, como se muestra en los siguientes ejemplos.

gcloud

Para inhabilitar la ejecución de consultas nativa cuando envías un trabajo de Spark, a un clúster de Lightning Engine, incluye la propiedad spark.dataproc.lightningEngine.runtime=default:

```shell
gcloud dataproc jobs submit spark \
    --cluster=CLUSTER_NAME \
    --region=REGION \
    --properties=spark.dataproc.lightningEngine.runtime=default \
    -- ...
```

API

Para inhabilitar la ejecución de consultas nativa cuando envías un trabajo de Spark, a un clúster de Lightning Engine, incluye la propiedad spark.dataproc.lightningEngine.runtime=default:

```json
{
  "job":{
    "placement":{
      "clusterName": ...
    },
    "sparkJob":{
      "mainClass": ...,
      "properties":{
         "spark.dataproc.lightningEngine.runtime":"default"
      }
    }
  }
}
```

Verifica la ejecución de consultas nativa para un trabajo

Después de enviar un trabajo a un clúster de Lightning Engine, puedes verificar que la ejecución de consultas nativa esté habilitada para el trabajo.

Console

  1. En la Google Cloud consola de, ve a la página Detalles del trabajo.
  2. Verifica que native aparezca en el campo Ejecución nativa.

gcloud

  1. Ejecuta el comando gcloud dataproc jobs describe:

    gcloud dataproc clusters describe JOB_ID --project=PROJECT_ID --region=REGION
    
  2. Verifica el resultado de lightningEngine.runtime en la Propiedades sección:

    lightningEngine.runtime: native
    

Parámetros de configuración

En la siguiente tabla, se resumen los parámetros de configuración principales para Lightning Engine y la ejecución de consultas nativa.

Nombre del parámetro Descripción Motores aplicables Valor predeterminado Valor predeterminado (Lightning Engine) Anulable por el usuario (nivel de trabajo) Alcance
--engine Es un parámetro de configuración a nivel del clúster para seleccionar el motor durante la creación del clúster. En todo el clúster default lightning No Clúster
spark:spark.dataproc.lightningEngine.runtime Es un parámetro de configuración a nivel del clúster para seleccionar el entorno de ejecución del motor Lightning durante la creación del clúster. Solo Lightning default default No Clúster
spark.dataproc.lightningEngine.runtime Habilita o inhabilita la ejecución de consultas nativa (NQE) dentro de Lightning Engine. Solo Lightning default default Sí. Se puede establecer en native o default. Trabajo

Limitaciones

Habilitar la ejecución de consultas nativa en los siguientes casos puede causar excepciones, incompatibilidades de Spark o la reversión de la carga de trabajo al motor de Spark predeterminado.

Protocolos de contingencia

La ejecución de consultas nativa en los siguientes casos puede generar una reversión de la carga de trabajo al motor de ejecución de Spark:

  • ANSI: Si el modo ANSI está habilitado, la ejecución vuelve a Spark.
  • Modo sensible a mayúsculas y minúsculas: La ejecución de consultas nativa solo admite el modo predeterminado de Spark que no distingue mayúsculas de minúsculas. Si el modo sensible a mayúsculas y minúsculas está habilitado, pueden producirse resultados incorrectos.
  • Análisis de tablas particionadas: La ejecución de consultas nativa admite el análisis de tablas particionadas 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

Puede ocurrir un comportamiento incompatible o resultados incorrectos cuando usas la ejecución de consultas nativa en los siguientes casos:

  • Funciones JSON: La ejecución de consultas nativa admite cadenas entre comillas dobles, no comillas simples. Se producen resultados incorrectos con comillas simples. El uso de * en la ruta de acceso con la función get_json_object muestra NULL.
  • Configuración de lectura de Parquet:
    • La ejecución de consultas nativa trata spark.files.ignoreCorruptFiles como si estuviera configurado en el valor predeterminado false, incluso cuando se establece en true.
    • La ejecución de consultas nativa ignora spark.sql.parquet.datetimeRebaseModeInRead y solo muestra el contenido del archivo Parquet. No se consideran las diferencias entre el calendario híbrido heredado y el calendario gregoriano proléptico. Los resultados de Spark pueden diferir.
  • NaN: no admitido. Pueden producirse resultados inesperados, por ejemplo, cuando usas NaN en una comparación numérica.
  • Lectura columnar de Spark: Puede ocurrir un error fatal porque el vector columnar de Spark no es compatible con la ejecución de consultas nativa.
  • Desbordamiento: Cuando estableces particiones de orden aleatorio en un número grande, la función de desbordamiento en disco puede activar un OutOfMemoryException. Si esto ocurre, reducir la cantidad de particiones puede eliminar esta excepción.

¿Qué sigue?