

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á.

# Configurar o Docker para uso com clusters do Amazon EMR
<a name="emr-plan-docker"></a>

O Amazon EMR 6.x é compatível com o Hadoop 3, o que permite que o YARN lance contêineres NodeManager diretamente no cluster do Amazon EMR ou dentro de um contêiner Docker. Os contêineres do Docker fornecem ambientes de execução personalizados nos quais o código do aplicativo é executado. O ambiente de execução personalizado é isolado do ambiente de execução do YARN NodeManager e de outros aplicativos.

Os contêineres do Docker podem incluir bibliotecas especiais usadas pelo aplicativo e podem fornecer diferentes versões de ferramentas e bibliotecas nativas, como R e Python. É possível usar ferramentas familiares do Docker para definir bibliotecas e dependências de runtime para as aplicações.

Os clusters do Amazon EMR 6.x são configurados por padrão para permitir que aplicações do YARN, como o Spark, sejam executadas usando contêineres do Docker. Para personalizar a configuração do contêiner, edite as opções de suporte do Docker definidas nos arquivos `yarn-site.xml` e `container-executor.cfg` disponíveis no diretório `/etc/hadoop/conf`. Para obter detalhes sobre cada opção de configuração e como ela é usada, consulte [Launching applications using Docker containers](https://hadoop.apache.org/docs/r3.1.0/hadoop-yarn/hadoop-yarn-site/DockerContainers.html). 

É possível optar por usar o Docker ao enviar um trabalho. Use as variáveis a seguir para especificar o runtime do Docker e a imagem do Docker.
+ `YARN_CONTAINER_RUNTIME_TYPE=docker`
+ `YARN_CONTAINER_RUNTIME_DOCKER_IMAGE={{{DOCKER_IMAGE_NAME}}}`

Quando você usa contêineres do Docker para executar os aplicativos do YARN, o YARN faz download da imagem do Docker especificada ao enviar o trabalho. Para que o YARN resolva essa imagem do Docker, ela deve ser configurada com um registro do Docker. As opções de configuração de um registro do Docker dependem se você implanta o cluster usando uma sub-rede pública ou privada.

## Registros do Docker
<a name="emr-docker-registries"></a>

Um registro do Docker é um sistema de armazenamento e distribuição de imagens do Docker. Para o Amazon EMR, é recomendável usar o Amazon ECR, que é um registro de contêiner do Docker totalmente gerenciado que permite criar suas próprias imagens personalizadas e hospedá-las em uma arquitetura altamente disponível e escalável.

**Considerações de implantação**

Os registros do Docker exigem acesso à rede de cada host no cluster. Isso ocorre porque cada host faz download de imagens do registro do Docker quando o aplicativo do YARN está sendo executado no cluster. Esses requisitos de conectividade de rede podem limitar sua escolha de registro do Docker, dependendo se você implanta o cluster do Amazon EMR em uma sub-rede pública ou privada. 

**Public subnet (Sub-rede pública)**

Quando os clusters do EMR são implantados em uma sub-rede pública, os nós que executam o YARN NodeManager podem acessar diretamente qualquer registro disponível na Internet.

**Sub-rede privada**

Quando os clusters do EMR são implantados em uma sub-rede privada, os nós que executam o YARN NodeManager não têm acesso direto à Internet. As imagens do Docker podem ser hospedadas no Amazon ECR e acessadas por meio de. AWS PrivateLink

Para obter mais informações sobre como usar AWS PrivateLink para permitir o acesso ao Amazon ECR em um cenário de sub-rede privada, consulte [Configuração do AWS PrivateLink Amazon ECS e do Amazon ECR](https://aws.amazon.com/blogs/compute/setting-up-aws-privatelink-for-amazon-ecs-and-amazon-ecr/).

## Configurar registros do Docker
<a name="emr-docker-hub"></a>

Para usar registros do Docker com o Amazon EMR, é necessário configurar o Docker para confiar no registro específico que você deseja usar para resolver imagens do Docker. Os registros de confiança padrão são locais (privados) e centOS. Para usar outros repositórios públicos ou o Amazon ECR, é possível substituir as configurações `docker.trusted.registries` em `/etc/hadoop/conf/container-executor.cfg` usando a API de classificação do EMR com a chave de classificação `container-executor`.

O exemplo a seguir mostra como configurar o cluster para confiar em um repositório público, chamado `your-public-repo`, e um endpoint de registro do ECR, `123456789123.dkr.ecr.us-east-1.amazonaws.com`. Se você usar o ECR, substitua esse endpoint pelo seu endpoint do ECR específico.

```
[
  {
    "Classification": "container-executor",
    "Configurations": [
        {
            "Classification": "docker",
            "Properties": {
                "docker.trusted.registries": "local,centos,{{your-public-repo}},123456789123.dkr.ecr.us-east-1.amazonaws.com",
                "docker.privileged-containers.registries": "local,centos,your-public-repo,123456789123.dkr.ecr.us-east-1.amazonaws.com"
            }
        }
    ]
  }
]
```

Para iniciar um cluster do Amazon EMR 6.0.0 com essa configuração usando o AWS Command Line Interface (AWS CLI), crie um arquivo nomeado `container-executor.json` com o conteúdo da configuração JSON anterior do executor de contêineres. Depois, use os comandos a seguir para executar o cluster.

```
export KEYPAIR=<{{Name of your Amazon EC2 key-pair}}>
export SUBNET_ID=<{{ID of the subnet to which to deploy the cluster}}>
export INSTANCE_TYPE=<{{Name of the instance type to use}}>
export REGION=<{{Region to which to deploy the cluster}}>

aws emr create-cluster \
    --name "EMR-6.0.0" \
    --region $REGION \
    --release-label emr-6.0.0 \
    --applications Name=Hadoop Name=Spark \
    --service-role EMR_DefaultRole \
    --ec2-attributes KeyName=$KEYPAIR,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=$SUBNET_ID \
    --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=$INSTANCE_TYPE InstanceGroupType=CORE,InstanceCount=2,InstanceType=$INSTANCE_TYPE \
    --configuration file://container-executor.json
```

## Configurar o YARN para acessar o Amazon ECR no EMR 6.0.0 e versões anteriores
<a name="emr-docker-ECR"></a>

Se você está começando a usar o Amazon ECR agora, siga as instruções em [Como começar a usar o Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_GetStarted.html) e verifique se você tem acesso ao Amazon ECR de cada instância no cluster do Amazon EMR.

No EMR 6.0.0 e versões anteriores, para acessar o Amazon ECR usando o comando do Docker, é necessário primeiro gerar credenciais. Para verificar se o YARN pode acessar imagens do Amazon ECR, use a variável de ambiente do contêiner `YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG` para transmitir uma referência às credenciais geradas.

Execute o comando a seguir em um dos nós core para obter a linha de login da conta do ECR.

```
aws ecr get-login --region us-east-1 --no-include-email
```

O comando `get-login` gera o comando correto da CLI do Docker que deve ser executado para criar credenciais. Copie e execute a saída de `get-login`.

```
sudo docker login -u AWS -p <{{password}}> https://<{{account-id}}>.dkr.ecr.us-east-1.amazonaws.com
```

Esse comando gera um arquivo `config.json` na pasta `/root/.docker`. Copie esse arquivo para o HDFS para que os trabalhos enviados ao cluster possam usá-lo a fim de fazer a autenticação no Amazon ECR.

Execute os comandos a seguir para copiar o arquivo `config.json` no diretório inicial.

```
mkdir -p ~/.docker
sudo cp /root/.docker/config.json ~/.docker/config.json
sudo chmod 644 ~/.docker/config.json
```

Execute os comandos a seguir para colocar o config.json no HDFS para que ele possa ser usado por trabalhos em execução no cluster.

```
hadoop fs -put ~/.docker/config.json /user/hadoop/
```

O YARN pode acessar o ECR como um registro de imagem do Docker e extrair contêineres durante a execução do trabalho.

Depois de configurar os registros do Docker e o YARN, é possível executar aplicativos do YARN usando contêineres do Docker. Para obter mais informações, consulte [Run Spark applications with Docker using Amazon EMR 6.0.0](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-docker.html).

No EMR 6.1.0 e versões posteriores, não é necessário configurar a autenticação no Amazon ECR manualmente. Se um registro do Amazon ECR for detectado na chave de classificação `container-executor`, o atributo de autenticação automática do Amazon ECR será ativado, e o YARN gerenciará o processo de autenticação quando você enviar um trabalho do Spark com uma imagem do ECR. Você pode confirmar se a autenticação automática está habilitada verificando `yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled` em yarn-site. A autenticação automática está habilitada e a configuração de autenticação do YARN está definida como `true` se `docker.trusted.registries` contém um URL de registro do ECR.

**Pré-requisitos para usar a autenticação automática no Amazon ECR**
+ EMR versão 6.1.0 ou posterior
+ O registro ECR incluído na configuração está na mesma região do cluster
+ Perfil do IAM com permissões para obter o token de autorização e extrair qualquer imagem

Para obter mais informações, consulte [Configuração com o Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html).

**Como habilitar a autenticação automática**

Siga [Configurar registros do Docker](#emr-docker-hub) para definir um registro do Amazon ECR como registro confiável e garantir que o repositório do Amazon ECR e o cluster estejam na mesma região.

Para habilitar esse atributo mesmo quando o registro ECR não estiver definido no registro confiável, use a classificação de configuração para definir `yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled` como `true`.

**Como desabilitar a autenticação automática**

Por padrão, a autenticação automática é desabilitada se nenhum registro do Amazon ECR for detectado no registro confiável.

Para desabilitar a autenticação automática, mesmo quando o registro do Amazon ECR estiver definido no registro confiável, use a classificação de configuração para definir `yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled` como `false`.

**Como verificar se a autenticação automática está habilitada em um cluster**

No nó principal, use um editor de texto, como `vi`, para visualizar o conteúdo do arquivo de log: `vi /etc/hadoop/conf.empty/yarn-site.xml`. Verifique o valor de `yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled`.