Apresentando a solução de problemas de IA generativa para Apache Spark no AWS Glue (pré-visualização)


As organizações executam milhões de aplicativos Apache Spark todos os meses para preparar, mover e processar seus dados para análise e aprendizado de máquina (ML). Construir e manter esses aplicativos Spark é um processo iterativo, onde os desenvolvedores gastam um tempo significativo testando e solucionando problemas em seu código. Durante o desenvolvimento, os engenheiros de dados muitas vezes passam horas examinando arquivos de log, analisando planos de execução e fazendo alterações na configuração para resolver problemas. Esse processo se torna ainda mais desafiador em ambientes de produção devido à natureza distribuída do Spark, ao seu modelo de processamento na memória e à infinidade de opções de configuração disponíveis. A solução desses problemas de produção requer uma análise extensiva de logs e métricas, muitas vezes levando a tempos de inatividade prolongados e atrasos em insights de pipelines de dados críticos.

Hoje, temos o prazer de anunciar a prévia da solução de problemas de IA generativa para Spark em Cola AWS. Este é um novo recurso que permite que engenheiros e cientistas de dados identifiquem e resolvam rapidamente problemas em seus aplicativos Spark. Esse recurso usa tecnologias de ML e IA generativa para fornecer análise automatizada de causa raiz para aplicativos Spark com falha, juntamente com recomendações acionáveis ​​e etapas de correção. Esta postagem demonstra como você pode depurar seus aplicativos Spark com solução de problemas de IA generativa.

Como funciona a solução de problemas generativos de IA para Spark

Para trabalhos do Spark, o recurso de solução de problemas analisa metadados, métricas e logs do trabalho associados à assinatura de erro do seu trabalho para gerar uma análise abrangente da causa raiz. Você pode iniciar o processo de solução de problemas e otimização com um único clique no console do AWS Glue. Com esse recurso, você pode reduzir o tempo médio de resolução de dias para minutos, otimizar seus aplicativos Spark em termos de custo e desempenho e se concentrar mais na obtenção de valor de seus dados.

A depuração guide de aplicativos Spark pode ser um desafio para engenheiros de dados e desenvolvedores de ETL devido a alguns motivos diferentes:

  • Amplas opções de conectividade e configuração a uma variedade de recursos com o Spark, ao mesmo tempo que o torna uma plataforma de processamento de dados well-liked, muitas vezes dificulta a causa raiz de problemas quando as configurações não estão corretas, especialmente relacionadas à configuração de recursos (bucket S3, bancos de dados, partições, colunas resolvidas) e permissões de acesso ( funções e chaves).
  • Modelo de processamento na memória do Spark e particionamento distribuído de conjuntos de dados entre seus trabalhadores, embora sejam bons para o paralelismo, muitas vezes dificultam que os usuários identifiquem a causa raiz de falhas resultantes de problemas de esgotamento de recursos, como falta de memória e exceções de disco.
  • Avaliação preguiçosa de transformações Spark embora seja bom para o desempenho, torna difícil identificar com precisão e rapidez o código e a lógica do aplicativo que causou a falha nos logs distribuídos e nas métricas emitidas por diferentes executores.

Vejamos alguns cenários comuns e complexos de solução de problemas do Spark, onde a solução de problemas de IA generativa para Spark pode economizar horas de depuração guide necessárias para se aprofundar e encontrar a causa raiz exata.

Erros de configuração ou acesso de recursos

Os aplicativos Spark permitem integrar dados de uma variedade de recursos, como conjuntos de dados com várias partições e colunas em buckets S3 e tabelas do Information Catalog, usar as funções IAM de trabalho associadas e chaves KMS para obter permissões corretas para acessar esses recursos e exigir que esses recursos existam e estar disponíveis nas regiões e locais corretos referenciados por seus identificadores. Os usuários podem configurar incorretamente seus aplicativos, o que resulta em erros que exigem uma análise profunda dos logs para entender a causa raiz de um problema de configuração ou permissão de recursos.

RCA guide: motivo da falha e logs do aplicativo Spark

O exemplo a seguir mostra o motivo da falha para um problema de configuração comum para buckets S3 em uma execução de trabalho de produção. O motivo da falha vindo do Spark não ajuda a entender a causa raiz ou a linha de código que precisa ser inspecionada para corrigi-la.

