Neste documento, mostramos como ativar o Lightning Engine para acelerar as cargas de trabalho em lote e as sessões interativas do Serverless para Apache Spark.
Visão geral
O Lightning Engine é um acelerador de consultas de alta performance desenvolvido por um mecanismo de otimização multicamadas que realiza técnicas de otimização comuns, como otimizações de consulta e execução, além de otimizações selecionadas na camada do sistema de arquivos e nos conectores de acesso a dados.
Como mostrado na ilustração a seguir, o Lightning Engine acelera o desempenho da execução de consultas do Spark em uma carga de trabalho semelhante ao TPC-H (tamanho do conjunto de dados 10 TB
).

Para mais informações, consulte Conheça o Lightning Engine, a próxima geração de desempenho do Apache Spark.
Disponibilidade do Lightning Engine
- O Lightning Engine está disponível para uso com
ambientes de execução sem servidor compatíveis para Apache Spark
que estão em disponibilidade geral (atualmente ambientes de execução
1.2
,2.2
e2.3
; não disponível no ambiente de execução do Spark3.0
). - O Lightning Engine está disponível apenas no nível de preços premium do Serverless para Apache Spark.
- Cargas de trabalho em lote:o Lightning Engine é ativado automaticamente para cargas de trabalho em lote no nível Premium. Você não precisa fazer nada.
- Sessões interativas:o Lightning Engine não é ativado por padrão para sessões interativas. Para ativar, consulte Ativar o Lightning Engine.
- Modelos de sessão:o Lightning Engine não é ativado por padrão para modelos de sessão. Para ativar, consulte Ativar o Lightning Engine.
Ativar o Lightning Engine
As seções a seguir mostram como ativar o Lightning Engine em uma carga de trabalho em lote do Serverless para Apache Spark, um modelo de sessão e uma sessão interativa.
Carga de trabalho em lote
Ativar o Lightning Engine em uma carga de trabalho em lote
Use o console Google Cloud , a Google Cloud CLI ou a API Dataproc para ativar o Lightning Engine em uma carga de trabalho em lote.
Console
Use o console Google Cloud para ativar o Lightning Engine em uma carga de trabalho em lote.
No console do Google Cloud :
- Acessar Lotes do Dataproc.
- Clique em Criar para abrir a página Criar lote.
Selecione e preencha os seguintes campos:
- Contêiner:
- Versão do ambiente de execução:selecione
1.2
,2.2
,2.3
ou um número de versãomajor.minor
mais recente. Consulte Versões de ambiente de execução do Serverless para Apache Spark compatíveis.
- Versão do ambiente de execução:selecione
Configuração de nível:
- Selecione
Premium
. Isso ativa e marca automaticamente a opção "Ativar o LIGHTNING ENGINE para acelerar o desempenho do Spark".
Quando você seleciona o nível premium, o nível de computação do driver e o nível de computação do executor são definidos como
Premium
. Essas configurações de computação de nível premium definidas automaticamente não podem ser substituídas para lotes que usam tempos de execução anteriores a3.0
.Você pode configurar o nível do disco do driver e o nível do disco do executor como
Premium
ou deixar o valor padrãoStandard
. Se você escolher um nível de disco premium, selecione o tamanho do disco. Para mais informações, consulte propriedades de alocação de recursos.- Selecione
Propriedades: opcional. Insira o seguinte par
Key
(nome da propriedade) eValue
se quiser selecionar o tempo de execução Execução de consultas nativas:Chave Valor spark.dataproc.lightningEngine.runtime
nativo
- Contêiner:
Preencha, selecione ou confirme outras configurações de cargas de trabalho em lote. Consulte Enviar uma carga de trabalho em lote do Spark.
Clique em Enviar para executar a carga de trabalho em lote do Spark.
gcloud
Defina as seguintes flags de comando da CLI gcloud
gcloud dataproc batches submit spark
para ativar um Lightning Engine em uma carga de trabalho em lote.
gcloud dataproc batches submit spark \ --project=PROJECT_ID \ --region=REGION \ --properties=dataproc.tier=premium \ OTHER_FLAGS_AS_NEEDED
Observações:
- PROJECT_ID: o ID do projeto do Google Cloud . Os IDs do projeto estão listados na seção Informações do projeto no painel do console do Google Cloud .
- REGION: uma região do Compute Engine disponível para executar a carga de trabalho.
--properties=dataproc.tier=premium
. A definição do nível premium define automaticamente as seguintes propriedades na carga de trabalho em lote:spark.dataproc.engine=lightningEngine
seleciona o Lightning Engine para a carga de trabalho em lote.spark.dataproc.driver.compute.tier
espark.dataproc.executor.compute.tier
são definidos comopremium
(consulte propriedades de alocação de recursos). Essas configurações de computação de nível premium definidas automaticamente não podem ser substituídas para lotes que usam tempos de execução anteriores a3.0
.
Outras propriedades
Mecanismo de consulta nativo:
spark.dataproc.lightningEngine.runtime=native
Adicione essa propriedade se quiser selecionar o ambiente de execução Execução de consulta nativa.Níveis e tamanhos de disco: por padrão, os tamanhos de disco do driver e do executor são definidos como níveis e tamanhos
standard
. Você pode adicionar propriedades para selecionar níveis e tamanhos de discopremium
(em múltiplos de375 GiB
).
Para mais informações, consulte propriedades de alocação de recursos.
OTHER_FLAGS_AS_NEEDED: consulte Enviar uma carga de trabalho em lote do Spark.
API
Para ativar o Lightning Engine em uma carga de trabalho em lote, adicione
"dataproc.tier":"premium" a
RuntimeConfig.properties
como parte da solicitação
batches.create
. A definição do nível premium define automaticamente as seguintes propriedades na
carga de trabalho em lote:
spark.dataproc.engine=lightningEngine
seleciona o Lightning Engine para a carga de trabalho em lote.spark.dataproc.driver.compute.tier
espark.dataproc.executor.compute.tier
são definidos comopremium
(consulte propriedades de alocação de recursos). Essas configurações de computação de nível premium definidas automaticamente não podem ser substituídas para lotes que usam tempos de execução anteriores ao3.0
.
Outro RuntimeConfig.properties
:
Native Query Engine:
spark.dataproc.lightningEngine.runtime:native
. Adicione essa propriedade se quiser selecionar o ambiente de execução Execução de consultas nativas.Níveis e tamanhos de disco: por padrão, os tamanhos de disco do driver e do executor são definidos como níveis e tamanhos
standard
. Você pode adicionar propriedades para selecionar níveis e tamanhos depremium
(em múltiplos de375 GiB
).
Para mais informações, consulte propriedades de alocação de recursos.
Consulte Enviar uma carga de trabalho em lote do Spark para definir outros campos da API de carga de trabalho em lote.
Modelo de sessão
Ativar o Lightning Engine em um modelo de sessão
Use o console Google Cloud , a Google Cloud CLI ou a API Dataproc para ativar o Lightning Engine em um modelo de sessão para uma sessão do Jupyter ou do Spark Connect.
Console
Use o console Google Cloud para ativar o Lightning Engine em uma carga de trabalho em lote.
No console do Google Cloud :
- Acesse os modelos de sessão do Dataproc.
- Clique em Criar para abrir a página Criar modelo de sessão.
Selecione e preencha os seguintes campos:
- Informações do modelo de sessão:
- Selecione "Ativar o Lightning Engine para acelerar o desempenho do Spark".
- Configuração de execução:
- Versão do ambiente de execução:selecione
1.2
,2.2
,2.3
ou um número de versãomajor.minor
mais recente. Consulte Versões de ambiente de execução do Serverless para Apache Spark compatíveis.
- Versão do ambiente de execução:selecione
Propriedades:insira os seguintes pares
Key
(nome da propriedade) eValue
para selecionar o nível Premium:Chave Valor dataproc.tier
Premium spark.dataproc.engine
lightningEngine Opcional: insira o seguinte par
Key
(nome da propriedade) eValue
para selecionar o tempo de execução da Execução de consultas nativas:Chave Valor spark.dataproc.lightningEngine.runtime
native
- Informações do modelo de sessão:
Preencha, selecione ou confirme outras configurações do modelo de sessão. Consulte Criar um modelo de sessão.
Clique em Enviar para criar o modelo de sessão.
gcloud
Não é possível criar diretamente um modelo de sessão do Serverless para Apache Spark usando a
CLI gcloud. Em vez disso, use o comando
gcloud beta dataproc session-templates import
para importar um
modelo de sessão atual, edite o modelo importado para ativar o
Lightning Engine e, opcionalmente, o ambiente de execução de consultas nativas. Em seguida, exporte
o modelo editado usando o comando gcloud beta dataproc session-templates export
.
API
Para ativar o Lightning Engine em um modelo de sessão, adicione "dataproc.tier":"premium" e "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties como parte da solicitação sessionTemplates.create
.
Outro RuntimeConfig.properties
:
- Mecanismo de consulta nativo:
spark.dataproc.lightningEngine.runtime:native
: adicione essa propriedade a RuntimeConfig.properties para selecionar o ambiente de execução Execução de consulta nativa.
Consulte Criar um modelo de sessão para definir outros campos da API de modelo de sessão.
Sessão interativa
Ativar o Lightning Engine em uma sessão interativa
É possível usar a Google Cloud CLI ou a API Dataproc para ativar o Lightning Engine em uma sessão interativa do Serverless para Apache Spark. Também é possível ativar o Lightning Engine em uma sessão interativa em um notebook do BigQuery Studio.
gcloud
Defina as seguintes flags de comando da CLI gcloud
gcloud beta dataproc sessions create spark
para ativar o Lightning Engine em uma sessão interativa.
gcloud beta dataproc sessions create spark \ --project=PROJECT_ID \ --location=REGION \ --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine \ OTHER_FLAGS_AS_NEEDED
Observações:
- PROJECT_ID: o ID do projeto do Google Cloud . Os IDs do projeto estão listados na seção Informações do projeto no painel do console do Google Cloud .
- REGION: uma região do Compute Engine disponível para executar a carga de trabalho.
--properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine
. Essas propriedades ativam o Lightning Engine na sessão.Outras propriedades:
- Mecanismo de consulta nativo:
spark.dataproc.lightningEngine.runtime=native
: adicione essa propriedade para selecionar o tempo de execução da Execução de consulta nativa.
- Mecanismo de consulta nativo:
OTHER_FLAGS_AS_NEEDED: consulte Criar uma sessão interativa.
API
Para ativar o Lightning Engine em uma sessão, adicione "dataproc.tier":"premium"
e "spark.dataproc.engine":"lightningEngine" a
RuntimeConfig.properties
como parte da sua solicitação
sessions.create
.
Outro RuntimeConfig.properties
:
spark.dataproc.lightningEngine.runtime:native
:
Adicione essa propriedade a RuntimeConfig.properties
se quiser selecionar o ambiente de execução Native Query Execution.
Consulte Criar uma sessão interativa para definir outros campos da API de modelo de sessão.
Notebook do BigQuery
É possível ativar o Lightning Engine ao criar uma sessão em um notebook PySpark do 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["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:
Verificar as configurações do Lightning Engine
É possível usar o console Google Cloud , a Google Cloud CLI ou a API Dataproc para verificar as configurações do Lightning Engine em uma carga de trabalho em lote, um modelo de sessão ou uma sessão interativa.
Carga de trabalho em lote
Para verificar se o nível do lote está definido como
premium
e se o mecanismo está definido comoLightning Engine
:- Google Cloud console: na página Lotes, consulte as colunas Nível e Mecanismo do lote. Clique no ID do lote para conferir essas configurações na página de detalhes do lote.
- CLI gcloud: execute o comando
gcloud dataproc batches describe
. - API: emita uma solicitação
batches.get
.
Modelo de sessão
Para verificar se o engine está definido como
Lightning Engine
em um modelo de sessão:- Console doGoogle Cloud : na página Modelos de sessão, consulte a coluna Mecanismo do seu modelo. Clique no Nome do modelo de sessão para conferir essa configuração na página de detalhes do modelo.
- CLI gcloud: execute o comando
gcloud beta dataproc session-templates describe
. - API: emita uma solicitação
sessionTemplates.get
.
Sessão interativa
O mecanismo é definido como
Lightning Engine
para uma sessão interativa:- Google Cloud console: na página Sessões interativas, consulte a coluna Mecanismo do modelo. Clique no ID da sessão interativa para conferir essa configuração na página de detalhes do modelo de sessão.
- CLI gcloud: execute o comando
gcloud beta dataproc sessions describe
. - API: emita uma solicitação
sessions.get
.
Execução de consultas nativas
A execução de consultas nativas (NQE, na sigla em inglês) é um recurso opcional do Lightning Engine que melhora o desempenho com uma implementação nativa baseada no Apache Gluten e no Velox, projetado para hardware do Google.
O ambiente de execução de consultas nativas inclui gerenciamento unificado de memória para alternância dinâmica entre memória fora da heap e na heap sem exigir mudanças nas configurações atuais do Spark. A NQE inclui suporte expandido para operadores, funções e tipos de dados do Spark, além de inteligência para identificar automaticamente oportunidades de usar o mecanismo nativo para operações de pushdown ideais.
Identificar cargas de trabalho de execução de consultas nativas
Use a execução de consultas nativas nos seguintes cenários:
APIs DataFrame e Dataset do Spark e consultas do Spark SQL que leem dados de arquivos Parquet e ORC. O formato do arquivo de saída não afeta o desempenho da execução de consultas nativas.
Cargas de trabalho recomendadas pela ferramenta de qualificação de execução de consultas nativas.
Não é recomendável usar a execução de consultas nativas com cargas de trabalho que têm entradas dos seguintes tipos de dados:
- Byte: ORC e Parquet
- Carimbo de data/hora: ORC
- Struct, Array, Map: Parquet
Limitações da execução de consultas nativas
Ativar a execução de consultas nativas nos seguintes cenários 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 pode resultar em um fallback da carga de trabalho para o mecanismo de execução do Spark, causando regressão ou falha.
ANSI:se o modo ANSI estiver ativado, a execução vai voltar para o Spark.
Modo sensível a maiúsculas e 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 sensível a maiúsculas e minúsculas estiver ativado, poderão ocorrer resultados incorretos.
Verificação de tabela particionada:a execução de consultas nativas é compatível com a verificação de tabela particionada somente quando o caminho contém as informações de partição. Caso contrário, a carga de trabalho volta para o mecanismo de execução do Spark.
Comportamento incompatível
Comportamento incompatível ou resultados incorretos podem ocorrer ao usar a execução de consultas nativas nos seguintes casos:
Funções JSON:a execução de consultas nativas é compatível com strings entre aspas duplas, não simples. Resultados incorretos ocorrem com aspas simples. Usar "*" no caminho com a função
get_json_object
retornaNULL
.Configuração de leitura do Parquet:
- A execução de consultas nativas trata
spark.files.ignoreCorruptFiles
como definido para o valor padrãofalse
, mesmo quando definido comotrue
. - A execução de consultas nativas ignora
spark.sql.parquet.datetimeRebaseModeInRead
e retorna apenas o conteúdo do arquivo Parquet. As diferenças entre o calendário híbrido legado (juliano gregoriano) e o calendário gregoriano proleptico não são consideradas. Os resultados do Spark podem variar.
- A execução de consultas nativas trata
NaN
:não compatível. Resultados inesperados podem ocorrer, por exemplo, ao usarNaN
em uma comparação numérica.Leitura colunar do Spark:um erro fatal pode ocorrer porque o vetor colunar do Spark é incompatível com a execução de consultas nativas.
Transbordamento:quando as partições de embaralhamento são definidas com um número grande, o recurso de transbordamento para disco pode acionar um
OutOfMemoryException
. Se isso acontecer, reduza o número de partições para eliminar essa exceção.