

# Armazenamento de dados embaralhados do Spark
<a name="monitor-spark-shuffle-manager"></a>

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.](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gs-s3-shuffle-diagram.png)


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
<a name="monitor-spark-shuffle-manager-prereqs"></a>

 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](https://docs.aws.amazon.com//AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html) 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
<a name="monitor-spark-shuffle-manager-using-console"></a>

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.](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gs-s3-shuffle.png)


## Usar o plug-in de ordem aleatória do AWS Glue Spark
<a name="monitor-spark-shuffle-manager-using"></a>

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](set-up-encryption.md). 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](https://github.com/aws-samples/aws-glue-samples/blob/master/docs/cloud-shuffle-plugin/README.md). Para obter mais informações, consulte [Cloud Shuffle Storage Plugin for Apache Spark](https://docs.aws.amazon.com/glue/latest/dg/cloud-shuffle-storage-plugin.html).

**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](#monitor-spark-shuffle-manager-prereqs) antes de ativar o plugin de Cloud Shuffle Storage. 
+ Você pode usar esse recurso se seus dados estiverem distorcidos.