Configurar o Docker - 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

O Amazon EMR 6.x é compatível com o Hadoop 3, o que permite YARN NodeManager lançar contêineres diretamente no EMR cluster da Amazon 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 YARN aplicativos, como o Spark, sejam executados usando contêineres 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 seus YARN aplicativos, YARN baixa a imagem do Docker que você especifica ao enviar seu trabalho. YARNPara resolver 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 a Amazon, EMR recomendamos que você use a AmazonECR, que é um registro de contêineres 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 baixa imagens do registro do Docker quando seu YARN aplicativo está sendo executado no cluster. Esses requisitos de conectividade de rede podem limitar sua escolha de registro do Docker, dependendo se você implanta seu EMR cluster da Amazon em uma sub-rede pública ou privada.

Public subnet (Sub-rede pública)

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

Sub-rede privada

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

Para obter mais informações sobre como usar AWS PrivateLink para permitir o acesso à Amazon ECR em um cenário de sub-rede privada, consulte Configurando AWS PrivateLink a Amazon ECS e a Amazon ECR.

Configurar registros do Docker

Para usar os registros do Docker na AmazonEMR, você deve 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 a AmazonECR, você pode substituir docker.trusted.registries as configurações /etc/hadoop/conf/container-executor.cfg usando a EMR Classificação API com a chave de container-executor classificação.

O exemplo a seguir mostra como configurar o cluster para confiar tanto em um repositório público, nomeadoyour-public-repo, quanto em um endpoint de ECR registro. 123456789123.dkr.ecr.us-east-1.amazonaws.com Se você usarECR, substitua esse endpoint pelo seu ECR endpoint 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 Amazon EMR 6.0.0 com essa configuração usando o AWS Command Line Interface (AWS CLI), crie um arquivo chamado container-executor.json com o conteúdo da configuração anterior do executor-contêiner. JSON 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

Configurando YARN para acessar a Amazon ECR na EMR versão 6.0.0 e versões anteriores

Se você é novo na AmazonECR, siga as instruções em Introdução à Amazon ECR e verifique se você tem acesso à Amazon a ECR partir de cada instância em seu EMR cluster da Amazon.

Na EMR versão 6.0.0 e versões anteriores, para acessar a Amazon ECR usando o comando Docker, você deve primeiro gerar credenciais. Para verificar se YARN pode acessar imagens da AmazonECR, use a variável de ambiente do contêiner YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG para passar uma referência às credenciais que você gerou.

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

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

O get-login comando gera o CLI comando correto do Docker a 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 HDFS para que os trabalhos enviados ao cluster possam usá-lo para se autenticar na AmazonECR.

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 abaixo para colocar o config.json HDFS para que ele possa ser usado por trabalhos em execução no cluster.

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

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

Depois de configurar os registros do DockerYARN, você pode executar YARN aplicativos usando contêineres do Docker. Para obter mais informações, consulte Executar aplicativos Spark com o Docker usando o Amazon EMR 6.0.0.

Na EMR versão 6.1.0 e versões posteriores, você não precisa configurar manualmente a autenticação na AmazonECR. Se um ECR registro da Amazon for detectado na chave de container-executor classificação, o recurso de autenticação ECR automática da Amazon é ativado e YARN gerencia o processo de autenticação quando você envia um trabalho do Spark com uma ECR imagem. 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á ativada e a configuração de YARN autenticação é definida como true se docker.trusted.registries contiver um ECR registroURL.

Pré-requisitos para usar a autenticação automática na Amazon ECR

  • EMRversão 6.1.0 ou posterior

  • ECRo registro incluído na configuração está na mesma região do cluster

  • IAMfunção com permissões para obter o token de autorização e extrair qualquer imagem

Consulte Configurando com a Amazon ECR para obter mais informações.

Como habilitar a autenticação automática

Siga Configurar registros do Docker para definir um ECR registro da Amazon como um registro confiável e garantir que o ECR repositório da Amazon e o cluster estejam na mesma região.

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

Como desabilitar a autenticação automática

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

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

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.