View a markdown version of this page

Armazenamento de dados embaralhados do Spark - AWS Glue

Armazenamento de dados embaralhados do Spark

A colocação em ordem aleatória é uma etapa importante em um trabalho do Spark sempre que os dados são reorganizados entre partições. Isso é necessário porque transformações amplas, como join, groupByKey, reduceByKey e repartition, exigem informações de outras partições para concluir o processamento. O Spark reúne os dados necessários de cada partição e os combina em uma nova partição. Durante uma geração de ordem aleatória, os dados são gravados no disco e transferidos pela rede. Como resultado, a operação de ordem aleatória está vinculada à capacidade do disco local. O Spark lança os erros No space left on device ou MetadataFetchFailedException quando não há espaço em disco suficiente no executor e não há recuperação.

nota

O plugin AWS Glue Spark shuffle com Amazon S3 só é compatível com trabalhos de ETL do AWS Glue.

Solução

Com o AWS Glue, agora você pode usar o Amazon S3 para armazenar dados em ordem aleatória do Spark usando o plug-in Cloud Shuffle Storage. O Amazon S3 é um serviço de armazenamento de objetos que oferece escalabilidade, disponibilidade de dados, segurança e performance líderes do setor. Essa solução desagrega computação e armazenamento de seus trabalhos do Spark e oferece elasticidade completa e armazenamento em ordem aleatória de baixo custo, permitindo que você execute suas workloads mais intensas em ordem aleatória de forma confiável.

O Spark Map Stage grava no disco, embaralha os dados para o S3 e, então, o Spark Reduce Stage lê no S3.

Você pode ativar a ordem aleatória do Amazon S3 para executar trabalhos do AWS Glue de forma confiável e sem falhas, caso eles estejam vinculados à capacidade do disco local para grandes operações de ordem aleatória. Em alguns casos, a ordem aleatória para o Amazon S3 é ligeiramente mais lenta do que o disco local (ou EBS), se você tiver um grande número de partições pequenas ou arquivos gravados em ordem aleatória no Amazon S3.

Pré-requisitos para usar o plug-in Cloud Shuffle Storage

Para usar o plug-in Cloud Shuffle Storage com trabalhos de ETL do AWS Glue, você precisa do seguinte:

  • Um bucket do Amazon S3 localizado na mesma região em que seu trabalho é executado, para armazenar dados intermediários embaralhados e vazados. O prefixo de armazenamento embaralhado do Amazon S3 pode ser especificado com o --conf spark.shuffle.glue.s3ShuffleBucket=s3://shuffle-bucket/prefix/, como no exemplo a seguir:

    --conf spark.shuffle.glue.s3ShuffleBucket=s3://glue-shuffle-123456789-us-east-1/glue-shuffle-data/
  • Defina as políticas de ciclo de vida de armazenamento do Amazon S3 no prefixo (como glue-shuffle-data), pois o gerenciador de ordem aleatória não limpa os arquivos após a conclusão do trabalho. O embaralhamento intermediário e os dados vazados devem ser excluídos após a conclusão do trabalho. Os usuários podem definir políticas de ciclo de vida curto no prefixo. Instruções para definir política do ciclo de vida do Amazon S3 estão disponíveis em Definir a configuração do ciclo de vida em um bucket no Guia do usuário do Amazon Simple Storage Service.

Usar o gerenciador de ordem aleatória do Spark no AWS Glue no Console da AWS

Para configurar o gerenciador de ordem aleatória do Spark no AWS Glue usando o console do AWS Glue ou o AWS Glue Studio ao configurar um trabalho: escolha o parâmetro de trabalho –write-shuffle-files-to-s3 para ativar a ordem aleatória do Amazon S3 para o trabalho.

Seção de parâmetros do trabalho mostrando a chave write-shuffle-files com o campo de valor opcional e o botão Remover.

Usar o plug-in de ordem aleatória do AWS Glue Spark

Os seguintes parâmetros de trabalho ativam e ajustam o gerenciador de ordem aleatória no AWS Glue. Esses parâmetros são sinalizadores, portanto, qualquer valor fornecido não será considerado.

Importante

Para desativar o embaralhamento do Amazon S3, você deve remover totalmente o parâmetro --write-shuffle-files-to-s3 da configuração do seu trabalho. Definir o valor como false não desativa o embaralhamento do Amazon S3 — o parâmetro atua como um sinalizador baseado na presença, o que significa que qualquer valor (inclusive false) ativa o embaralhamento do Amazon S3 quando o parâmetro está presente.

  • --write-shuffle-files-to-s3: o sinalizador principal que habilita o gerenciador de ordem aleatória do AWS Glue Spark para usar buckets do Amazon S3 a fim de gravar e ler dados em ordem aleatória. Quando o sinalizador não é especificado, o gerenciador de ordem aleatória não é usado.

  • --write-shuffle-spills-to-s3 - (compatível apenas com o AWS Glue versão 2.0). Um sinalizador opcional que permite que você descarregue arquivos de despejo em buckets do Amazon S3, o que fornece resiliência adicional ao seu trabalho do Spark. Isso só é necessário para grandes workloads que despejam muitos dados no disco. Quando o sinalizador não é especificado, nenhum arquivo de vazamento intermediário é gravado.

  • --conf spark.shuffle.glue.s3ShuffleBucket=s3://<shuffle-bucket>: outro sinalizador opcional que especifica o bucket do Amazon S3 onde você grava os arquivos em ordem aleatória. Por padrão, --TempDir/shuffle-data. O AWS Glue 3.0+ suporta a gravação aleatória de arquivos em vários buckets especificando compartimentos com delimitador de vírgula, como em --conf spark.shuffle.glue.s3ShuffleBucket=s3://shuffle-bucket-1/prefix,s3://shuffle-bucket-2/prefix/. O uso de vários buckets melhora a performance.

É necessário fornecer configurações de segurança para habilitar a criptografia em repouso para os dados em ordem aleatória. Para obter mais informações sobre as configurações de segurança, consulte Configurar criptografia no AWS Glue. O AWS Glue oferece suporte a todas as outras configurações relacionadas a ordem aleatória fornecidas pelo Spark.

Binários de software para o Cloud Shuffle Storage Plugin

Você também pode baixar os binários de software Cloud Shuffle Storage Plugin for Apache Spark sob a licença do Apache 2.0 e executá-lo em qualquer ambiente do Spark. O novo plug-in vem com suporte pronto para uso para o Amazon S3 e também pode ser facilmente configurado para usar outras formas de armazenamento em nuvem, como o Google Cloud Storage e o Microsoft Azure Blob Storage. Para obter mais informações, consulte Cloud Shuffle Storage Plugin for Apache Spark.

Observações e limitações

As seguintes são observações ou limitações sobre o gerenciador de ordem aleatória no AWS Glue:

  • O AWS Glue shuffle manager não exclui automaticamente os arquivos de dados aleatórios (temporários) armazenados em seu bucket do Amazon S3 após a conclusão de um trabalho. Para garantir a proteção dos dados, siga as instruções no Pré-requisitos para usar o plug-in Cloud Shuffle Storage antes de ativar o plugin de Cloud Shuffle Storage.

  • Você pode usar esse recurso se seus dados estiverem distorcidos.