Propriedades do Spark

Este documento descreve as propriedades do Spark e como defini-las. O Serviço Gerenciado para Apache Spark usa as propriedades do Spark para determinar os recursos de computação, memória e disco a serem alocados para a carga de trabalho em lote. Essas configurações de propriedade podem afetar o consumo e o custo da cota de carga de trabalho. Para mais informações, consulte Cotas do Serviço Gerenciado para Apache Spark e Preços do Serviço Gerenciado para Apache Spark.

Definir propriedades da carga de trabalho em lote do Spark

É possível especificar as propriedades do Spark ao enviar uma carga de trabalho em lote do Serviço Gerenciado para Apache Spark usando o Google Cloud console, a CLI gcloud ou a API Dataproc.

Console

  1. No Google Cloud console, acesse a página Criar lote do Serviço Gerenciado para Apache Spark.

    Acessar a página "Criar lote do Serviço Gerenciado para Apache Spark"

  2. Na seção Propriedades, clique em Adicionar propriedade.

  3. Insira o Key (nome) e o Value de uma propriedade do Spark compatível.

gcloud

Confira a seguir um exemplo de envio de lote da CLI gcloud. Várias propriedades são separadas por vírgulas.

gcloud dataproc batches submit spark \
    --properties=spark.checkpoint.compress=true,spark.driver.cores=8  \
    --region=REGION \
    other args ...

API

Defina RuntimeConfig.properties com as propriedades do Spark compatíveis como parte de uma batches.create.

Propriedades do Spark compatíveis

O Serviço Gerenciado para Apache Spark oferece suporte à maioria das propriedades do Spark, mas não oferece suporte a propriedades relacionadas ao YARN e ao embaralhamento, como spark.master=yarn e spark.shuffle.service.enabled. Se o código do aplicativo Spark definir uma propriedade YARN ou de embaralhamento, o aplicativo vai falhar.

Propriedades do ambiente de execução

O Serviço Gerenciado para Apache Spark oferece suporte às seguintes propriedades personalizadas do Spark para configurar o ambiente de execução:

Propriedade Descrição
spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME Adicione ENVIRONMENT_VARIABLE_NAME ao processo do driver. É possível especificar várias variáveis de ambiente.
spark.executorEnv.ENVIRONMENT_VARIABLE_NAME Adicione ENVIRONMENT_VARIABLE_NAME ao processo do executor. É possível especificar várias variáveis de ambiente.

Propriedade de nível

Propriedade Descrição Padrão
dataproc.tier O nível em que uma carga de trabalho em lote é executada, standard ou premium (consulte Níveis do Serviço Gerenciado para Apache Spark). As sessões interativas sempre são executadas no dataproc.tier premium.
  • Definir essa propriedade de nível de lote como standard define as propriedades de nível de recurso e de ambiente de execução do Serviço Gerenciado para Apache Spark como o nível standard (consulte Propriedades de alocação de recursos).
  • Definir essa propriedade de nível de lote como premium define spark.dataproc.engine como lightningEngine e define spark.dataproc.driver.compute.tier e spark.dataproc.executor.compute.tier como premium. É possível substituir a maioria das configurações de nível de lote definidas automaticamente, mas as configurações de nível de computação definidas automaticamente não podem ser substituídas para lotes que usam ambientes de execução anteriores a 3.0 (consulte Propriedades de alocação de recursos).
standard

Propriedades do mecanismo e do ambiente de execução

Propriedade Descrição Padrão
spark.dataproc.engine O mecanismo a ser usado para executar a carga de trabalho em lote ou a sessão interativa: lightningEngine (consulte Lightning Engine) ou o mecanismo default.
  • Cargas de trabalho em lote: Se você selecionar a propriedade dataproc.tier padrão para sua carga de trabalho, essa propriedade será definida automaticamente como default e não poderá ser substituída. Se você selecionar o dataproc.tier premium para sua carga de trabalho, essa propriedade será definida automaticamente como lightningEngine, mas você poderá mudar a configuração para default se necessário.
  • Sessões interativas: essa configuração é definida automaticamente como default, mas você pode mudar essa configuração para lightningEngine. As sessões interativas são sempre executadas no nível premium.
  • Lotes (nível padrão): default
  • Lotes (nível premium): lightningEngine
  • Sessões: default
spark.dataproc.lightningEngine.runtime O ambiente de execução a ser usado quando o Lightning Engine é selecionado para uma carga de trabalho em lote ou sessão interativa: default ou native (execução de consulta nativa). default

Propriedades de alocação de recursos

O Serviço Gerenciado para Apache Spark oferece suporte às seguintes propriedades do Spark para configurar a alocação de recursos:

Propriedade Descrição Padrão Exemplos
spark.driver.cores O número de núcleos (vCPUs) a serem alocados para o driver do Spark. Valores válidos: 4, 8, 16. 4
spark.driver.memory

