Propriedades do Spark

Este documento descreve as propriedades do Spark e como as definir. O Serverless para Apache Spark usa propriedades do Spark para determinar os recursos de computação, memória e disco a atribuir à sua carga de trabalho em lote. Estas definições da propriedade podem afetar o consumo e o custo da quota da carga de trabalho. Para mais informações, consulte os artigos Quotas do Serverless para Apache Spark e Preços do Serverless para Apache Spark.

Defina as propriedades da carga de trabalho em lote do Spark

Pode especificar propriedades do Spark quando envia uma carga de trabalho em lote do Spark sem servidor para o Apache Spark através da Google Cloud consola, da CLI gcloud ou da API Dataproc.

Consola

  1. Na Google Cloud consola, aceda à página Criar lote do Dataproc.

    Aceda a Criar lote do Dataproc

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

  3. Introduza o Key (nome) e o Value de uma propriedade do Spark suportada.

gcloud

Exemplo de envio em lote da CLI gcloud:

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

API

Defina RuntimeConfig.properties com propriedades do Spark suportadas como parte de um pedido batches.create.

Propriedades do Spark suportadas

O Serverless para Apache Spark suporta a maioria das propriedades do Spark, mas não suporta propriedades do Spark relacionadas com o YARN e a mistura, como spark.master=yarn e spark.shuffle.service.enabled. Se o código da aplicação Spark definir uma propriedade YARN ou de mistura, a aplicação falha.

Propriedades do ambiente de tempo de execução

O Serverless for Apache Spark suporta as seguintes propriedades personalizadas do Spark para configurar o ambiente de tempo de execução:

Propriedade Descrição
spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME Adicione ENVIRONMENT_VARIABLE_NAME ao processo do controlador. Pode especificar várias variáveis de ambiente.
spark.executorEnv.ENVIRONMENT_VARIABLE_NAME Adicionar ENVIRONMENT_VARIABLE_NAME/var> to the executor process. You can specify multiple environment variables.

Propriedades de atribuição de recursos

O Serverless para Apache Spark suporta as seguintes propriedades do Spark para configurar a atribuição de recursos:

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

A quantidade de memória a atribuir ao processo do controlador do Spark, especificada no formato de string de memória da JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

Memória total do controlador por núcleo do controlador, incluindo a sobrecarga de memória do controlador, que tem de 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.

512m, 2g
spark.driver.memoryOverhead

A quantidade de memória JVM adicional a atribuir ao processo do controlador do Spark, especificada no formato de string de memória JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

Esta é a memória não heap associada aos custos gerais da JVM, strings internas e outros custos gerais nativos, e inclui a memória usada por outros processos de controlador, como processos de controlador do PySpark, e a memória usada por outros processos não de controlador em execução no contentor. O tamanho máximo da memória do contentor no qual o controlador é executado é determinado pela soma de spark.driver.memoryOverhead mais spark.driver.memory.

A memória total do controlador por núcleo do controlador, incluindo a sobrecarga de memória do controlador, tem de 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 controlador, exceto para cargas de trabalho em lote do PySpark, que têm como predefinição 40% da memória do controlador 512m, 2g
spark.dataproc.driver.compute.tier O nível de computação a usar no controlador. O nível de computação Premium oferece um desempenho por núcleo mais elevado, mas é faturado a uma taxa mais elevada. padrão padrão, premium
spark.dataproc.driver.disk.size A quantidade de espaço em disco alocada ao controlador, especificada com um sufixo de unidade de tamanho ("k", "m", "g" ou "t"). Tem de ser pelo menos 250GiB. Se o nível do disco Premium estiver selecionado no controlador, os tamanhos válidos são 375 g, 750 g, 1500 g, 3000 g, 6000 g ou 9000 g. Se o nível de disco Premium e 16 núcleos de controladores estiverem selecionados, o tamanho mínimo do disco é de 750 g. 100GiB por núcleo 1024g, 2t
spark.dataproc.driver.disk.tier O nível do disco a usar para o armazenamento local e aleatório no controlador. O nível de disco Premium oferece um melhor desempenho em IOPS e débito, mas é faturado a uma taxa mais elevada. Se o nível do disco Premium estiver selecionado no controlador, o nível de computação Premium também tem de ser selecionado através de spark.dataproc.driver.compute.tier=premium, e a quantidade de espaço em disco tem de ser especificada através de spark.dataproc.executor.disk.size.

Se o nível de disco Premium estiver selecionado, o controlador atribui 50 GiB adicionais de espaço em disco para armazenamento do sistema, que não é utilizável pelas aplicações do utilizador.

padrão padrão, premium
spark.executor.cores O número de núcleos (vCPUs) a atribuir a cada executor do Spark. Valores válidos: 4, 8, 16. 4
spark.executor.memory

A quantidade de memória a atribuir a 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 do executor, incluindo a sobrecarga da memória do executor, tem de 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.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 atribuir ao processo do executor do Spark, especificada no formato de string de memória JVM com um sufixo de unidade de tamanho ("m", "g" ou "t").

