Usar o Lightning Engine
O Lightning Engine é um ambiente de execução de alto desempenho para o Apache Spark no Serviço Gerenciado para Apache Spark que acelera cargas de trabalho com uso intensivo de computação e reduz os custos de execução sem exigir mudanças no código do Spark. Ele foi projetado para engenheiros de dados e profissionais de análise que executam cargas de trabalho com uso intensivo de computação que usam APIs Spark DataFrame, APIs Spark Dataset ou consultas Spark SQL.
Vantagens
Os benefícios do Lightning Engine incluem:
Operações de dados aceleradas: tenha ganhos significativos de desempenho e redução de custos com otimizações na interação com o armazenamento em nuvem, incluindo processamento de metadados, cargas de trabalho de gravação e E/S vetorial.
Execução inteligente de consultas: aproveite as melhorias avançadas do otimizador que reduzem dinamicamente os dados verificados, otimizam o processamento de dados e geram planos de execução mais eficientes para consultas mais rápidas e econômicas.
Cargas de trabalho de IA e ML simplificadas: reduza os tempos de inicialização do cluster para cargas de trabalho baseadas em GPU e simplifique a implantação em ambientes seguros usando imagens otimizadas para IA.
Embora o Lightning Engine ofereça ganhos de desempenho substanciais, o impacto específico varia de acordo com a carga de trabalho.
Comparação com o mecanismo padrão
O Lightning Engine é uma alternativa ao mecanismo padrão usado para executar jobs do Spark em um cluster do Serviço Gerenciado para Apache Spark. A tabela a seguir compara o Lightning Engine com as propriedades de ativação do mecanismo padrão, a aplicabilidade da carga de trabalho e os principais benefícios.
| Recurso | Mecanismo padrão | Lightning Engine |
|---|---|---|
| Sinalização da CLI | --engine=default ou desativar a sinalização |
--engine=lightning |
| Ideal para | Jobs de uso geral, desenvolvimento e teste | Cargas de trabalho de grande porte que exigem aceleração significativa |
| Principais benefícios | Desempenho referencial | Interação otimizada com o armazenamento em nuvem, execução inteligente de consultas |
Requisitos do Lightning Engine
Os seguintes requisitos se aplicam ao recurso Lightning Engine:
- Versão da imagem: o Lightning Engine precisa ser usado com
a versão de imagem
2.3.3do Serviço Gerenciado para Apache Spark e as versões de imagem subminor2.3mais recentes, ou as versões de imagem subminor3.0.2e mais recentes3.0(imagensdebian13eubuntu24). - Jobs compatíveis: Spark, PySpark, SparkSQL e SparkR. O mecanismo padrão é executado em outros tipos de serviço enviados para um cluster do Lightning Engine.
Execução de consulta nativa
A execução de consulta nativa (NQE, na sigla em inglês) é um componente opcional do Lightning Engine que oferece um nível mais profundo de aceleração para jobs específicos. É um mecanismo nativo baseado no Apache Gluten e no Velox, otimizado para o hardware do Google, que aumenta o desempenho executando partes de uma consulta do Spark fora da JVM.
- A NQE é recomendada para:
- Tarefas com uso intensivo de computação que usam APIs Spark DataFrame e APIs Spark Dataset, além de consultas Spark SQL que leem dados de arquivos e tabelas Parquet, ORC, Apache Iceberg e Delta Lake. O formato do arquivo de saída não afeta o desempenho.
- A NQE não é recomendada para:
- Jobs que dependem muito de conjuntos de dados distribuídos resilientes (RDDs), funções definidas pelo usuário (UDFs), a maioria das bibliotecas de machine learning (ML) do Spark e operações vinculadas a E/S com atrasos devido ao acesso ao armazenamento.
Execução de consulta nativa em ARM
O Serviço Gerenciado para Apache Spark oferece suporte à execução de consultas nativas no
Lightning Engine na arquitetura ARM, otimizada especificamente para
processadores Google Axion em VMs ARM
C4A (consulte Tipos de máquina ARM
compatíveis com o
Serviço Gerenciado para Apache Spark)
usando a imagem 2.3-ubuntu22-arm. As instâncias C4A do Google Axion são VMs baseadas em ARM
criadas em núcleos ARM Neoverse V2 que oferecem melhorias significativas de
custo-benefício.
A execução do NQE em instâncias ARM do Google Axion combina custo-benefício no nível do hardware e alta largura de banda de memória por núcleo com aceleração de consulta vetorial nativa no nível do software, reduzindo significativamente os tempos de execução de consultas e o custo total de propriedade (TCO).
Os principais benefícios do ARM incluem:
- Aceleração de 2,5x a 4x em relação ao Spark de código aberto: oferece melhorias de desempenho de 2,5x a 4x em comparação com o Apache Spark de código aberto em cargas de trabalho analíticas.
- Otimização de custos: maximiza a vantagem de custo-benefício das instâncias do Google Axion C4A, que oferecem um custo-benefício até 65% melhor em comparação com instâncias x86 semelhantes.
- Paridade total de operadores e formatos: paridade total com os operadores NQE x86, com aceleração nativa para os formatos de tabela do Cloud Storage Parquet, Apache Iceberg e Delta Lake.
- Zero mudanças de código: ativação simples em clusters ARM usando flags de configuração padrão sem modificar o código do aplicativo Spark.
Requisitos da execução de consulta nativa
Os seguintes requisitos se aplicam ao recurso de execução de consulta nativa:
Mecanismo de execução: o NQE só está disponível em clusters ativados com o mecanismo Lightning na criação do cluster.
Jobs compatíveis: Spark, PySpark, Spark SQL e SparkR. O mecanismo padrão será executado (sem NQE) em outros tipos de serviço enviados para um cluster do Lightning Engine.
Sem GPUs e aceleradores: os jobs com NQE ativada enviados em aceleradores de GPU vão falhar, mas podem se beneficiar do Lightning Engine sem NQE.
Tipos de dados: não há suporte para entradas dos seguintes tipos de dados:
- Byte: ORC e Parquet
- Struct, Array, Map: Parquet
Requisitos de arquitetura e sistema operacional
Os requisitos de NQE variam de acordo com a arquitetura do processador:
| Arquitetura | Tipos de máquina compatíveis | Sistema operacional e imagem compatíveis |
|---|---|---|
| x86 | Famílias de máquinas Intel e AMD | Debian-12 e Ubuntu-22 (versão de imagem 2.3.3 e versões posteriores de 2.3); Debian-13 e Ubuntu-24 (versão de imagem 3.0.2 e versões posteriores de 3.0) |
| ARM | Série de máquinas C4A (VMs ARM do Google Axion) | Imagem 2.3-ubuntu22-arm (versão 2.3.3 e versões posteriores de 2.3) |
Preços
Para informações sobre preços, consulte Preços do Serviço Gerenciado para Apache Spark.
Criar um cluster do Lightning Engine
Nesta seção, mostramos como criar um cluster do Serviço Gerenciado para Apache Spark que ativa o Lightning Engine em jobs do Spark enviados ao cluster.
Também é possível ativar a Execução de Consulta Nativa (NQE, na sigla em inglês) no cluster ao criá-lo ou ativar a NQE posteriormente para jobs específicos do Spark enviados ao cluster.
Antes de começar
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 Cloud de Confiance project.
Enable the Dataproc API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Funções exigidas
Alguns papéis do Identity and Access Management (IAM) são necessários para criar um cluster do Serviço Gerenciado para Apache Spark e enviar jobs para ele. Dependendo das políticas da organização, um proprietário de projeto do Cloud ou administrador de serviço pode já ter concedido esses papéis a você ou a uma conta de serviço. Para verificar as concessões de papéis, consulte Você precisa conceder papéis?.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Funções do usuário
Para receber as permissões necessárias para criar um cluster do Serviço Gerenciado para Apache Spark, peça ao administrador para conceder a você os seguintes papéis do IAM:
- Editor do Dataproc (
roles/dataproc.editor) no projeto - Usuário da conta de serviço (
roles/iam.serviceAccountUser) na conta de serviço padrão do Compute Engine
Papel da conta de serviço
Para garantir que a conta de serviço padrão do Compute Engine tenha as permissões necessárias para criar um cluster do Serviço Gerenciado para Apache Spark, peça ao administrador para conceder o papel do IAM de Worker do Dataproc (roles/dataproc.worker) à conta de serviço padrão do Compute Engine no projeto.
Crie o cluster
Os exemplos a seguir mostram como criar um cluster do Lightning Engine usando o console do Cloud de Confiance , a Google Cloud CLI, a API Dataproc, as bibliotecas de cliente do Cloud para Python ou o Terraform. Também é possível criar um cluster com o Lightning Engine ativado usando as bibliotecas de cliente do Cloud para Go, Java e Node.js.
Console
- Abra a página Criar cluster.
- Clique em Configuração adicional para abrir a seção.
- Editar Personalização e outros.
- No painel que será aberto, confirme se a caixa de seleção Ativar o Lightning Engine está marcada.
- Opcional: para ativar o ambiente de execução nativo por padrão para jobs do Spark, marque a caixa de seleção Ativar execução nativa.
- Clique em Salvar.
- Defina outras configurações do cluster conforme necessário.
- Clique em Criar cluster.
Crie um cluster ARM:
Para criar um cluster ARM com o Google Axion e a execução de consultas nativas:
- Em Configuração do worker, selecione a série de máquinas C4A e escolha o tipo de máquina ARM.
- Em Imagem, selecione a imagem
2.3-ubuntu22-arm. - Em Configuração adicional > Personalização e outros, confirme se as opções Ativar o Lightning Engine e Ativar a execução nativa estão selecionadas.
- Clique em Criar cluster.
gcloud
Para criar um cluster com o Lightning Engine ativado, execute o comando
gcloud dataproc clusters createcom a flag--engine=lightning. Para mais informações, consulte criar um cluster com a CLI gcloud.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3Opcional: para ativar o ambiente de execução nativo por padrão para jobs do Spark, inclua a propriedade
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'Criar um cluster ARM com NQE: para criar um cluster do Serviço Gerenciado para Apache Spark com nós ARM do Google Axion C4A e NQE ativado:
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --image-version=2.3-ubuntu22-arm \ --master-machine-type=c4a-standard-16 \ --worker-machine-type=c4a-standard-16 \ --engine=lightning \ --properties='spark:spark.dataproc.lightningEngine.runtime=native'
API
Para criar um cluster com o Lightning Engine ativado, envie uma
solicitação clusters.create. Para mais informações, consulte criar um cluster com
a API
REST.
No corpo da solicitação, defina o campo
enginecomoLIGHTNING.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } } }Opcional: para ativar o ambiente de execução nativo por padrão para todos os jobs, inclua a propriedade
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 criar um cluster com o Lightning Engine ativado, use o método
create_clustere defina o campoenginena configuração do cluster comoLIGHTNING. Para mais informações, consulte criar um cluster com 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 ativar o ambiente de execução nativo por padrão para jobs do Spark, inclua a propriedade
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
- Na configuração do recurso
google_dataproc_cluster, defina o argumentoenginecomoLIGHTNING. - Para mais detalhes e opções avançadas, consulte a documentação oficial do Terraform para o recurso
google_dataproc_cluster.
Verificar o mecanismo do cluster
Console
- No console do Cloud de Confiance , acesse a página Detalhes do cluster.
- Verifique se o valor
Lightning Engineestá listado no campo Mecanismo. - Se você ativou a execução de consulta nativa, verifique se
nativeestá listado no campo Execução nativa.
gcloud
Para verificar o mecanismo e a NQE (se ativada), execute o comando
gcloud dataproc clusters describe:gcloud dataproc clusters describe CLUSTER_NAME --project=PROJECT_ID --region=REGIONVerifique a saída das propriedades
engineelightningEngine.runtime:clusterName: lightning-engine-cluster engine: lightningEngine lightningEngine.runtime: native
Enviar um job com o Lightning Engine
Se você ativou o Lightning Engine ao criar um cluster, quando enviar um job do Spark para o cluster, o Lightning Engine será ativado por padrão no job.
Ativar a execução de consulta nativa para um job
Se você ativou a execução de consulta nativa (NQE, na sigla em inglês) ao criar um cluster do Lightning Engine, todos os jobs do Spark serão executados com a NQE ativada, a menos que você desative a NQE em um job específico.
Se você não ativou a NQE ao criar o cluster do Lightning Engine, é possível ativá-la para um job ao enviá-lo, conforme mostrado nos exemplos a seguir.
gcloud
Para ativar a execução de consulta nativa ao enviar um job do Spark, inclua a propriedade spark.dataproc.lightningEngine.runtime=native:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=native \
-- ...
API
Para ativar a execução de consulta nativa ao enviar um job do Spark, inclua a propriedade spark.dataproc.lightningEngine.runtime na solicitação:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"native"
}
}
}
}
Desativar a execução de consulta nativa para um job
Se você ativou a execução de consulta nativa (NQE, na sigla em inglês) ao criar um cluster do Lightning Engine, todos os jobs do Spark serão executados com a NQE ativada, a menos que você a desative em um job específico.
É possível desativar a NQE para um job específico do Spark ao enviá-lo, conforme mostrado nos exemplos a seguir.
gcloud
Para desativar a execução de consulta nativa ao enviar um job do Spark para um cluster do Lightning Engine, inclua a propriedade spark.dataproc.lightningEngine.runtime=default:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=default \
-- ...
API
Para desativar a execução de consulta nativa ao enviar um job do Spark para um cluster do Lightning Engine, inclua a propriedade spark.dataproc.lightningEngine.runtime=default:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"default"
}
}
}
}
Verificar a execução de consulta nativa de um job
Depois de enviar um job para um cluster do Lightning Engine, verifique se a execução de consulta nativa está ativada para o job.
Console
- No console Cloud de Confiance , acesse a página Jobs.
- Clique no ID da tarefa para abrir a página Detalhes do job.
- Verifique se
nativeestá listado no campo Execução nativa.
gcloud
Execute o comando
gcloud dataproc jobs describe:gcloud dataproc jobs describe JOB_ID --project=PROJECT_ID --region=REGIONVerifique a saída de
lightningEngine.runtimena seção Propriedades:lightningEngine.runtime: native
Parâmetros de configuração
A tabela a seguir resume os principais parâmetros de configuração do Lightning Engine e da execução de consultas nativas.
| Nome do parâmetro | Descrição | Mecanismos aplicáveis | Valor padrão | Valor padrão (Lightning Engine) | Substituível pelo usuário (nível do job) | Escopo |
|---|---|---|---|---|---|---|
--engine |
Configuração no nível do cluster para selecionar o mecanismo durante a criação do cluster. | Em todo o cluster | default |
lightning |
Não | Cluster |
spark:spark.dataproc.lightningEngine.runtime |
Configuração no nível do cluster para selecionar o ambiente de execução do mecanismo Lightning durante a criação do cluster. | Somente Lightning | default |
default |
Não | Cluster |
spark.dataproc.lightningEngine.runtime |
Ativa ou desativa a execução de consulta nativa (NQE, na sigla em inglês) no Lightning Engine. | Somente Lightning | default |
default |
Sim. Pode ser definido como native ou default. |
Job |
Limitações
Ativar a execução de consultas nativas nos cenários a seguir pode causar exceções, incompatibilidades do Spark ou fallback da carga de trabalho para o mecanismo padrão do Spark.
Substitutos
A execução de consultas nativas nos cenários a seguir pode resultar em um fallback de carga de trabalho para o mecanismo de execução do Spark:
- ANSI: se o modo ANSI estiver ativado, a execução será revertida para o Spark.
- Modo que diferencia maiúsculas de minúsculas: a execução de consultas nativas só é compatível com o modo padrão do Spark, que não diferencia maiúsculas de minúsculas. Se o modo que diferencia maiúsculas de minúsculas estiver ativado, poderão ocorrer resultados incorretos.
- Verificação de tabela particionada: a execução de consulta nativa é compatível com a verificação de tabela particionada apenas quando o caminho contém as informações da partição. Caso contrário, a carga de trabalho volta para o mecanismo de execução do Spark.
Comportamento incompatível
Comportamentos incompatíveis ou resultados incorretos podem ocorrer ao usar a execução de consulta nativa nos seguintes casos:
- Funções JSON: a execução de consultas nativas é compatível com strings entre aspas duplas, não aspas simples. Resultados incorretos ocorrem com aspas
simples. Usar
*no caminho com a funçãoget_json_objectretornaNULL. - Configuração de leitura do Parquet:
- A execução de consulta nativa trata
spark.files.ignoreCorruptFilescomo definido como o valor padrãofalse, mesmo quando definido comotrue. - A execução de consulta nativa ignora
spark.sql.parquet.datetimeRebaseModeInReade retorna apenas o conteúdo do arquivo Parquet. As diferenças entre o calendário híbrido legado e o calendário gregoriano proléptico não são consideradas. Os resultados do Spark podem ser diferentes.
- A execução de consulta nativa trata
- NaN: não compatível. Resultados inesperados podem ocorrer, por exemplo, quando você
usa
NaNem uma comparação numérica. - Leitura colunar do Spark: pode ocorrer um erro fatal porque o vetor colunar do Spark é incompatível com a execução de consulta nativa.
- Spill: quando você define as partições de embaralhamento como um número grande, o
recurso de spill para disco pode acionar um
OutOfMemoryException. Se isso ocorrer, reduzir o número de partições pode eliminar essa exceção.