A quantidade de memória a ser alocada para o processo do driver do Spark, especificada no formato de string de memória da JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

A memória total do driver por núcleo, incluindo a sobrecarga de memória do driver, que precisa estar entre 1024m e 7424m para o nível de computação padrão (24576m para o nível de computação premium). Por exemplo, se spark.driver.cores = 4, então 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

512m, 2g
spark.driver.memoryOverhead

A quantidade de memória JVM adicional a ser alocada para o processo do driver do Spark especificada no formato de string de memória da JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

Essa é uma memória não heap associada a sobrecargas da JVM, strings internas e outras sobrecargas nativas, e inclui a memória usada por outros processos de driver, como processos de driver do PySpark e memória usada por outros processos não driver em execução no contêiner. O tamanho máximo da memória do contêiner em que o driver é executado é determinado pela soma de spark.driver.memoryOverhead e spark.driver.memory.

A memória total do driver por núcleo, incluindo a sobrecarga de memória do driver, precisa estar entre 1024m e 7424m para o nível de computação padrão (24576m para o nível de computação premium). Por exemplo, se spark.driver.cores = 4, então 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

10% da memória do driver, exceto para cargas de trabalho em lote do PySpark, que são definidas como 40% da memória do driver 512m, 2g
spark.dataproc.driver.compute.tier O nível de computação a ser usado no driver. O nível de computação premium oferece maior desempenho por núcleo, mas é cobrado a uma taxa mais alta. standard standard, premium
spark.dataproc.driver.disk.size A quantidade de espaço em disco alocado para o driver, especificada com um sufixo de unidade de tamanho ("k", "m", "g" ou "t"). Precisa ser pelo menos 250GiB. Se o nível de disco premium for selecionado no driver, os tamanhos válidos serão 375g, 750g, 1500g, 3000g, 6000g ou 9000g. Se o nível de disco premium e 16 núcleos de driver forem selecionados, o tamanho mínimo do disco será de 750g. 100GiB por núcleo 1024g, 2t
spark.dataproc.driver.disk.tier O nível de disco a ser usado para armazenamento local e de embaralhamento no driver. O nível de disco premium oferece melhor desempenho em IOPS e capacidade de processamento, mas é cobrado a uma taxa mais alta. Se o nível de disco premium for selecionado no driver, o nível de computação premium também precisará ser selecionado usando spark.dataproc.driver.compute.tier=premium, e a quantidade de espaço em disco precisará ser especificada usando spark.dataproc.driver.disk.size.

Se o nível de disco premium for selecionado, o driver alocará mais 50 GiB de espaço em disco para armazenamento do sistema, que não pode ser usado por aplicativos do usuário.

standard standard, premium
spark.executor.cores O número de núcleos (vCPUs) a serem alocados para cada executor do Spark. Valores válidos: 4, 8, 16. 4
spark.executor.memory

A quantidade de memória a ser alocada para cada processo do executor do Spark, especificada no formato de string de memória da JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

A memória total do executor por núcleo, incluindo a sobrecarga de memória do executor, precisa estar entre 1024m e 7424m para o nível de computação padrão (24576m para o nível de computação premium). Por exemplo, se spark.executor.cores = 4, então 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

512m, 2g
spark.executor.memoryOverhead

A quantidade de memória JVM adicional a ser alocada para o processo do executor do Spark especificada no formato de string de memória da JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

Essa é uma memória não heap usada para sobrecargas da JVM, strings internas, e outras sobrecargas nativas, e inclui a memória do executor do PySpark e a memória usada por outros processos não executores em execução no contêiner. O tamanho máximo da memória do contêiner em que o executor é executado é determinado pela soma de spark.executor.memoryOverhead e spark.executor.memory.

A memória total do executor por núcleo, incluindo a sobrecarga de memória do executor precisa estar entre 1024m e 7424m para o nível de computação padrão (24576m para o nível de computação premium). Por exemplo, se spark.executor.cores = 4, então 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

10% da memória do executor, exceto para cargas de trabalho em lote do PySpark, que são definidas como 40% da memória do executor 512m, 2g
spark.dataproc.executor.compute.tier O nível de computação a ser usado nos executores. O nível de computação premium oferece maior desempenho por núcleo, mas é cobrado a uma taxa mais alta. standard standard, premium
spark.dataproc.executor.disk.size A quantidade de espaço em disco alocado para cada executor, especificada com um sufixo de unidade de tamanho ("k", "m", "g" ou "t"). O espaço em disco do executor pode ser usado para dados de embaralhamento e para preparar dependências. Precisa ser pelo menos 250GiB. Se o nível de disco premium for selecionado no executor, os tamanhos válidos serão 375g, 750g, 1500g, 3000g, 6000g ou 9000g. Se o nível de disco premium e 16 núcleos de executor forem selecionados, o tamanho mínimo do disco será de 750g. 100GiB por núcleo 1024g, 2t
spark.dataproc.executor.disk.tier O nível de disco a ser usado para armazenamento local e de embaralhamento em executores. O nível de disco premium oferece melhor desempenho em IOPS e capacidade de processamento, mas é cobrado a uma taxa mais alta. Se o nível de disco premium for selecionado no executor, o nível de computação premium também precisará ser selecionado usando spark.dataproc.executor.compute.tier=premium, e a quantidade de espaço em disco precisará ser especificada usando spark.dataproc.executor.disk.size.