Exception in Person Class: org.apache.spark.SparkException : Job aborted on account of stage failure: Activity 0 in stage 0.0 failed 4 occasions, most up-to-date failure: Misplaced process 0.3 in stage 0.0 (TID 3) (172.36.245.14 executor 1): com.amazonaws.providers.glue.util.NonFatalException: Error opening file:

Depois de mergulhar profundamente nos logs de um dos muitos executores Spark distribuídos, fica claro que o erro foi causado devido à inexistência de um bucket S3, no entanto, o rastreamento da pilha de erros geralmente é bastante longo e truncado para entender a causa raiz precisa e a localização dentro do aplicativo Spark onde a correção é necessária.

Brought on by: java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.providers.s3.mannequin.AmazonS3Exception: The desired bucket doesn't exist (Service: Amazon S3; Standing Code: 404; Error Code: NoSuchBucket; Request ID: 80MTEVF2RM7ZYAN9; S3 Prolonged Request ID: AzRz5f/Amtcs/QatfTvDqU0vgSu5+v7zNIZwcjUn4um5iX3JzExd3a3BkAXGwn/5oYl7hOXRBeo=; Proxy: null), S3 Prolonged Request ID: AzRz5f/Amtcs/QatfTvDqU0vgSu5+v7zNIZwcjUn4um5iX3JzExd3a3BkAXGwn/5oYl7hOXRBeo=
at com.amazon.ws.emr.hadoop.fs.s3n.Jets3tNativeFileSystemStore.listing(Jets3tNativeFileSystemStore.java:423)
at com.amazon.ws.emr.hadoop.fs.s3n.Jets3tNativeFileSystemStore.isFolderUsingFolderObject(Jets3tNativeFileSystemStore.java:249)
at com.amazon.ws.emr.hadoop.fs.s3n.Jets3tNativeFileSystemStore.isFolder(Jets3tNativeFileSystemStore.java:212)
at com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem.getFileStatus(S3NativeFileSystem.java:518)
at com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem.open(S3NativeFileSystem.java:935)
at com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem.open(S3NativeFileSystem.java:927)
at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:983)
at com.amazon.ws.emr.hadoop.fs.EmrFileSystem.open(EmrFileSystem.java:197)
at com.amazonaws.providers.glue.hadoop.TapeHadoopRecordReaderSplittable.initialize(TapeHadoopRecordReaderSplittable.scala:168)
... 29 extra

Com solução de problemas Generative AI Spark: RCA e recomendações

Com a solução de problemas do Spark, basta clicar no botão Análise de solução de problemas na execução do trabalho com falha, e o serviço analisa os artefatos de depuração do trabalho com falha para identificar a análise da causa raiz junto com o número da linha em seu aplicativo Spark que você pode inspecionar para resolver ainda mais o problema.

Apresentando a solução de problemas de IA generativa para Apache Spark no AWS Glue (pré-visualização)

Erros de falta de memória

Vejamos um erro comum, mas relativamente complexo, que requer uma análise guide significativa para concluir que é devido a um trabalho do Spark ficando sem memória no driver Spark (nó mestre) ou em um dos executores Spark distribuídos. Normalmente, a solução de problemas requer que um engenheiro de dados experiente execute manualmente as etapas a seguir para identificar a causa raiz.

  • Pesquise nos logs do driver Spark para encontrar a mensagem de erro exata
  • Navegue até a IU do Spark para analisar padrões de uso de memória
  • Revise as métricas do executor para entender a pressão da memória
  • Analise o código para identificar operações que consomem muita memória

Esse processo geralmente leva horas porque o motivo da falha do Spark geralmente não é difícil de entender que period um problema de falta de memória no driver do Spark e qual é a solução para corrigi-lo.

RCA guide: motivo da falha e logs do aplicativo Spark

O exemplo a seguir mostra o motivo da falha do erro.

Py4JJavaError: An error occurred whereas calling o4138.collectToPython. java.lang.StackOverflowError

Os logs do driver Spark exigem uma pesquisa extensiva para encontrar a mensagem de erro exata. Nesse caso, o rastreamento da pilha de erros consistia em mais de cem chamadas de função e é um desafio para entender a causa raiz precisa, pois o aplicativo Spark foi encerrado abruptamente.

