

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gerenciamento do failover multi-AZ para clusters do EMR usando o Controlador de Recuperação de Aplicações
<a name="multi-az-failover-spark-emr-clusters-arc"></a>

*Aarti Rajput, Ashish Bhatt, Neeti Mishra e Nidhi Sharma, Amazon Web Services*

## Resumo
<a name="multi-az-failover-spark-emr-clusters-arc-summary"></a>

Este padrão oferece uma estratégia eficiente de recuperação de desastres para workloads do Amazon EMR, ajudando a garantir alta disponibilidade e consistência de dados em diversas zonas de disponibilidade dentro de uma única Região da AWS. O projeto emprega o [Controlador de Recuperação de Aplicações da Amazon](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) e um [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) para gerenciar operações de failover e de distribuição de tráfego em um cluster do EMR baseado em Apache Spark. 

Sob condições padrão, a zona de disponibilidade principal hospeda um cluster EMR ativo e um aplicativo com funcionalidade completa read/write . Se uma zona de disponibilidade falhar inesperadamente, o tráfego é automaticamente redirecionado para a zona de disponibilidade secundária, na qual um novo cluster do EMR é iniciado. Ambas as zonas de disponibilidade acessam um bucket compartilhado do Amazon Simple Storage Service (Amazon S3) por meio de [endpoints de gateway dedicados](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html), garantindo um gerenciamento consistente dos dados. Essa abordagem minimiza o tempo de inatividade e possibilita uma recuperação rápida para workloads críticas de big data durante falhas em zonas de disponibilidade. A solução é útil em setores como finanças ou comércio varejista, em que analytics em tempo real são essenciais.

## Pré-requisitos e limitações
<a name="multi-az-failover-spark-emr-clusters-arc-prereqs"></a>

**Pré-requisitos **
+ Uma [Conta da AWS](https://aws.amazon.com/resources/create-account/) ativa
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) na Amazon Elastic Compute Cloud (Amazon) EC2
+ Acesso do nó principal do cluster do EMR ao Amazon S3
+ AWS Infraestrutura Multi-AZ