Esta é a memória não heap usada para custos gerais da JVM, strings internas e outros custos gerais nativos, e inclui a memória do executor do PySpark e a memória usada por outros processos não executores em execução no contentor. O tamanho máximo da memória do contentor no qual 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 da memória do executor, tem de 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.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 como predefinição 40% da memória do executor 512m, 2g
spark.dataproc.executor.compute.tier O nível de computação a usar nos executores. O nível de computação Premium oferece um desempenho por núcleo mais elevado, mas é faturado a uma taxa mais elevada. padrão padrão, premium
spark.dataproc.executor.disk.size A quantidade de espaço em disco atribuída a 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 aleatorização e para preparar dependências. Tem de ser pelo menos 250GiB. Se o nível do disco Premium estiver selecionado no executor, os tamanhos válidos são 375 g, 750 g, 1500 g, 3000 g, 6000 g ou 9000 g. Se o nível do disco Premium e 16 núcleos do executor forem selecionados, o tamanho mínimo do disco é de 750 GB. 100GiB por núcleo 1024g, 2t
spark.dataproc.executor.disk.tier O nível de disco a usar para armazenamento local e aleatório nos executores. O nível de disco Premium oferece um melhor desempenho em IOPS e débito, mas é faturado a uma taxa mais elevada. Se o nível do disco Premium estiver selecionado no executor, o nível de computação Premium também tem de ser selecionado através de spark.dataproc.executor.compute.tier=premium, e a quantidade de espaço no disco tem de ser especificada através de spark.dataproc.executor.disk.size.

Se o nível de disco Premium estiver selecionado, cada executor recebe uma atribuição adicional de 50 GiB de espaço em disco para armazenamento do sistema, que não é utilizável pelas aplicações do utilizador.

padrão padrão, premium
spark.executor.instances O número inicial de executores a atribuir. Após o início de uma carga de trabalho em lote, o ajuste de escala automático pode alterar o número de executores ativos. Tem de ser pelo menos 2 e, no máximo, 2000.

Propriedades da escala automática

Consulte as propriedades de atribuição dinâmica do Spark para ver uma lista das propriedades do Spark que pode usar para configurar o escalamento automático sem servidor para o Apache Spark.

Propriedades de registo

Propriedade Descrição Predefinição Exemplos
spark.log.level Quando definida, substitui todas as definições de registo definidas pelo utilizador com o efeito de uma chamada para SparkContext.setLogLevel() no início do Spark. Os níveis de registo 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 registo aplicado através do método SparkContext.setLogLevel() é propagado a todos os executores. false true, false
spark.log.level.PackageName Quando definida, substitui todas as definições de registo definidas pelo utilizador com o efeito de uma chamada para SparkContext.setLogLevel(PackageName, level) no início do Spark. Os níveis de registo válidos incluem: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE e WARN. spark.log.level.org.apache.spark=error

Propriedades de agendamento

Propriedade Descrição Predefinição Exemplos
spark.scheduler.excludeShuffleSkewExecutors Exclua executores com mapa aleatório enviesado ao agendar, o que pode reduzir os tempos de espera de obtenção aleatória longos causados pelo enviesamento de escrita aleatória. false true
spark.scheduler.shuffleSkew.minFinishedTasks Número mínimo de tarefas de mapa de mistura concluídas num executor para tratar como desvio. 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber Número máximo de executores a tratar como desvio. Os executores com desvio são excluídos da ronda de agendamento atual. 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio Rácio máximo de executores totais a tratar como desvio. Os executores com desvio são excluídos do agendamento. 0,05 0.1
spark.scheduler.shuffleSkew.ratio Um múltiplo das tarefas de mapa de aleatorização concluídas médias num executor a tratar como desvio. 1,5 2.0

Outras propriedades

Propriedade Descrição
dataproc.diagnostics.enabled Ative esta propriedade para executar diagnósticos numa falha ou num cancelamento de carga de trabalho em lote. Se os diagnósticos estiverem ativados, a carga de trabalho em lote continua a usar recursos de computação após a conclusão da carga de trabalho até os diagnósticos terminarem. Um URI que aponta para a localização do ficheiro TAR.GZ de diagnósticos é apresentado no campo da API Batch.RuntimeInfo.diagnosticOutputUri.
dataproc.gcsConnector.version Use esta propriedade para atualizar para uma versão do conector do Cloud Storage diferente da versão instalada com a versão de tempo de execução da carga de trabalho em lote.
dataproc.sparkBqConnector.version Use esta propriedade para atualizar para uma versão do conetor do BigQuery para o Spark diferente da versão instalada com a versão de tempo de execução da sua carga de trabalho em lote (consulte Use o conetor do BigQuery com o Serverless para Apache Spark).
dataproc.profiling.enabled Defina esta propriedade como true para ativar a criação de perfis para a carga de trabalho Serverless for Apache Spark.
dataproc.profiling.name Use esta propriedade para definir o nome usado para criar um perfil no serviço Profiler.
spark.jars Use esta propriedade para definir a lista separada por vírgulas de ficheiros JAR a incluir nos caminhos de classe do controlador e do executor
spark.archives Use esta propriedade para definir a lista de arquivos separada por vírgulas a extrair para o diretório de trabalho de cada executor. São suportados os formatos .jar, .tar.gz, .tgz e .zip. Para sessões interativas sem servidor, adicione esta propriedade quando criar uma sessão/modelo interativo