Criar um cluster com versões anteriores da AMI do Amazon EMR - Amazon EMR

Criar um cluster com versões anteriores da AMI do Amazon EMR

As versões 2.x e 3.x do Amazon EMR são conhecidas como versão da AMI. Desde as versões 4.0.0 e posteriores do Amazon EMR, as versões são designadas por um rótulo de versão, como emr-5.11.0. Essa alteração é mais aparente quando você cria um cluster usando a AWS CLI ou programaticamente.

Ao usar a AWS CLI para criar um cluster com uma versão da AMI, use a opção --ami-version, por exemplo, --ami-version 3.11.0. Muitas opções, atributos e aplicações apresentadas nas versões 4.0.0 e posteriores do Amazon EMR não estão disponíveis quando você especifica uma --ami-version. Para obter mais informações, consulte create-cluster na AWS CLI Command Reference.

O comando da AWS CLI de exemplo a seguir inicia um cluster usando uma versão da AMI.

nota

Os caracteres de continuação de linha do Linux (\) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,\ InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,\ InstanceType=m3.xlarge --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\ Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]

Programaticamente, todas as versões do Amazon EMR usam a ação RunJobFlowRequest na API do EMR para criar clusters. O seguinte exemplo de código Java cria um cluster usando a versão da AMI 3.11.0.

RunJobFlowRequest request = new RunJobFlowRequest() .withName("AmiVersion Cluster") .withAmiVersion("3.11.0") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyPair") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge");

A chamada RunJobFlowRequest usa um rótulo de versão:

RunJobFlowRequest request = new RunJobFlowRequest() .withName("ReleaseLabel Cluster") .withReleaseLabel("emr-7.3.0") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyPair") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge");

Configurar o tamanho do cluster

Durante a execução do cluster, o Hadoop determina o número de tarefas de mapeador e reducer necessárias para processar os dados. Clusters maiores devem ter mais tarefas para fazer melhor utilização dos recursos e reduzir o tempo de processamento. Normalmente, um cluster do EMR permanece do mesmo tamanho durante toda a execução do cluster; você define o número de tarefas ao criar o cluster. Quando você redimensiona um cluster em execução, pode variar o processamento durante a execução do cluster. Portanto, em vez de usar um número fixo de tarefas, você pode variar o número de tarefas durante a vida útil do cluster. Há duas opções de configuração para ajudar a definir o número ideal de tarefas:

  • mapred.map.tasksperslot

  • mapred.reduce.tasksperslot

Você pode definir ambas as opções no arquivo mapred-conf.xml. Quando você envia um trabalho para o cluster, o cliente do trabalho verifica o número total de slots de mapeamento e redução em todo o cluster. O cliente do trabalho, em seguida, usa as seguintes equações para definir o número de tarefas:

  • mapred.map.tasks = mapred.map.tasksperslot * slots de mapeamento no cluster

  • mapred.reduce.tasks = mapred.reduce.tasksperslot * slots de redução no cluster

O cliente do trabalho lê o parâmetro tasksperslot somente se o número de tarefas não estiver configurado. Você pode substituir o número de tarefas a qualquer momento para todos os clusters por meio de uma ação de bootstrap, ou pode fazê-lo individualmente por trabalho, adicionando uma etapa para alterar a configuração.

O Amazon EMR é capaz de superar falhas de nós de tarefas e prosseguir com a execução do cluster, mesmo que o nó de tarefa se torne indisponível. O Amazon EMR disponibiliza automaticamente nós de tarefa adicionais para substituir aqueles que falham.

Você pode ter um número diferente de nós de tarefa para cada etapa do cluster. Você também pode adicionar uma etapa em um cluster em execução para modificar o número de nós de tarefa. Como é certo que todas as etapas são executadas sequencialmente por padrão, você pode especificar o número de nós de tarefa em execução para qualquer etapa.