**Limitações**
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte a página [Cotas e endpoints de serviços](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ [Amazon EMR 6.x ou versões mais recentes](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)

## Arquitetura
<a name="multi-az-failover-spark-emr-clusters-arc-architecture"></a>

**Pilha de tecnologias de destino**
+ Cluster do Amazon EMR
+ Amazon Application Recovery Controller
+ Application Load Balancer
+ Bucket do Amazon S3.
+ Endpoints de gateway para o Amazon S3

**Arquitetura de destino**

![Arquitetura para um mecanismo de recuperação automatizado com o Controlador de Recuperação de Aplicações.](https://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e5ecdb66-0eef-4a6a-8367-982a55104748/images/e982d580-13db-4bdd-9f6b-6400d7c31c01.png)


Esta arquitetura fornece resiliência para aplicações ao usar diversas zonas de disponibilidade e implementar um mecanismo de recuperação automatizado por meio do Controlador de Recuperação de Aplicações.

1. O Application Load Balancer encaminha o tráfego para o ambiente do Amazon EMR ativo, que normalmente é o cluster do EMR primário na zona de disponibilidade primária.

1. O cluster do EMR ativo processa as solicitações da aplicação e estabelece conexão com o Amazon S3 por meio do endpoint do gateway dedicado do Amazon S3 para operações de leitura e gravação.

1. O Amazon S3 funciona como um repositório central de dados e pode ser usado como ponto de verificação ou como armazenamento compartilhado entre clusters do EMR. Os clusters do EMR mantêm a consistência de dados quando gravam diretamente no Amazon S3 por meio do protocolo `s3://` e do [EMR File System (EMRFS)](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs.html). 

1. O Controlador de Recuperação de Aplicações monitora continuamente a integridade da zona de disponibilidade primária e gerencia automaticamente as operações de failover, quando necessário.

1. Se o Controlador de Recuperação de Aplicações detectar uma falha no cluster do EMR primário, ele executará as seguintes ações:
   + Iniciar o processo de failover para o cluster do EMR secundário, localizado na zona de disponibilidade 2.
   + Atualizar as configurações de roteamento para direcionar o tráfego ao cluster secundário.

## Ferramentas
<a name="multi-az-failover-spark-emr-clusters-arc-tools"></a>

**Serviços da AWS**
+ [O Amazon Application Recovery Controller****](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) ajuda você a gerenciar e coordenar a recuperação de seus aplicativos em todas Regiões da AWS as zonas de disponibilidade. Este serviço simplifica o processo e aumenta a confiabilidade da recuperação das aplicações ao reduzir as etapas manuais exigidas por ferramentas e processos tradicionais.
+ O [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) opera na camada de aplicação, que corresponde à sétima camada do modelo Open Systems Interconnection (OSI). Ele distribui o tráfego de entrada do aplicativo em vários destinos, como EC2 instâncias, em várias zonas de disponibilidade. Isso aumenta a disponibilidade do seu aplicativo.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.
+ O [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) é uma plataforma de big data que fornece processamento de dados, análise interativa e machine learning para estruturas de código aberto, como Apache Spark, Apache Hive e Presto.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) fornece uma interface de serviço web simples que você pode usar para armazenar e recuperar qualquer volume de dados, a qualquer momento e de qualquer lugar. Com este serviço, é possível desenvolver, com facilidade, aplicações que aproveitem o armazenamento nativo da nuvem.
+ [Os endpoints de gateway para o Amazon](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html) S3 são gateways que você especifica em sua tabela de rotas para acessar o Amazon S3 a partir da sua nuvem privada virtual (VPC) pela rede. AWS 

## Práticas recomendadas
<a name="multi-az-failover-spark-emr-clusters-arc-best-practices"></a>
+ Siga as [AWS best practices for security, identity, and compliance](https://aws.amazon.com/architecture/security-identity-compliance/?cards-all.sort-by=%5b…%5d.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all), a fim de garantir uma arquitetura robusta e segura.
+ Alinhe a arquitetura com o [AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected/).
+ Use a Concessão de Acesso do Amazon S3 para gerenciar o acesso do seu cluster do EMR baseado em Spark ao Amazon S3. Para obter detalhes, consulte a publicação do blog [Use Amazon EMR with S3 Access Grants to Scale Spark access to Amazon S3](https://aws.amazon.com/blogs/big-data/use-amazon-emr-with-s3-access-grants-to-scale-spark-access-to-amazon-s3/).
+ [Melhore o desempenho do Spark com o Amazon](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-performance.html) S3.

## Épicos
<a name="multi-az-failover-spark-emr-clusters-arc-epics"></a>

### Configurar o ambiente
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Faça login no Console de gerenciamento da AWS. | Faça login no [Console de gerenciamento da AWS](https://console.aws.amazon.com/) como um usuário do IAM. Para obter instruções, consulte a [documentação do AWS](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-iam-user-sign-in-tutorial.html). | AWS DevOps | 
| Configure AWS CLI o. **** | Instale o AWS CLI ou atualize-o para a versão mais recente para que você possa interagir com Serviços da AWS Console de gerenciamento da AWS o. Para obter instruções, consulte a [documentação do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | AWS DevOps | 

### Implantação de uma aplicação do Spark em seu cluster do EMR
<a name="deploy-a-spark-application-on-your-emr-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um bucket do S3. | 1. Crie um bucket do S3 para armazenar o conjunto de dados de entrada, os logs, a aplicação e os dados de saída. Para obter instruções, consulte a [documentação do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html).<br />2. Organize o bucket em pastas separadas para dados de entrada (`dataset`), logs (`logs`), aplicação do Spark (`spark-app`) e dados de saída (`output`). | AWS DevOps | 
| Crie um cluster do EMR. | 1. Use os AWS CLI comandos a seguir para criar um cluster do EMR (por exemplo, versão 6.12 ou posterior) com instâncias que abrangem duas zonas de disponibilidade (como `us-east-1a` e`us-east-1b`) para alta disponibilidade. O comando especifica o tipo de instância `m4.large` como um exemplo.<pre>aws emr create-cluster \<br />    --ec2-attributes AvailabilityZone=<AZ-name-1> \<br />    --release-label emr-6.12.0 \<br />    --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large</pre><pre>aws emr create-cluster \<br />    --ec2-attributes AvailabilityZone=<AZ-name-2> \<br />    --release-label emr-6.12.0 \<br />    --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large</pre><br />Para obter mais informações, consulte o [comando create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html) e a [documentação do Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html).<br />2. Forneça o par de chaves, o perfil de serviço e o perfil de instância com as permissões necessárias, se aplicável. | AWS DevOps | 
| Defina as configurações de segurança para o cluster do EMR. | 1. Identifique o grupo de segurança associado ao nó principal do cluster do EMR usando o comando AWS CLI [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/describe-cluster.html):<pre>aws emr describe-cluster --cluster-id j-XXXXXXXX</pre><br />2. Para aumentar a segurança, modifique as configurações do grupo de segurança para permitir acesso SSH (porta TCP 22) ao nó principal, mas restrinja-o ao seu endereço IP específico.<br />Para obter mais informações, consulte a [documentação do Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html). | AWS DevOps | 
| Conecte-se ao cluster do EMR. | Estabeleça conexão com o nó principal do cluster do EMR por meio de SSH utilizando o par de chaves fornecido.<br />Certifique-se de que o arquivo do par de chaves esteja no mesmo diretório da sua aplicação.<br />Execute os seguintes comandos para definir as permissões corretas para o par de chaves e estabelecer a conexão SSH:<pre>chmod 400 <key-pair-name><br />ssh -i ./<key-pair-name> hadoop@<master-node-public-dns></pre> | AWS DevOps | 
| Implante a aplicação do Spark. | Após estabelecer a conexão SSH, você estará no console do Hadoop.1. Crie ou edite o arquivo da aplicação do Spark (`main.py`) usando um editor de texto, como o vim:<pre>vim main.py</pre><br />Para obter mais informações sobre como criar e modificar a aplicação do Spark, consulte a [documentação do Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html).<br />2. Envie a aplicação do Spark para o cluster do EMR, especificando os locais dos dados de entrada e de saída no bucket do S3:<pre>spark-submit main.py —data_source <input-data-folder-in-s3> —output_uri <output-folder-in-s3></pre><br />A seguir, apresentamos uma exemplo baseado nas pastas configuradas anteriormente:<pre>spark-submit main.py —data_source dataset —output_uri output</pre><br />3. Monitore o progresso da aplicação verificando os logs da aplicação:<pre>yarn logs -applicationId <application-id></pre> | AWS DevOps | 
| Monitore a aplicação do Spark. | 1. Abra outra janela de terminal e estabeleça um túnel SSH para a interface de usuário da web do gerenciador de recursos do cluster do EMR:<pre>ssh -i <key-pair-name> -N -L 8157:<resource-manager-public-dns>:8088 hadoop@<resource-manager-public-dns></pre><br />2. Para monitorar a aplicação, acesse a interface de usuário da web do gerenciador de recursos ao navegar até `http://localhost:8157` no seu navegador da web. | AWS DevOps | 

### Redirecionamento do tráfego para outra zona de disponibilidade
<a name="shift-traffic-to-another-availability-zone"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um Application Load Balancer. | Configure o grupo de destino que roteia o tráfego entre os nós principais do Amazon EMR implantados em duas zonas de disponibilidade dentro de uma Região da AWS.<br />Para obter instruções, consulte [Create a target group for your Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html) na documentação do Elastic Load Balancing. | AWS DevOps | 
| Configure a mudança de zona no Controlador de Recuperação de Aplicações. | Nesta etapa, você usará o [recurso de mudança de zona](https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html) no Controlador de Recuperação de Aplicações para redirecionar o tráfego para outra zona de disponibilidade.1. Abra o [console do Controlador de Recuperação de Aplicações](https://console.aws.amazon.com/route53recovery/home#/dashboard).<br />2. Em **Conceitos básicos**, escolha **Mudança de zona** e, em seguida, **Iniciar mudança de zona**.<br />3. Selecione a zona de disponibilidade da qual deseja redirecionar o tráfego.<br />4. Escolha um recurso compatível (por exemplo, o Application Load Balancer) para a mudança de zona na tabela Recursos.<br />5. Em **Definir expiração da mudança de zona**, escolha ou insira uma expiração para a mudança de zona. Você pode definir um período entre um minuto e três dias (72 horas).<br />Todas as mudanças de zona são temporárias. Você deve definir uma expiração, mas pode atualizar as mudanças ativas posteriormente para definir um novo período de expiração de até três dias.<br />6. Insira um comentário sobre essa mudança de zona.<br />7. Marque a caixa de seleção para reconhecer que iniciar uma mudança de zona reduzirá a capacidade disponível para seu aplicativo ao afastar o tráfego da zona de disponibilidade.<br />8. Escolha **Iniciar**.<br />Para usar o AWS CLI, consulte [Exemplos de uso do AWS CLI com mudança zonal](https://docs.aws.amazon.com/r53recovery/latest/dg/getting-started-cli-zonalshift.html) na documentação do Application Recovery Controller. | AWS DevOps | 
| Verifique a configuração e o progresso da mudança de zona. | 1. Verifique os recursos que estão registrados na mudança de zona:<pre>aws arc-zonal-shift list-managed-resources --region <AWS-region-name></pre><br />Por exemplo, a saída apresentada a seguir confirma que os recursos estão ativos em ambas as zonas de disponibilidade.<pre>"appliedWeights": {<br />        "use1-az1": 1.0,<br />        "use1-az2": 1.0<br />    },</pre><br />2. Para visualizar o deslocamento zonal, use o AWS CLI comando a seguir para iniciar o deslocamento zonal:<pre>aws arc-zonal-shift start-zonal-shift \<br />   --resource-identifier <application-load-balancer-arn> \<br />   --away-from <source-AZ> \<br />   --expires-in 10m --comment "testing" \<br />   --region <AWS-region-name></pre><br />em que `<source-AZ>` é o identificador da zona de disponibilidade da qual você deseja desviar o tráfego, e `<application-load-balancer-arn>` é o nome do recurso da Amazon (ARN) do seu Application Load Balancer.<br />3. Verifique se o tráfego foi desviado para outra zona de disponibilidade.<pre>aws arc-zonal-shift get-managed-resource \<br />   --resource-identifier <application-load-balancer-arn> \<br />   --region <AWS-region-name></pre><br />Você poderá confirmar a mudança de zona pelas seguintes medidas:<pre>"appliedWeights": {<br />        "use1-az1": 0.0,<br />        "use1-az2": 1.0<br />    },</pre> | AWS DevOps | 

## Recursos relacionados
<a name="multi-az-failover-spark-emr-clusters-arc-resources"></a>
+ AWS CLI comandos:
  + [create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html)
  + [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/describe-cluster.html)
  + [arc-zonal-shift](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/arc-zonal-shift/index.html)
+ [Configuring Amazon EMR cluster instance types and best practices for Spot instances](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html) (documentação do Amazon EMR)
+ [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentação do IAM)
+ [Usar perfis de instância](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) (documentação do IAM)
+ [Use zonal shift and zonal autoshift to recovery applications in ARC](https://docs.aws.amazon.com/r53recovery/latest/dg/multi-az.html) (documentação do Controlador de Recuperação de Aplicações)