O AnalyticDB for MySQL Enterprise Edition, Basic Edition e Data Lakehouse Edition (V3.0) oferece o recurso de diagnóstico de aplicações Spark. Caso uma aplicação Spark enviada por você apresente problemas de desempenho, utilize as informações de diagnóstico para localizar e analisar rapidamente gargalos, otimizar a aplicação e aumentar a eficiência na resolução de problemas. Este tópico descreve como diagnosticar o desempenho de aplicações Spark e fornece exemplos práticos.
Pré-requisitos
Você criou um cluster do AnalyticDB for MySQL Data Lakehouse Edition (V3.0). Para mais informações, consulte Criar um cluster.
Você criou um grupo de recursos de job com pelo menos 8 ACUs de recursos de computação reservados. Para mais informações, consulte Criar e gerenciar grupos de recursos.
Você concedeu a permissão AliyunADBDeveloperAccess a um usuário do Resource Access Management (RAM). Para mais informações, consulte Usuários e permissões do RAM.
Uma conta de banco de dados foi criada para o cluster do AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition.
O AnalyticDB for MySQL está autorizado a assumir a função AliyunADBSparkProcessingDataRole para acessar outros recursos da nuvem.
Casos de uso
Este recurso é utilizado principalmente nos seguintes cenários:
Análise de desempenho de conjuntos de dados: ao processar dados em grande escala com o Spark, a análise de desempenho é essencial. A ferramenta de diagnóstico ajuda a identificar rapidamente gargalos, como picos de memória e spills em disco, melhorando a eficiência do processamento de dados.
Balanceamento de carga para aplicações de grande escala: quando aplicações Spark executam sob cargas de trabalho de alta concorrência, podem ocorrer problemas como skew de dados, tarefas long-tail e desequilíbrio de carga. O diagnóstico da aplicação permite identificar essas questões rapidamente para que você possa otimizá-la.
Limitações
É possível diagnosticar apenas aplicações Spark concluídas com sucesso nos últimos 14 dias.
Somente aplicações em batch e streaming são suportadas.
Procedimento
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo do console, selecione uma região. No painel de navegação à esquerda, clique em Clusters. Localize o cluster que deseja gerenciar e clique em ID do cluster.
No painel de navegação à esquerda, escolha Job Development>Spark JAR Development.
Na seção Workspaces, localize a aplicação desejada e escolha More > History na coluna Actions.
-
Na seção Tuning History, localize a tarefa alvo e clique em Diagnose na coluna Actions.
NotaApós a conclusão do diagnóstico, o painel Diagnostic Optimization Details abre automaticamente. Se a aplicação apresentar problemas de desempenho, use as informações neste painel para otimizá-la.
Exemplos de diagnóstico
Os exemplos a seguir mostram problemas comuns de desempenho identificados pelo diagnóstico de aplicações Spark. Se sua aplicação apresentar qualquer um desses problemas, utilize as soluções recomendadas para otimizá-la.
Exemplo 1: Skew de dados durante a fase de shuffle
Regra de anomalia
Uma única tarefa lê mais de cinco vezes a mediana de registros durante um shuffle.
Otimização
Defina spark.sql.shuffle.partitions como 2 a 3 vezes o número de núcleos dos executores Spark para redistribuir os dados entre as tarefas.
Atualize sua lógica de negócios e filtre outliers no conjunto de dados antes da fase de shuffle.
Adicione um número aleatório como chave no operador GroupBy ou ReduceBy para fragmentar os dados durante as fases map e reduce. Em seguida, remova o número aleatório na fase reduce.
Com base nos requisitos do seu negócio, aumente o valor de spark.shuffle.file.buffer ou spark.reducer.maxSizeInFlight para melhorar o desempenho do shuffle.
Exemplo 2: Baixa utilização de CPU
Regra de anomalia
O tempo total de CPU usado pelas tarefas em um executor Spark é inferior a 35% do tempo total de execução do executor.
Otimização
Modifique spark.executor.resourceSpec para reduzir a especificação e diminuir o número de núcleos.
Altere seu código de negócios para reduzir o número de partições RDD.
Se ocorrer um shuffle, modifique spark.sql.shuffle.partitions para aumentar o número de tarefas.
Exemplo 3: Tempo excessivo de garbage collection (GC) da JVM
Regra de anomalia
O tempo de GC da JVM representa mais de 20% do tempo total de execução.
Otimização
Modifique spark.executor.resourceSpec para aumentar a especificação.
Ajuste os parâmetros relevantes. Para mais informações, consulte Garbage Collection Tuning.
Exemplo 4: Volume excessivo de dados por tarefa
Regra de anomalia
Uma única tarefa em um estágio processa mais de 200 MB de dados.
Otimização
Aumente o valor do parâmetro spark.default.parallelism ou spark.sql.shuffle.partitions para ajustar o particionamento de dados e elevar o grau de paralelismo.
Exemplo 5: Spill excessivo em disco
Regra de anomalia
A quantidade de dados despejada em disco é maior que a quantidade de dados despejada da memória.
Otimização
Modifique spark.executor.resourceSpec para aumentar a especificação e reduzir o spill em disco.
Exemplo 6: Tarefas long-tail
Regra de anomalia
O tempo de execução da tarefa mais lenta em um estágio é superior a 1,5 vez a mediana do tempo de execução das tarefas desse estágio.
Otimização
Defina spark.sql.shuffle.partitions como 2 a 3 vezes o número de núcleos dos executores Spark para que os dados sejam redistribuídos entre diferentes tarefas.
Atualize sua lógica de negócios e filtre outliers no conjunto de dados.