Neste documento, mostramos como ativar o Lightning Engine para acelerar as cargas de trabalho em lote e as sessões interativas do Serviço Gerenciado para Apache Spark.
Visão geral
O Lightning Engine é um acelerador de consultas de alto desempenho com um mecanismo de otimização multicamadas que executa técnicas de otimização personalizadas, 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 de execução de consultas do Spark em uma carga de trabalho semelhante ao TPC-H (tamanho do conjunto de dados de 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 e a execução de consultas nativas estão disponíveis para uso com o ambiente de execução do Serviço Gerenciado para Apache Spark
2.3. O Lightning Engine e a execução de consultas nativas não estão disponíveis no ambiente de execução3.0.O Lightning Engine está disponível apenas com o nível de preço premium do Serviço Gerenciado 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 ativá-lo, consulte Ativar o Lightning Engine.
Perfis de ambiente de execução (modelos de sessão): quando você cria um perfil de ambiente de execução no console do Google Cloud , o nível Premium e a opção Ativar o Lightning Engine para acelerar o desempenho são selecionados por padrão. Quando você cria um modelo de sessão usando a Google Cloud CLI ou a API Dataproc, o Lightning Engine não é ativado por padrão. Para ativar ou configurar o recurso, 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, um perfil de ambiente de execução (modelo de sessão) e uma sessão interativa do Serviço Gerenciado para Apache Spark.
Carga de trabalho em lote
Ativar o Lightning Engine em uma carga de trabalho em lote
Use o console do 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 do Google Cloud para ativar o Lightning Engine em uma carga de trabalho em lote.
No console do Google Cloud :
- Acesse os lotes do Serviço Gerenciado para Apache Spark.
- 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
2.3.
- Versão do ambiente de execução: selecione
Configuração de nível:
- Selecione
Premium. Isso ativa e marca automaticamente "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 do nível Premium definidas automaticamente não podem ser substituídas para lotes que usam ambientes de execução anteriores a3.0.É possível configurar o nível de disco do driver e o nível de disco do executor como
Premiumou deixá-los no valor de nível 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) eValuese quiser selecionar o ambiente de execução Execução de consulta nativa:Chave Valor spark.dataproc.lightningEngine.runtimenativo
- 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
gcloud dataproc batches submit spark
da CLI gcloud para ativar um Lightning Engine em uma carga de trabalho em lote.
gcloud dataproc batches submit spark \ --project=PROJECT_ID \ --region=REGION \ --version=2.3 \ --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 disponível do Compute Engine para executar a carga de trabalho.
--properties=dataproc.tier=premium. Definir o nível Premium define automaticamente as seguintes propriedades na carga de trabalho em lote:spark.dataproc.engine=lightningEngineseleciona o Lightning Engine para a carga de trabalho em lote.spark.dataproc.driver.compute.tierespark.dataproc.executor.compute.tiersão definidos comopremium(consulte propriedades de alocação de recursos). Essas configurações de computação do nível Premium definidas automaticamente não podem ser modificadas para lotes que usam ambientes de execução anteriores a3.0.
Outras propriedades
Mecanismo de consulta nativo:
spark.dataproc.lightningEngine.runtime=nativeAdicione essa propriedade se quiser selecionar o ambiente de execução de 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. É possível adicionar propriedades para selecionar os níveis e tamanhos de disco dopremium(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, como parte da solicitação
batches.create:
- Defina RuntimeConfig.version
como
2.3. Adicione "dataproc.tier":"premium" a RuntimeConfig.properties. A definição do nível Premium define automaticamente as seguintes propriedades na carga de trabalho em lote:
spark.dataproc.engine=lightningEngineseleciona o Lightning Engine para a carga de trabalho em lote.spark.dataproc.driver.compute.tierespark.dataproc.executor.compute.tiersã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 ambientes de execução anteriores a3.0.
Outro RuntimeConfig.properties:
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. É possível 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.
Perfil do ambiente de execução
Ativar o Lightning Engine em um perfil de ambiente de execução (modelo de sessão)
Use o console do Google Cloud , a Google Cloud CLI ou a API Dataproc para ativar o Lightning Engine em um perfil de ambiente de execução (modelo de sessão) para uma sessão do Jupyter ou do Spark Connect.
Console
Use o console do Google Cloud para ativar o Lightning Engine em um perfil de ambiente de execução (modelo de sessão):
No console do Google Cloud , acesse a página Perfis de ambiente de execução:
Clique em Criar para abrir a página Criar um perfil de ambiente de execução.
Selecione e preencha os seguintes campos:
Nível: verifique se a opção Premium (padrão) está selecionada e se Ativar o Lightning Engine para acelerar o desempenho (selecionada por padrão, que define
spark.dataproc.engine=lightningEngine) está selecionada.Configuração adicional: defina as seguintes configurações de ambiente de execução e de propriedade do Spark:
Configuração do ambiente de execução: clique em Editar e verifique se a versão do ambiente de execução do Spark está definida como
2.3. Em seguida, clique em Salvar.Outras personalizações: (opcional) para selecionar o ambiente de execução da execução de consulta nativa, clique em Editar, em Adicionar propriedade em Propriedades do Spark, insira o seguinte par de Chave (nome da propriedade) e Valor e clique em Salvar:
Chave Valor spark.dataproc.lightningEngine.runtimenative
Preencha, selecione ou confirme outras configurações do perfil de ambiente de execução. Para mais informações sobre as configurações do perfil de ambiente de execução, consulte Criar um perfil de ambiente de execução.
Clique em Criar.
gcloud
Não é possível criar diretamente um modelo de sessão do Serviço Gerenciado para Apache Spark
(perfil de ambiente de execução) usando a
CLI gcloud. Em vez disso, use o comando gcloud beta dataproc session-templates import para importar um modelo de sessão, editá-lo para ativar o Lightning Engine e, se quiser, o ambiente de execução de consulta nativa e, em seguida, exportar o modelo editado usando o comando gcloud beta dataproc session-templates export.
API
Para ativar o Lightning Engine em um modelo de sessão (perfil de ambiente de execução), como parte da solicitação
sessionTemplates.create:
- Defina RuntimeConfig.version
como
2.3. - Adicione "dataproc.tier":"premium" e "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties.
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.
Para mais informações sobre como definir outros campos da API de modelo de sessão, consulte Criar um perfil de ambiente de execução (modelo de sessão).
Sessão interativa
Ativar o Lightning Engine em uma sessão interativa
Use a Google Cloud CLI ou a API Dataproc para ativar o Lightning Engine em uma sessão interativa do Serviço Gerenciado 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
gcloud beta dataproc sessions create spark
da CLI gcloud para ativar o Lightning Engine em uma sessão interativa.
gcloud beta dataproc sessions create spark \ --project=PROJECT_ID \ --location=REGION \ --version=2.3 \ --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 disponível do Compute Engine 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 ambiente 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, como parte da solicitação
sessions.create:
- Defina RuntimeConfig.version
como
2.3. - Adicione "dataproc.tier":"premium" e "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties.
Outros RuntimeConfig.properties:
- Mecanismo de consulta nativo:
spark.dataproc.lightningEngine.runtime:native: adicione essa propriedade a RuntimeConfig.properties se quiser selecionar o ambiente de execução Execução de consulta nativa.
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 do 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["version"] = "2.3"
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
Use o console do 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 perfil de ambiente de execução (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
premiume o mecanismo está definido comoLightning Engine:- Console doGoogle Cloud : na página Lotes, consulte as colunas Nível e Mecanismo do lote. Clique no ID do lote para ver 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.
Perfil do ambiente de execução
Para verificar se engine está definido como
Lightning Enginepara um perfil de ambiente de execução (modelo de sessão):Console doGoogle Cloud : na página Perfis de ambiente de execução, clique no nome do perfil para conferir as configurações na página de detalhes do perfil.
CLI gcloud: execute o comando
gcloud beta dataproc session-templates describe.API: emita uma solicitação
sessionTemplates.get.
Sessão interativa
Para verificar se engine está definido como
Lightning Enginepara uma sessão interativa:Console doGoogle Cloud : na página Sessões interativas, consulte a coluna Mecanismo da sessão. Clique no ID da sessão interativa para ver essa configuração na página de detalhes da sessão.
CLI gcloud: execute o comando
gcloud beta dataproc sessions describe.API: emita uma solicitação
sessions.get.
Execução de consulta nativa
A execução de consulta nativa (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, projetada para o hardware do Google.
O ambiente de execução de consulta nativa inclui gerenciamento de memória unificado para alternância dinâmica entre memória fora do heap e no heap sem exigir mudanças nas configurações atuais do Spark. O 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 consulta nativa
Use a execução de consulta nativa nos seguintes cenários:
APIs Spark DataFrame, APIs Dataset Spark e consultas SQL Spark 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 consulta nativa.
A execução de consultas nativas não é recomendada para cargas de trabalho com 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 consulta nativa
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 na execução a seguir pode resultar em fallback da carga de trabalho para o mecanismo de execução do Spark, resultando em regressão ou falha.
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, podem ocorrer resultados incorretos.
Verificação de tabela particionada: a execução de consulta nativa só é compatível com a verificação de tabela particionada 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
Comportamento incompatível 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 aceita strings entre aspas duplas, não aspas simples. Resultados incorretos ocorrem com aspas simples. O uso de "*" no caminho com a função
get_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 (juliano-gregoriano) e o calendário gregoriano proléptico não são consideradas. Os resultados do Spark podem variar.
- A execução de consulta nativa trata
NaN: não compatível. Resultados inesperados podem ocorrer, por exemplo, ao usarNaNem 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 as partições de embaralhamento são definidas 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.