Configurar o Docker para uso com clusters do Amazon EMR - Amazon EMR

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

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.

É 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

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.

Configurar registros do Docker

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

Se você está começando a usar o Amazon ECR agora, siga as instruções em Como começar a usar o Amazon ECR 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.

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.

Como habilitar a autenticação automática

Siga Configurar registros do Docker 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.