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.3o 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
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
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:
-
Editor de Managed Service para Apache Spark (
roles/dataproc.editor) en el proyecto -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio predeterminada de Compute Engine
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
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.
En Define tu clúster, selecciona la casilla de verificación Habilitar Lightning Engine para crear un clúster con Lightning Engine habilitado.
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.
Establece otras opciones de configuración del clúster según sea necesario.
Haz clic en Crear.
gcloud CLI
Para crear un clúster con Lightning Engine habilitado, ejecuta el comando
gcloud dataproc clusters createcon 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.3Opcional: 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.
En el cuerpo de la solicitud, establece el
enginecampo enLIGHTNING.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } }, "engine": "LIGHTNING" }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
Para crear un clúster con Lightning Engine habilitado, usa el método
create_clustery establece el campoengineen la configuración del clúster enLIGHTNING. 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}")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
- En la configuración del recurso
google_dataproc_cluster, establece el argumentoengineenLIGHTNING. - Para obtener más detalles y opciones avanzadas, consulta la documentación oficial de Terraform
para el
google_dataproc_clusterrecurso.
Verifica el motor del clúster
Console
- En la Google Cloud consola de, ve a la página Detalles del clúster.
- Verifica que el valor
Lightning Engineaparezca en el campo Motor. - Si habilitaste la ejecución de consultas nativa, verifica que
nativeaparezca en el campo Ejecución nativa.
gcloud
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=REGIONVerifica el resultado de las propiedades
engineylightningEngine.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
- En la Google Cloud consola de, ve a la página Detalles del trabajo.
- Verifica que
nativeaparezca en el campo Ejecución nativa.
gcloud
Ejecuta el comando
gcloud dataproc jobs describe:gcloud dataproc clusters describe JOB_ID --project=PROJECT_ID --region=REGIONVerifica el resultado de
lightningEngine.runtimeen 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ónget_json_objectmuestraNULL. - Configuración de lectura de Parquet:
- La ejecución de consultas nativa trata
spark.files.ignoreCorruptFilescomo si estuviera configurado en el valor predeterminadofalse, incluso cuando se establece entrue. - La ejecución de consultas nativa ignora
spark.sql.parquet.datetimeRebaseModeInReady 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.
- La ejecución de consultas nativa trata
- NaN: no admitido. Pueden producirse resultados inesperados, por ejemplo, cuando usas
NaNen 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.