Minimizar a sobrecarga de planejamento
Conforme analisado em Principais tópicos do Apache Spark, o driver do Spark gera o plano de execução. Com base nesse plano, as tarefas são atribuídas ao executor do Spark para processamento distribuído. No entanto, o driver do Spark pode se tornar um gargalo se houver um grande número de arquivos pequenos ou se o AWS Glue Data Catalog contiver um grande número de partições. Para identificar a alta sobrecarga de planejamento, avalie as métricas a seguir.
métricas do CloudWatch
Verifique a Carga da CPU e a Utilização da memória nas seguintes situações:
-
A Carga da CPU e a Utilização da memória do driver do Spark estão registradas como altas. Normalmente, o driver do Spark não processa seus dados, portanto, a carga da CPU e a utilização da memória não têm picos. No entanto, se a fonte de dados do Amazon S3 tiver muitos arquivos pequenos, listar todos os objetos do S3 e gerenciar um grande número de tarefas pode fazer com que a utilização dos recursos seja alta.
-
Há uma grande lacuna antes do início do processamento no executor do Spark. No exemplo de captura de tela a seguir, a carga da CPU do executor do Spark está muito baixa até 10:57, mesmo que o trabalho do AWS Glue tendo começado às 10:00. Isso indica que o driver do Spark pode estar demorando muito para gerar um plano de execução. Neste exemplo, recuperar o grande número de partições no Catálogo de Dados e listar o grande número de arquivos pequenos no driver do Spark está demorando muito.
IU do Spark
Na guia Trabalho na interface do usuário do Spark, você pode ver o horário de Envio. No exemplo a seguir, o driver do Spark iniciou o job0 às 10:56:46, embora o trabalho do AWS Glue tenha começado às 10:00:00.
Você também pode ver o horário das Tarefas (para todas as etapas): Com êxito/Total na guia Trabalho. Nesse caso, o número de tarefas é registrado como 58100. Conforme explicado na seção do Amazon S3 da página Paralelizar tarefas, o número de tarefas corresponde aproximadamente ao número de objetos do S3. Isso significa que há cerca de 58.100 objetos no Amazon S3.
Para obter mais detalhes sobre esse trabalho e o cronograma, revise a guia Etapa. Se você observar um gargalo com o driver do Spark, considere as seguintes soluções:
-
Quando o Amazon S3 tem muitos arquivos, considere a orientação sobre paralelismo excessivo na seção Muitas partições da página Paralelizar tarefas.
-
Quando o Amazon S3 tem muitas partições, considere a orientação sobre particionamento excessivo na seção Muitas partições do Amazon S3 da página Reduzir a quantidade de dados verificados. Habilite os índices de partição do AWS Glue se houver muitas partições para reduzir a latência na recuperação de metadados de partições do Catálogo de Dados. Para obter mais informações, consulte Improve query performance using AWS Glue partition indexes
. -
Quando o JDBC tiver muitas partições, diminua o valor de
hashpartition. -
Quando o DynamoDB tiver muitas partições, diminua o valor de
dynamodb.splits. -
Quando os trabalhos de streaming tiverem muitas partições, diminua o número de fragmentos.