Propriedades do Spark

O Dataproc sem servidor usa propriedades do Spark para determinar os recursos de computação, memória e disco para alocar à carga de trabalho em lote. Essas configurações de propriedade podem afetar o consumo e o custo da cota da carga de trabalho. Consulte Cotas do Dataproc sem servidor e Preços do Dataproc sem servidor para saber mais informações).

Definir propriedades de carga de trabalho em lote do Spark

É possível especificar propriedades do Spark ao enviar uma carga de trabalho em lote do Spark sem servidor do Dataproc usando o console do Google Cloud, a CLI gcloud ou a API Dataproc.

Console

  1. Acesse a página "Criar lote do Dataproc" no console do Google Cloud.

  2. na seção Propriedades, clique em Adicionar propriedade e insira o Key (nome) e Value de uma propriedade do Spark com suporte.

gcloud

Exemplo de envio em lote da CLI gcloud:

gcloud dataproc batches submit spark
    --properties=spark.checkpoint.compress=true \
    --region=region \
    other args ...

API

Definir RuntimeConfig.properties com propriedades do Spark compatíveis como parte de uma batches.create solicitação.

Propriedades do Spark compatíveis

O Dataproc sem servidor para Spark dá suporte à maioria das propriedades do Spark, mas não oferece suporte a propriedades do Spark relacionadas a YARN e embaralhamento, como spark.master=yarn e spark.shuffle.service.enabled. Se o aplicativo Spark código define uma propriedade YARN ou de embaralhamento, o aplicativo falhará.

Propriedades do ambiente de execução

O Dataproc Serverless para Spark oferece suporte às seguintes propriedades personalizadas do Spark para configurar o ambiente de execução:

Propriedade Descrição
spark.dataproc.driverEnv.EnvironmentVariableName Adicione o EnvironmentVariableName ao processo do driver. Você pode especificar diversas variáveis de ambiente.

Propriedades de alocação de recursos

O Dataproc sem servidor para 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. especificado no formato de string de memória da JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

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 adicional da JVM a ser alocada para o driver do Spark processo, especificado no formato de string de memória da JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

Essa é a 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 os processos de driver do PySpark e a memória usada por outros processos que não são de 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 mais spark.driver.memory.

Memória total do driver por núcleo do driver, incluindo sobrecarga de memória, precisa estar entre 1024m e 7424m para o Nível de computação Standard (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, o padrão é 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 melhor desempenho por núcleo, mas é cobrado a uma taxa mais alta. standard padrão, premium
spark.dataproc.driver.disk.size A quantidade de espaço em disco alocada 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 estiver selecionado no driver, os tamanhos válidos são 375g, 750g, 1.500g, 3.000g, 6.000g ou 9.000g. 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, 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.executor.disk.size.

Se o nível de disco Premium for selecionado, o driver vai alocar 50 GiB adicionais de espaço em disco para armazenamento do sistema, que não é utilizável pelos aplicativos do usuário.

standard padrão, 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. especificado 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 do executor, 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 adicional da JVM a ser alocada para o Spark processo do executor, especificado no formato de string de memória da JVM com uma unidade de tamanho sufixo ("m", "g" ou "t").

Essa é uma memória não heap usada para overhead de JVM, strings internas e outras sobrecargas nativas, além de incluir a memória do executor do PySpark e memória usada por outros processos sem executor 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 mais spark.executor.memory.

A memória total do executor por núcleo do executor, 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 têm o padrão de 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 melhor desempenho por núcleo, mas é cobrado a uma taxa mais alta. standard padrão, premium
spark.dataproc.executor.disk.size A quantidade de espaço em disco alocada para cada executor. especificado 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 estágios de dependências. Precisa ser pelo menos 250GiB. Se o nível de disco Premium for selecionado no executor, os tamanhos válidos serão 375 g, 750 g, 1.500 g, 3.000 g, 6.000 g ou 9.000 g. Se o nível Premium o nível do disco e 16 núcleos do executor são selecionados, o tamanho mínimo do disco é de 750 g. 100GiB por núcleo 1024g, 2t
spark.dataproc.executor.disk.tier O nível de disco a ser usado para armazenamento local e embaralhar em executores. O nível de disco Premium oferece melhor desempenho em IOPS e capacidade, mas é cobrado a uma taxa mais alta. Se o nível de disco Premium for selecionado executor, o nível de computação Premium também precisa ser selecionado com spark.dataproc.executor.compute.tier=premium, e a quantidade de espaço em disco deve ser especificada usando spark.dataproc.executor.disk.size.

Se o nível de disco Premium for selecionado, cada executor será alocado mais 50 GiB de espaço em disco para armazenamento do sistema, utilizáveis pelos aplicativos do usuário.

standard padrão, premium
spark.executor.instances O número inicial de executores a serem alocados. Após uma carga de trabalho em lote for iniciado, o escalonamento automático pode alterar 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 conferir uma lista de propriedades do Spark que podem ser usadas para configurar o escalonamento automático do Dataproc sem servidor.

Propriedades de registro

Propriedade Descrição Padrão Exemplos
spark.log.level Quando definido, substitui qualquer configuração de registro definida pelo usuário com o efeito da 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 o método SparkContext.setLogLevel() é propagada 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 executores de mapa de ordenação aleatória com distorção ao programar. Isso pode reduzir tempos de espera de busca de ordenação aleatória longos causados por distorção de gravação de ordenação aleatória. false true
spark.scheduler.shuffleSkew.minFinishedTasks Número mínimo de tarefas de mapa de shuffle concluídas em um executor para tratamento como distorção. 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber Número máximo de executores a serem tratados como distorcidos. Executores desviados estão excluídos da rodada atual de agendamento. 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio Proporção máxima do total de executores a ser tratado como desvio. Executores desviados estão excluídos da programação. 0,05 0.1
spark.scheduler.shuffleSkew.ratio Um múltiplo da média das tarefas de embaralhamento concluídas no mapa executor a ser tratado como desvio. 1.5 2.0

Outras propriedades

Propriedade Descrição
dataproc.diagnostics.enabled Ative essa propriedade para executar diagnósticos em uma falha de carga de trabalho em lote ou cancelamento. Se os diagnósticos estiverem ativados, a carga de trabalho em lote continuará a usar recursos de computação a carga de trabalho até que o diagnóstico seja concluído. Um URI que aponta para o local do tarball de diagnóstico está listado no Batch.RuntimeInfo.diagnosticOutputUri.
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 versão do ambiente de execução da sua carga de trabalho em lote.
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 versão de execução da sua carga de trabalho em lote. Consulte Usar o conector do BigQuery com o Dataproc sem servidor para Spark.
dataproc.profiling.enabled Defina essa propriedade como true para ativar o perfil da carga de trabalho do Dataproc sem servidor.
dataproc.profiling.name Use essa propriedade para definir o nome usado para criar um perfil na Profiler.