Se o nível de disco premium for selecionado, cada executor receberá mais 50 GiB de espaço em disco para armazenamento do sistema, que não pode ser usado por aplicativos do usuário.

standard standard, premium
spark.executor.instances O número inicial de executores a serem alocados. Depois que uma carga de trabalho em lote é iniciada, o escalonamento automático pode mudar o número de executores ativos. Precisa ser pelo menos 2 e no máximo 2000.

Propriedades do escalonamento automático

Consulte Propriedades de alocação dinâmica do Spark para obter uma lista de propriedades do Spark que podem ser usadas para configurar o escalonamento automático do Serviço Gerenciado para Apache Spark.

Propriedades de registro

Propriedade Descrição Padrão Exemplos
spark.log.level Quando definido, substitui todas as configurações de registro definidas pelo usuário com o efeito de uma chamada para SparkContext.setLogLevel() na inicialização do Spark. Os níveis de registro válidos incluem: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE e WARN. INFO, DEBUG
spark.executor.syncLogLevel.enabled Quando definido como true, o nível de registro aplicado pelo método SparkContext.setLogLevel() é propagado para todos os executores. false true, false
spark.log.level.PackageName Quando definido, substitui todas as configurações de registro definidas pelo usuário com o efeito de uma chamada para SparkContext.setLogLevel(PackageName, level) na inicialização do Spark. Os níveis de registro válidos incluem: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE e WARN. spark.log.level.org.apache.spark=error

Propriedades de programação

Propriedade Descrição Padrão Exemplos
spark.scheduler.excludeShuffleSkewExecutors Exclua os executores distorcidos do mapa de embaralhamento ao programar, o que pode reduzir longos tempos de espera de busca de embaralhamento causados pela distorção de gravação de embaralhamento. false true
spark.scheduler.shuffleSkew.minFinishedTasks Número mínimo de tarefas de mapa de embaralhamento concluídas em um executor para tratar como distorção. 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber Número máximo de executores a serem tratados como distorção. Os executores distorcidos são excluídos da rodada de programação atual. 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio Proporção máxima de executores totais a serem tratados como distorção. Os executores distorcidos são excluídos da programação. 0,05 0.1
spark.scheduler.shuffleSkew.ratio Um múltiplo das tarefas médias de mapa de embaralhamento concluídas em um executor para tratar como distorção. 1.5 2.0

Outras propriedades

Propriedade Descrição
dataproc.diagnostics.enabled Ative essa propriedade para executar diagnósticos em uma falha ou cancelamento de carga de trabalho em lote. Se os diagnósticos estiverem ativados, a carga de trabalho em lote continuará usando recursos de computação após a conclusão da carga de trabalho até que os diagnósticos sejam concluídos. Um URI que aponta para o local do arquivo tar de diagnóstico é listado no Batch.RuntimeInfo.diagnosticOutputUri campo da API.
dataproc.gcsConnector.version Use essa propriedade para fazer upgrade para uma versão do conector do Cloud Storage diferente da versão instalada com a carga de trabalho em lote versão do ambiente de execução.
dataproc.sparkBqConnector.version Use essa propriedade para fazer upgrade para uma versão do conector do Spark BigQuery diferente da versão instalada com a carga de trabalho em lote versão do ambiente de execução (consulte Usar o conector do BigQuery com o Serviço Gerenciado para Apache Spark).
dataproc.profiling.enabled Defina essa propriedade como true para ativar a criação de perfil para a carga de trabalho do Serviço Gerenciado para Apache Spark.
dataproc.profiling.name Use essa propriedade para definir o nome usado para criar um perfil no Profiler serviço.
spark.jars Use essa propriedade para definir a lista de jars separados por vírgulas a serem incluídos nos caminhos de classe do driver e do executor.
spark.archives Use essa propriedade para definir a lista de arquivos separados por vírgulas a serem extraídos para o diretório de trabalho de cada executor. Os formatos .jar, .tar.gz, .tgz e .zip são compatíveis. Para sessões interativas sem servidor, adicione essa propriedade ao criar uma sessão/modelo interativo.
dataproc.artifacts.remove Use essa propriedade para remover artefatos padrão instalados em ambientes de execução do Serviço Gerenciado para Apache Spark. Os artefatos compatíveis são spark-bigquery-connector, conscrypt, iceberg e delta-lake.