Os parâmetros de configuração do Spark no AnalyticDB for MySQL são semelhantes aos do Apache Spark. Este tópico descreve os parâmetros de configuração do AnalyticDB for MySQL que diferem dos parâmetros do Apache Spark.
Observações de uso
Os parâmetros de configuração de aplicações Spark servem para ajustar o comportamento e o desempenho dessas aplicações. O formato desses parâmetros varia conforme a ferramenta de desenvolvimento Spark utilizada.
|
Ferramenta de desenvolvimento |
Formato do parâmetro de configuração |
Exemplo de configuração |
|
Editor SQL |
set key=value; |
|
|
Editor Spark Jar |
"key": "value" |
|
|
Editor Notebook |
"key": "value" |
|
|
Interface de linha de comando spark-submit |
key=value |
|
Especifique recursos de Driver e Executor
Parâmetro | Obrigatório | Valor padrão | Descrição | Parâmetro correspondente no Apache Spark |
spark.adb.acuPerApp | Não | Nenhum | Número de ACUs utilizadas por um único job Spark. Valores válidos: [2, Recursos máximos de computação de um grupo de recursos de job]. Após configure este parâmetro, o sistema calcula e define automaticamente as especificações do Spark Driver, as especificações do Spark Executor e o número de nós do Spark Executor. | N/A |
spark.driver.resourceSpec | Sim | medium | Especificações de recursos do driver Spark. Cada tipo corresponde a especificações distintas. Para mais informações, consulte a coluna Tipo na tabela Especificações de recursos do Spark deste tópico. Importante Caso envie aplicações Spark, utilize os parâmetros do Apache Spark e configure-os com base nos valores de núcleos e memória descritos na tabela Especificações de recursos do Spark deste tópico. Exemplo: | spark.driver.cores e spark.driver.memory |
spark.executor.resourceSpec | Sim | medium | Especificações de recursos de cada executor Spark. Cada tipo corresponde a especificações distintas. Para mais informações, consulte a coluna Tipo na tabela Especificações de recursos do Spark deste tópico. Importante Caso envie aplicações Spark, utilize os parâmetros do Apache Spark e configure-os com base nos valores de núcleos e memória descritos na tabela Especificações de recursos do Spark deste tópico. Exemplo: | spark.executor.cores e spark.executor.memory |
spark.executor.instances | Não | Recursos máximos de computação de um grupo de recursos de job/5 | Quantidade de executores Spark iniciados. | spark.executor.instances |
spark.adb.driverDiskSize | Não | Nenhum | Tamanho do armazenamento adicional em disco montado no driver Spark para atender a grandes demandas de armazenamento. Por padrão, o armazenamento adicional é montado no diretório /user_data_dir. Unidade: GiB. Valores válidos: (0.100]. Exemplo: spark.adb.driverDiskSize=50Gi. Neste exemplo, o armazenamento adicional em disco montado no driver Spark é definido como 50 GiB. | N/A |
spark.adb.executorDiskSize | Não | Nenhum | Tamanho do armazenamento adicional em disco montado em um executor Spark para atender aos requisitos de operações shuffle. Por padrão, o armazenamento adicional é montado no diretório /shuffle_volume. Unidade: GiB. Valores válidos: (0.100]. Exemplo: spark.adb.executorDiskSize=50Gi. Neste exemplo, o armazenamento adicional em disco montado em um executor Spark é definido como 50 GiB. | N/A |
Especificações de recursos do Spark
Utilize recursos reservados ou recursos elásticos para execute jobs Spark. Caso utilize recursos elásticos sob demanda de um grupo de recursos de job para execute jobs Spark, o sistema calcula o número de unidades de computação do AnalyticDB (ACUs) utilizadas com base nas especificações de recursos do Spark e na proporção CPU-memória, utilizando as seguintes fórmulas:
Proporção CPU-memória 1:2: Número de ACUs utilizadas = Número de núcleos de CPU × 0,8.
Proporção CPU-memória 1:4: Número de ACUs utilizadas = Número de núcleos de CPU × 1.
Proporção CPU-memória 1:8: Número de ACUs utilizadas = Número de núcleos de CPU × 1,5.
Para obter informações sobre os preços de recursos elásticos sob demanda, consulte Preços da Data Lakehouse Edition.
Tabela 1. Especificações de recursos do Spark
Tipo | Especificações | ACUs utilizadas | ||
Núcleos de CPU | Memória (GB) | Armazenamento em disco1 (GB) | ||
c.small | 1 | 2 | 20 | 0,8 |
small | 1 | 4 | 20 | 1 |
m.small | 1 | 8 | 20 | 1,5 |
c.medium | 2 | 4 | 20 | 1,6 |
medium | 2 | 8 | 20 | 2 |
m.medium | 2 | 16 | 20 | 3 |
c.large | 4 | 8 | 20 | 3,2 |
large | 4 | 16 | 20 | 4 |
m.large | 4 | 32 | 20 | 6 |
c.xlarge | 8 | 16 | 20 | 6,4 |
xlarge | 8 | 32 | 20 | 8 |
m.xlarge | 8 | 64 | 20 | 12 |
c.2xlarge | 16 | 32 | 20 | 12,8 |
2xlarge | 16 | 64 | 20 | 16 |
m.2xlarge | 16 | 128 | 20 | 24 |
m.4xlarge | 32 | 256 | 20 | 48 |
m.8xlarge | 64 | 512 | 20 | 96 |
1Armazenamento em disco: O sistema ocupa aproximadamente 1% do armazenamento em disco. O armazenamento disponível real pode ser inferior a 20 GB.
Exemplo
Aloque 32 Executors para um job Spark, sendo que cada Executor possui especificação medium (2 núcleos, 8 GB) e cada Driver possui especificação small (1 núcleo, 4 GB). Nesse caso, todo o job pode alocar um total de 65 ACUs de recursos de computação.
{
"spark.driver.resourceSpec":"small",
"spark.executor.resourceSpec":"medium",
"spark.executor.instances":"32",
"spark.adb.executorDiskSize":"100Gi"
}
Defina prioridades para jobs Spark
Parâmetro | Obrigatório | Valor padrão | Descrição |
spark.adb.priority | Não | NORMAL | Prioridade de um job Spark. Se os recursos forem insuficientes para execute todos os jobs Spark enviados, os jobs na fila com maior prioridade serão executados primeiro. Valores válidos:
Importante Recomendamos defina este parâmetro como HIGH para jobs Spark de streaming (jobs de stream de longa duração). |
Acesse os metadados
Parâmetro | Obrigatório | Valor padrão | Descrição |
spark.sql.catalogImplementation | Não |
| Tipo de metadados a serem acessados. Valores válidos:
|
spark.sql.hive.metastore.version | Não |
| Versão do service metastore. Valores válidos:
Nota
|
Exemplos
-
Configure a seguinte definição para acessar os metadados no AnalyticDB for MySQL:
spark.sql.hive.metastore.version=adb; -
Configure as seguintes definições para acessar os metadados no Hive Metastore integrado do Apache Spark:
spark.sql.catalogImplementation=hive; spark.sql.hive.metastore.version=2.1.3; -
Configure a seguinte definição para acessar os metadados no diretório temporário:
spark.sql.catalogImplementation=in-memory;
Configure a Spark UI
Parâmetro | Obrigatório | Valor padrão | Descrição |
spark.app.log.rootPath | Não |
| Diretório onde os logs de job do AnalyticDB for MySQL Spark e os dados de saída do sistema operacional Linux são armazenados. Por padrão, a pasta nomeada com o ID da aplicação Spark contém o seguinte conteúdo:
|
spark.adb.event.logUploadDuration | Não | false | Define se a duração do upload de um log de evento deve ser registrada. |
spark.adb.buffer.maxNumEvents | Não | 1.000 | Número máximo de eventos armazenados em cache pelo driver. |
spark.adb.payload.maxNumEvents | Não | 10.000 | Número máximo de eventos que podem ser enviados ao Object Storage Service (OSS) por vez. |
spark.adb.event.pollingIntervalSecs | Não | 0,5 | Intervalo entre dois uploads de eventos para o OSS. Unidade: segundos. Por exemplo, um valor de 0,5 indica que os eventos são enviados a cada 0,5 segundos. |
spark.adb.event.maxPollingIntervalSecs | Não | 60 | Intervalo máximo de nova tentativa quando falha o upload de um evento para o OSS. Unidade: segundos. O intervalo entre uma falha de upload e uma nova tentativa deve estar dentro do intervalo dos valores de |
spark.adb.event.maxWaitOnEndSecs | Não | 10 | Tempo máximo de espera para upload de eventos para o OSS. Unidade: segundos. O tempo máximo de espera é o intervalo entre o início e a conclusão de um upload. Se o upload não for concluído dentro do tempo máximo de espera, uma nova tentativa será realizada. |
spark.adb.event.waitForPendingPayloadsSleepIntervalSecs | Não | 1 | Tempo de espera necessário para tentar novamente um upload que não foi concluído dentro do valor de |
spark.adb.eventLog.rolling.maxFileSize | Não | 209.715.200 | Tamanho máximo de arquivo de logs de eventos no OSS. Unidade: bytes. Os logs de eventos são armazenados no OSS na forma de múltiplos arquivos, como Eventlog.0 e Eventlog.1. É possível especifique o tamanho do arquivo. |
Conceda permissões a usuários RAM
Parâmetro | Obrigatório | Valor padrão | Descrição |
spark.adb.roleArn | Não | N/A | ARN (Alibaba Cloud Resource Name) da função do Resource Access Management (RAM) que você deseja anexar ao usuário RAM no console RAM para conceder ao usuário RAM as permissões necessárias para submit aplicações Spark. Para mais informações, consulte Visão geral das funções RAM. Caso submit aplicações Spark como usuário RAM, especifique este parâmetro. Se submit aplicações Spark com uma conta Alibaba Cloud, não é necessário especifique este parâmetro. Nota Se já tiver concedido permissões a um usuário RAM no console RAM, não será necessário especifique este parâmetro. Para mais informações, consulte Autorização de conta. |
Ative os conectores de source de dados integrados
|
Parâmetro |
Obrigatório |
Valor padrão |
Descrição |
|
spark.adb.connectors |
Não |
N/A |
Nomes dos conectores integrados do AnalyticDB for MySQL Spark que você deseja ative. Separe vários nomes com vírgulas (,). Valores válidos: oss, hudi, delta, adb, odps, external_hive, jindo e default. |
|
spark.hadoop.io.compression.codec.snappy.native |
Não |
false |
Define se um arquivo Snappy está no formato Snappy padrão. Por padrão, o Hadoop reconhece os arquivos Snappy editados no Hadoop. Se defina este parâmetro como true, a biblioteca Snappy padrão será usada para descompressão. Se defina como false, a biblioteca Snappy padrão do Hadoop será usada para descompressão. |
Ative o acesso VPC e o acesso à source de dados
Parâmetro | Obrigatório | Valor padrão | Descrição |
spark.adb.eni.enabled | Não | false | Define se a Elastic Network Interface (ENI) deve ser ativada. Caso utilize tabelas externas para acessar outras fontes de dados externas, ative a ENI. Valores válidos:
|
spark.adb.eni.vswitchId | Não | N/A | ID do vSwitch associado a uma ENI. Ao conectar-se ao AnalyticDB for MySQL a partir de uma instância do Elastic Compute Service (ECS) via virtual private cloud (VPC), especifique um ID de vSwitch para a VPC. Nota Caso tenha ativado o acesso VPC, defina o parâmetro spark.adb.eni.enabled como true. |
spark.adb.eni.securityGroupId | Não | N/A | ID do grupo de segurança associado a uma ENI. Ao conectar-se ao AnalyticDB for MySQL a partir de uma instância ECS via VPC, especifique um ID de grupo de segurança. Nota Caso tenha ativado o acesso VPC, defina o parâmetro spark.adb.eni.enabled como true. |
spark.adb.eni.extraHosts | Não | N/A | Mapeamentos entre endereços IP e nomes de host. Este parâmetro permite que o Spark resolva os nomes de host das fontes de dados. Para acessar uma source de dados Hive autogerenciada, especifique este parâmetro. Nota
|
spark.adb.eni.adbHostAlias.enabled | Não | false | Define se as informações de resolução de nome de domínio exigidas pelo AnalyticDB for MySQL devem ser gravadas automaticamente em uma tabela de mapeamento de nomes de domínio e endereços IP. Valores válidos:
Ao utilizar uma ENI para ler ou gravar dados no EMR Hive, defina este parâmetro como true. |
Configure novas tentativas de aplicação
|
Parâmetro |
Obrigatório |
Valor padrão |
Descrição |
|
spark.adb.maxAttempts |
Não |
1 |
Número máximo de tentativas permitidas para execute uma aplicação. O valor padrão é 1, o que indica que nenhuma nova tentativa é permitida. Caso defina este parâmetro como 3 para uma aplicação Spark, o sistema tentará execute a aplicação até três vezes dentro de uma janela deslizante. |
|
spark.adb.attemptFailuresValidityInterval |
Não |
Integer.MAX |
Duração da janela deslizante na qual o sistema tenta reexecute uma aplicação. Unidade: segundos. Por exemplo, ao defina este parâmetro como 6.000 para uma aplicação Spark, o sistema contará o número de tentativas nos últimos 6.000 segundos após uma execução com falha. Se o número de tentativas for menor que o valor do parâmetro maxAttempts, o sistema tentará execute a aplicação novamente. |
Encerramento automático de job por tempo limite de agendamento (Scheduling Watchdog)
Quando os pods Executor de um job permanecem no estado Pending por um longo período devido à insuficiência de recursos subjacentes (como esgotamento de estoque ECI, estouro de cota de recursos ou afinidade de nó não atendível), o job continua aguardando, o que desperdiça recursos do Driver e bloqueia agendamentos subsequentes. Após ative este recurso, quando tanto a proporção de Executors não agendáveis quanto o tempo de espera atingirem os limiares especificados, o sistema marcará automaticamente o job como falho e liberará recursos para atingir um comportamento de falha rápida.
Cenários
Este recurso é adequado para cenários em que você execute um grande número de jobs Spark em um cluster compartilhado e deseja que os jobs falhem rapidamente em vez de esperar indefinidamente quando os recursos forem insuficientes. Os cenários típicos incluem:
Recursos ECI insuficientes: Ao usar Elastic Container Instance (ECI) para execute Executors, o estoque insuficiente para os tipos de instância subjacentes faz com que os pods permaneçam no estado Pending por muito tempo.
Estouro de cota de recursos: A cota de CPU ou memória do namespace ou grupo de recursos se esgota, impedindo o agendamento de novos Executors.
Novas tentativas rápidas para jobs em lote: Você deseja que os jobs falhem rapidamente quando os recursos estiverem indisponíveis, permitindo que um sistema de agendamento de camada superior (como o Airflow) decida a estratégia de nova tentativa.
Método de configuração
Ao submit um job Spark, configure os seguintes parâmetros para ative e ajustar o comportamento do Watchdog.
Parâmetro | Obrigatório | Valor padrão | Descrição |
spark.adb.terminateOnPending.enabled | Obrigatório quando o recurso está ativado | false | Define se o encerramento automático de job por tempo limite de agendamento deve ser ativado para o job. Valores válidos:
Este recurso vem desativado por padrão. Ele e os outros parâmetros só entram em vigor após você defina este parâmetro como true. |
spark.adb.terminateOnPending.timeoutSec | Não | 610 | Tempo de tolerância durante o qual um pod Executor permanece no estado Pending. Unidade: segundos. O cronômetro inicia quando um pod Executor é detectado pela primeira vez como não agendável. Quando o tempo de espera excede este valor e a condição spark.adb.terminateOnPending.executorRatio também é atendida, o job é encerrado. Valores recomendados: 610 a 900. |
spark.adb.terminateOnPending.executorRatio | Não | 0,5 | Limiar para a proporção de Executors não agendáveis que aciona o encerramento. Intervalo válido: (0, 1,0]. A proporção é calculada dividindo o número de Executors não agendáveis pelo número total esperado de Executors. Quando a proporção atinge este valor e o tempo de Pending excede spark.adb.terminateOnPending.timeoutSec, o job é encerrado. Um valor menor torna o acionamento mais sensível, e um valor maior torna o acionamento mais tolerante:
O número total esperado de Executors é determinado com base na seguinte prioridade:
|
O encerramento é acionado apenas quando ambas as condições spark.adb.terminateOnPending.executorRatio e spark.adb.terminateOnPending.timeoutSec são atendidas. O encerramento não ocorre se apenas o tempo de espera for excedido, mas a proporção não for atingida, ou se apenas a proporção for atingida, mas o tempo de espera for insuficiente.
Exemplo de configuração: ative o encerramento automático de job por tempo limite de agendamento para um job e encerre o job quando metade dos Executors permanecer não agendável por mais de 300 segundos.
{
"spark.adb.terminateOnPending.enabled":"true",
"spark.adb.terminateOnPending.timeoutSec":"300",
"spark.adb.terminateOnPending.executorRatio":"0.5"
}
Comportamento do job após o encerramento
Após o acionamento do encerramento, o job comporta-se da seguinte maneira:
Estado do job: O SparkApplication entra primeiro em
FailingStatee depois muda paraFailedState.Mensagem de erro:
status.appState.errorMessagecontém informações estruturadas de diagnóstico de falha.Pod Driver: O pod Driver é excluído proativamente para liberar recursos.
O exemplo a seguir mostra uma mensagem de erro:
[ResourceQuotaExceeded] executors unschedulable: 5/10 (50%) for 5m12s; threshold ratio≥50%, age≥5m0s
denom=10 (spec.executor.instances), distinct reasons=1, oldest pod=my-job-exec-3 (pending since 2026-06-01T10:16:34Z)
scheduler reason: Unschedulable
scheduler message: 0/1279 nodes are available: quota not enough, quotaName: amv-x
O conteúdo entre colchetes no início da mensagem de erro indica a causa da falha classificada automaticamente pelo sistema. A tabela a seguir descreve o significado de cada categoria e o tratamento recomendado.
|
Categoria de falha |
Significado |
Tratamento recomendado |
|
|
O pod ECI excedeu a duração máxima de Pending. |
Verifique o estoque de tipos de instância ECI ou mude para outro tipo de instância ECI. |
|
|
A cota de recursos é insuficiente. |
Entre em contato com o administrador para aumentar a cota ou reduza a concorrência do job. |
|
|
A CPU ou memória do cluster é insuficiente. |
Aguarde a liberação de recursos ou escale horizontalmente o cluster. |
O Watchdog apenas marca o job como falho. A decisão de tentar novamente o job posteriormente é controlada pela restartPolicy do job, consistente com o comportamento quando um job falha normalmente. Para mais informações sobre novas tentativas de aplicação, consulte a seção Configure novas tentativas de aplicação neste tópico.
Especifique um ambiente de execução para jobs Spark
A tabela a seguir descreve os parâmetros de configuração necessários ao utilizar a tecnologia de ambientes virtuais para empacotar um ambiente Python e submit jobs Spark.
|
Parâmetro |
Obrigatório |
Valor padrão |
Descrição |
|
spark.pyspark.python |
Não |
N/A |
Caminho do interpretador Python no seu dispositivo local. |
Especifique a versão do Spark
Parâmetro | Obrigatório | Valor padrão | Descrição |
spark.adb.version | Não | 3.2 | Versão do Spark. Valores válidos:
|
Mecanismo de execução vetorizada de alto desempenho
|
Parâmetro |
Obrigatório |
Valor padrão |
Descrição |
|
spark.adb.native.enabled |
Não |
false |
Define se o mecanismo de execução vetorizada de alto desempenho deve ser ativado para execute jobs. O mecanismo é integrado ao AnalyticDB for MySQL Spark e totalmente compatível com o Spark open source. Ative-o sem modificar seu código existente. |
Aceleração de armazenamento de lake
|
Parâmetro |
Obrigatório |
Valor padrão |
Descrição |
|
spark.adb.lakecache.enabled |
Não |
false |
Define se o LakeCache (aceleração de armazenamento de lake) deve ser ativado. |
Parâmetros de configuração não suportados pelo AnalyticDB for MySQL
O AnalyticDB for MySQL Spark não suporta os seguintes parâmetros de configuração do Apache Spark. Esses parâmetros não têm efeito no AnalyticDB for MySQL Spark.
Useless options(these options will be ignored):
--deploy-mode
--master
--packages, please use `--jars` instead
--exclude-packages
--proxy-user
--repositories
--keytab
--principal
--queue
--total-executor-cores
--driver-library-path
--driver-class-path
--supervise
-S,--silent
-i <filename>