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
Estos son algunos de los beneficios de Lightning Engine:
Operaciones de datos aceleradas: Logra importantes aumentos en el rendimiento y ahorros de costos a través de optimizaciones en la interacción con el almacenamiento en la nube, incluido el manejo de metadatos, las cargas de trabajo de escritura y la E/S vectorizada.
Ejecución inteligente de consultas: 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 optimizadas para la IA.
Si bien Lightning Engine ofrece mejoras significativas en el rendimiento, 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 comparan las propiedades de activación del motor, la aplicabilidad de la carga de trabajo y los beneficios clave de Lightning Engine con los del motor estándar.
| Función | Motor estándar | Lightning Engine |
|---|---|---|
| Marca de CLI | --engine=default o anula la marca |
--engine=lightning |
| Ideal para | Trabajos de uso general, desarrollo y pruebas | Cargas de trabajo a escala empresarial que requieren una aceleración significativa |
| Beneficios clave | Rendimiento de modelo de referencia | Interacción optimizada con el almacenamiento en la nube y ejecución inteligente de consultas |
Requisitos
Se aplican los siguientes requisitos a la función de Lightning Engine:
- Versión de la imagen: Lightning Engine se debe usar con la versión de imagen
2.3.3o posterior de Managed Service para Apache Spark. - Trabajos admitidos: Se admiten Spark, PySpark, SparkSQL y SparkR. El motor estándar se ejecuta en otros tipos de trabajos enviados a un clúster de Lightning Engine.
Ejecución de consultas nativas
La ejecución de consultas nativas (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 ejecutando partes de una consulta de Spark fuera de la JVM.
- Se recomienda la NQE para las siguientes situaciones:
- Tareas que requieren mucha capacidad de procesamiento y que aprovechan las APIs de DataFrame de Spark y las APIs de Dataset de Spark, y 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 la NQE para los siguientes casos:
- Trabajos que dependen en gran medida de los conjuntos de datos distribuidos resilientes (RDD), las funciones definidas por el usuario (UDF), la mayoría de las bibliotecas de aprendizaje automático (AA) de Spark y las operaciones vinculadas a la E/S con retrasos debido al acceso al almacenamiento
Requisitos
Se aplican los siguientes requisitos a la función de ejecución de consultas nativas:
Motor de ejecución: NQE solo está disponible en los clústeres habilitados con el motor Lightning durante la creación del clúster.
Sistema operativo: Solo se admiten los sistemas operativos
Debian-12yUbuntu-22. Los trabajos habilitados para NQE que usen cualquier otro SO fallarán.Trabajos admitidos: 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 las familias de máquinas que usan procesadores Intel o AMD. Los trabajos habilitados para NQE que usan procesadores ARM fallarán (pero pueden beneficiarse de Lightning Engine sin NQE).
Sin GPUs ni aceleradores: Los trabajos habilitados para NQE que se envíen en aceleradores de GPU fallarán (pero pueden beneficiarse de Lightning Engine sin NQE).
Tipos de datos: No se admiten entradas de los siguientes tipos de datos:
- Byte: ORC y Parquet
- Struct, Array, Map: Parquet
Precios
Para obtener información sobre los precios, consulta los precios de Managed Service para Apache Spark.
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 nativas (NQE) en el clúster cuando lo creas o habilitar la NQE más adelante para trabajos específicos de Spark enviados al clúster.
Antes de comenzar
- Accede a tu cuenta de Google Cloud . 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 a él. Según las políticas de la organización, es posible que el propietario de un proyecto de Cloud o el administrador de servicios ya te hayan otorgado estos roles a ti o a una cuenta de servicio. Para verificar las asignaciones 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:
-
Todos:
- Editor de Dataproc (
roles/dataproc.editor) en el proyecto - Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio predeterminada de Compute Engine
- Editor de Dataproc (
Rol de la cuenta de servicio
Para asegurarte de que la cuenta de servicio predeterminada de Compute Engine tenga los permisos necesarios para crear un clúster de Managed Service for Apache Spark, pídele a tu administrador que otorgue el rol de IAM de trabajador de Dataproc (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 consola de Google Cloud , Google Cloud CLI, la API de Dataproc, las bibliotecas cliente de Cloud para Python o Terraform. También puedes crear un clúster con Lightning Engine habilitado con las bibliotecas cliente de Cloud de Go, Java y Node.js.
Console
- Abre la página Crear clúster.
- Haz clic en Configuración adicional para expandir esa sección.
- Edita Personalización y otros.
- En el panel que se abre, confirma que la casilla de verificación Habilitar Lightning Engine esté seleccionada.
- Opcional: Para habilitar el tiempo de ejecución de la ejecución nativa de forma predeterminada para los trabajos de Spark, selecciona la casilla de verificación Habilitar ejecución nativa.
- Haz clic en Guardar.
- Establece otros parámetros de configuración del clúster según sea necesario.
- Haga clic en Crear clúster.
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 cómo crear un clúster con la CLI de gcloud.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 cómo crear un clúster con la API de REST.
En el cuerpo de la solicitud, configura el campo
enginecomoLIGHTNING.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } } }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": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3", "properties": { "spark:spark.dataproc.lightningEngine.runtime": "native" } } } }
Python
Para crear un clúster con Lightning Engine habilitado, usa el método
create_clustery configura el campoengineen la configuración del clúster comoLIGHTNING. Para obtener más información, consulta cómo crear 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 de tu recurso
google_dataproc_cluster, establece el argumentoengineenLIGHTNING. - Para obtener más detalles y opciones avanzadas, consulta la documentación oficial de Terraform para el recurso
google_dataproc_cluster.
Verifica el motor del clúster
Console
- En la consola de Google Cloud , ve a la página Detalles del clúster.
- Verifica que el valor de
Lightning Engineaparezca en el campo Motor. - Si habilitaste la ejecución de consultas nativas, verifica que
nativeaparezca en el campo Ejecución nativa.
gcloud
Para verificar el motor y la NQE (si está habilitada), 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
Si habilitaste Lightning Engine cuando creaste un clúster, cuando envíes un trabajo de Spark al clúster, Lightning Engine estará habilitado de forma predeterminada en el trabajo.
Habilita la ejecución de consultas nativas para un trabajo
Si habilitaste la ejecución de consultas nativas (NQE) cuando creaste un clúster de Lightning Engine, todos los trabajos de Spark se ejecutarán con la NQE habilitada, a menos que inhabilite la NQE en un trabajo específico.
Si no habilitaste NQE cuando creaste el clúster de Lightning Engine, puedes habilitar NQE para un trabajo cuando lo envíes, como se muestra en los siguientes ejemplos.
gcloud
Para habilitar la ejecución de consultas nativas cuando envíes un trabajo de Spark, incluye la propiedad spark.dataproc.lightningEngine.runtime=native:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=native \
-- ...
API
Para habilitar la ejecución de consultas nativas cuando envíes un trabajo de Spark, incluye la propiedad spark.dataproc.lightningEngine.runtime en tu solicitud:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"native"
}
}
}
}
Inhabilita la ejecución de consultas nativas para un trabajo
Si habilitaste la ejecución de consultas nativas (NQE) cuando creaste un clúster de Lightning Engine, todos los trabajos de Spark se ejecutarán con la NQE habilitada, a menos que la inhabilite en un trabajo específico.
Puedes inhabilitar la NQE para un trabajo de Spark específico cuando envíes el trabajo, como se muestra en los siguientes ejemplos.
gcloud
Para inhabilitar la ejecución de consultas nativas cuando envías un trabajo de Spark a un clúster de Lightning Engine, incluye la propiedad spark.dataproc.lightningEngine.runtime=default:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=default \
-- ...
API
Para inhabilitar la ejecución de consultas nativas cuando envías un trabajo de Spark a un clúster de Lightning Engine, incluye la propiedad spark.dataproc.lightningEngine.runtime=default:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"default"
}
}
}
}
Verifica la ejecución de consultas nativas para un trabajo
Después de enviar un trabajo a un clúster de Lightning Engine, puedes verificar que la ejecución de consultas nativas esté habilitada para el trabajo.
Console
- En la consola de Google Cloud , ve a la página Trabajos.
- Haz clic en el ID del trabajo para abrir 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 jobs describe JOB_ID --project=PROJECT_ID --region=REGIONVerifica el resultado de
lightningEngine.runtimeen la sección Propiedades:lightningEngine.runtime: native
Parámetros de configuración
En la siguiente tabla, se resumen los principales parámetros de configuración de Lightning Engine y Native Query Execution.
| Nombre del parámetro | Descripción | Motores aplicables | Valor predeterminado | Valor predeterminado (Lightning Engine) | Se puede anular el usuario (a nivel del 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 tiempo de ejecución del motor de 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 nativas (NQE) en Lightning Engine. | Solo Lightning | default |
default |
Sí. Se puede establecer en native o default. |
Trabajo |
Limitaciones
Habilitar la ejecución de consultas nativas en las siguientes situaciones puede provocar excepciones, incompatibilidades con Spark o que la carga de trabajo recurra al motor de Spark predeterminado.
Resguardos
La ejecución de consultas nativas en las siguientes situaciones puede hacer que una carga de trabajo recurra al motor de ejecución de Spark:
- ANSI: Si el modo ANSI está habilitado, la ejecución se revierte 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 el modo sensible a mayúsculas y minúsculas está habilitado, se pueden producir resultados incorrectos.
- Análisis de tablas particionadas: La ejecución de consultas nativas admite el análisis de tablas particionadas solo cuando la ruta contiene la información de partición. De lo contrario, la carga de trabajo recurre al motor de ejecución de Spark.
Comportamiento incompatible
Se puede producir un comportamiento incompatible o resultados incorrectos cuando usas la ejecución de consultas nativas en los siguientes casos:
- Funciones JSON: La ejecución de consultas nativas admite cadenas entre comillas dobles, no comillas simples. Los resultados incorrectos se producen con comillas simples. Usar
*en la ruta de acceso con la funciónget_json_objectdevuelveNULL. - 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 solo devuelve 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 variar.
- La ejecución de consultas nativas trata
- NaN: No se admite. Por ejemplo, pueden producirse resultados inesperados cuando usas
NaNen una comparación numérica. - Lectura columnar de Spark: Se puede producir un error grave porque el vector columnar de Spark es incompatible con la ejecución de consultas nativas.
- Desbordamiento: Cuando estableces una gran cantidad de particiones de aleatorización, la función de desbordamiento en disco puede activar un
OutOfMemoryException. Si esto ocurre, reducir la cantidad de particiones puede eliminar esta excepción.