py4j.protocol.Py4JJavaError: An error occurred whereas calling o4138.collectToPython.
: java.lang.StackOverflowError
 at org.apache.spark.sql.catalyst.bushes.TreeNode$$Lambda$1942/131413145.get$Lambda(Unknown Supply)
 at org.apache.spark.sql.catalyst.bushes.TreeNode.$anonfun$mapChildren$1(TreeNode.scala:798)
 at org.apache.spark.sql.catalyst.bushes.TreeNode.mapProductIterator(TreeNode.scala:459)
 at org.apache.spark.sql.catalyst.bushes.TreeNode.mapChildren(TreeNode.scala:781)
 at org.apache.spark.sql.catalyst.bushes.TreeNode.clone(TreeNode.scala:881)
 at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.org$apache$spark$sql$catalyst$plans$logical$AnalysisHelper$$tremendous$clone(LogicalPlan.scala:30)
 at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.clone(AnalysisHelper.scala:295)
 at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.clone$(AnalysisHelper.scala:294)
 at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.clone(LogicalPlan.scala:30)
 at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.clone(LogicalPlan.scala:30)
 at org.apache.spark.sql.catalyst.bushes.TreeNode.$anonfun$clone$1(TreeNode.scala:881)
 at org.apache.spark.sql.catalyst.bushes.TreeNode.applyFunctionIfChanged$1(TreeNode.scala:747)
 at org.apache.spark.sql.catalyst.bushes.TreeNode.$anonfun$mapChildren$1(TreeNode.scala:783)
 at org.apache.spark.sql.catalyst.bushes.TreeNode.mapProductIterator(TreeNode.scala:459)
 ... repeated a number of occasions with tons of of perform calls

Com solução de problemas Generative AI Spark: RCA e recomendações

Com a solução de problemas do Spark, você pode clicar no botão Análise de solução de problemas na execução do trabalho com falha e obtenha uma análise detalhada da causa raiz com a linha de código que você pode inspecionar, além de recomendações sobre as melhores práticas para otimizar seu aplicativo Spark para corrigir o problema.

Erros de faísca fora do disco

Outro padrão de erro complexo com o Spark é quando ele fica sem armazenamento em disco em um dos muitos executores do Spark no aplicativo Spark. Semelhante às exceções do Spark OOM, a solução de problemas guide requer um amplo mergulho profundo nos logs e métricas do executor distribuído para entender a causa raiz e identificar a lógica ou o código do aplicativo que causa o erro devido à execução lenta de suas transformações pelo Spark.

RCA guide: motivo da falha e logs do aplicativo Spark

O motivo da falha associado e o rastreamento de pilha de erros nos logs do aplicativo ficam novamente silenciosos, exigindo que o usuário reúna mais insights da UI do Spark e das métricas do Spark para identificar a causa raiz e identificar a resolução.

An error occurred whereas calling o115.parquet. No house left on system

py4j.protocol.Py4JJavaError: An error occurred whereas calling o115.parquet.
: org.apache.spark.SparkException: Job aborted.
 at org.apache.spark.sql.errors.QueryExecutionErrors$.jobAbortedError(QueryExecutionErrors.scala:638)
 at org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:279)
 at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:193)
 at org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult$lzycompute(instructions.scala:113)
 at org.apache.spark.sql.execution.command.DataWritingCommandExec.sideEffectResult(instructions.scala:111)
 at org.apache.spark.sql.execution.command.DataWritingCommandExec.executeCollect(instructions.scala:125)
 ....

Com solução de problemas Generative AI Spark: RCA e recomendações

Com a solução de problemas do Spark, ele fornece o RCA e o número da linha do código no script onde a operação de embaralhamento de dados foi avaliada preguiçosamente pelo Spark. Ele também aponta para o guia de práticas recomendadas para otimizar o embaralhamento ou transformações amplas ou usar o plug-in de embaralhamento S3 no AWS Glue.

Depurar trabalhos do AWS Glue para Spark

Para usar esse recurso de solução de problemas para execuções de trabalho com falha, faça o seguinte:

  1. No console do AWS Glue, escolha Trabalhos ETL no painel de navegação.
  2. Escolha o seu trabalho.
  3. No Corre guia, escolha sua execução de trabalho com falha.
  4. Escolher Solucionar problemas com IA para iniciar a análise.
  5. Você será redirecionado para o Análise de solução de problemas guia com análise gerada.

Você verá Análise de causa raiz e Recomendações seções.

O serviço analisa os artefatos de depuração do seu trabalho e fornece os resultados. Vejamos um exemplo actual de como isso funciona na prática.

Mostramos abaixo um exemplo completo em que a solução de problemas do Spark ajuda um usuário a identificar a causa raiz de um problema de configuração de recurso e ajuda a corrigir o trabalho para resolver o erro.

