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, você pode usar o Amazon S3 para armazenar dados em ordem aleatória do Spark. 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.
![Spark workflow showing Map and Reduce stages using Amazon S3 for shuffle data storage.](images/gs-s3-shuffle-diagram.png)
Estamos apresentando um novo Cloud Shuffle Storage Plugin for Apache Spark para usar o Amazon 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://
, como no exemplo a seguir:shuffle-bucket
/prefix
/--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.
![Job parameters interface showing --write-shuffle-files- parameter and option to add more.](images/gs-s3-shuffle.png)
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.
-
--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://
. O uso de vários buckets melhora a performance.shuffle-bucket-1
/prefix
,s3://shuffle-bucket-2
/prefix
/
É 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
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.