Considerações

Durante a visualização, o serviço se concentra em erros comuns do Spark, como configuração de recursos e problemas de acesso, exceções de falta de memória no driver e executores do Spark, exceções de falta de disco nos executores do Spark e indicará claramente quando um tipo de erro ainda não é compatível. Seus trabalhos devem ser executados no AWS Glue versão 4.0.

A visualização está disponível sem custo adicional em todas as regiões comerciais da AWS onde o AWS Glue está disponível. Ao usar esse recurso, todas as execuções de validação acionadas por você para testar as soluções propostas serão cobradas de acordo com a definição de preço padrão do AWS Glue.

Conclusão

Esta postagem demonstrou como a solução de problemas generativos de IA para Spark no AWS Glue ajuda na depuração diária de aplicativos Spark. Ele simplifica o processo de depuração de seus aplicativos Spark usando IA generativa para identificar automaticamente a causa raiz das falhas e fornece recomendações práticas para resolver os problemas.

Para saber mais sobre esse novo recurso de solução de problemas do Spark, visite Solução de problemas de jobs do Spark com IA.

Um agradecimento especial a todos que contribuíram para o lançamento da solução de problemas de IA generativa para Apache Spark no AWS Glue: Japson Jeyasekaran, Rahul Sharma, Mukul Prasad, Weijing Cai, Jeremy Samuel, Hirva Patel, Martin Ma, Layth Yassin, Kartik Panjabi, Maya Patwardhan , Anshi Shrivastava, Henry Caballero Corzo, Rohit Das, Peter Tsai, Daniel Greenberg, McCall Peltier, Takashi Onikura, Tomohiro Tanaka, Sotaro Hikita, Chiho Sugimoto, Yukiko Iwazumi, Gyan Radhakrishnan, Victor Pleikis, Sriram Ramarathnam, Matt Sampson, Brian Ross, Alexandra Tello, Andrew King, Joseph Barlan, Daiyan Alamgir, Ranu Shah, Adam Rohrscheib, Nitin Bahadur, Santosh Chandrachood, Matt Su, Kinshuk Pahare e William Vambenepê.


Sobre os Autores

Noritaka Sekiyama é arquiteto principal de Huge Information da equipe AWS Glue. Ele é responsável pela construção de artefatos de software program para ajudar os clientes. Nas horas vagas, ele gosta de andar de bicicleta com sua bicicleta de estrada.

Vishal Kajjam é engenheiro de desenvolvimento de software program na equipe AWS Glue. Ele é apaixonado por computação distribuída e pelo uso de ML/IA para projetar e construir soluções ponta a ponta para atender às necessidades de integração de dados dos clientes. Nas horas vagas, gosta de passar tempo com a família e amigos.

Shubham Mehta é gerente de produto sênior da AWS Analytics. Ele lidera o desenvolvimento de recursos de IA generativos em serviços como AWS Glue, Amazon EMR e Amazon MWAA, usando IA/ML para simplificar e aprimorar a experiência de profissionais de dados que criam aplicativos de dados na AWS.

Wei Tang é engenheiro de desenvolvimento de software program na equipe AWS Glue. Ela é uma forte desenvolvedora com profundo interesse em resolver problemas recorrentes de clientes com sistemas distribuídos e IA/ML.

XiaoRun Yu é engenheiro de desenvolvimento de software program na equipe AWS Glue. Ele está trabalhando na criação de novos recursos para o AWS Glue para ajudar os clientes. Fora do trabalho, Xiaorun gosta de explorar novos lugares na Bay Space.

Jake Zych é engenheiro de desenvolvimento de software program na equipe AWS Glue. Ele tem profundo interesse em sistemas distribuídos e aprendizado de máquina. Nas horas vagas, Jake gosta de criar conteúdo de vídeo e jogar jogos de tabuleiro.

Sávio Dsouza é gerente de desenvolvimento de software program na equipe AWS Glue. Sua equipe trabalha em sistemas distribuídos e novas interfaces para integração de dados e gerenciamento eficiente de information lakes na AWS.

Mohit Saxena é gerente sênior de desenvolvimento de software program na equipe AWS Glue e Amazon EMR. Sua equipe se concentra na construção de sistemas distribuídos para permitir que os clientes com interfaces simples de usar e recursos orientados por IA transformem com eficiência petabytes de dados em information lakes no Amazon S3 e em bancos de dados e information warehouses na nuvem.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *