Reconfigurar um grupo de instâncias de um cluster em execução - Amazon EMR

Reconfigurar um grupo de instâncias de um cluster em execução

Com o Amazon EMR versão 5.21.0 e posteriores, você pode reconfigurar as aplicações do cluster e especificar classificações de configuração adicionais para cada grupo de instâncias em um cluster em execução. Para fazer isso, você pode usar o console do Amazon EMR, a AWS Command Line Interface (AWS CLI) ou o AWS SDK.

Quando você atualiza uma configuração de aplicação para um grupo de instâncias no novo console do Amazon EMR, o console tenta mesclar a nova configuração com a configuração atual para criar uma configuração nova e ativa. No caso incomum em que o Amazon EMR não conseguir mesclar a configuração, o console alertará você.

Depois que você enviar uma solicitação de reconfiguração para um grupo de instâncias, o Amazon EMR atribuirá um número de versão à nova especificação de configuração. É possível rastrear o número da versão de configuração ou o estado de um grupo de instâncias visualizando os eventos do CloudWatch. Para obter mais informações, consulte Monitorar eventos do CloudWatch.

nota

Só é possível substituir, e não excluir, as configurações do cluster que foram especificadas durante a criação do cluster. Se há diferenças entre a configuração atual e o arquivo que você forneceu, o Amazon EMR redefine as configurações modificadas manualmente, como as que você modificou enquanto estava conectado ao cluster usando SSH, para os padrões do cluster do grupo de instâncias especificado.

Considerações ao reconfigurar um grupo de instâncias

Ações de reconfiguração

Quando você envia uma solicitação de reconfiguração usando o console do Amazon EMR, a AWS Command Line Interface (AWS CLI) ou o AWS SDK, o Amazon EMR verifica o arquivo de configuração existente no cluster. Se há diferenças entre a configuração atual e o arquivo que você forneceu, o Amazon EMR inicia ações de reconfiguração, reinicia algumas aplicações e redefine as configurações modificadas manualmente, como as que você modificou enquanto estava conectado ao cluster usando SSH, para os padrões do cluster do grupo de instâncias especificado.

nota

O Amazon EMR executa algumas ações padrão durante cada reconfiguração de grupo de instâncias. Essas ações padrão podem entrar em conflito com as personalizações do cluster feitas por você e resultar em falhas de reconfiguração. Para obter mais informações sobre como solucionar falhas de reconfiguração, consulte Solucionar problemas de reconfiguração do grupo de instâncias.

O Amazon EMR também inicia ações de reconfiguração para as classificações de configuração que você especifica na solicitação. Para obter uma lista completa dessas ações, consulte a seção de classificações de configuração da versão do Amazon EMR que você usa. Por exemplo, Classificações de configuração do 6.2.0.

nota

O Guia de lançamento do Amazon EMR lista somente as ações de reconfiguração a partir das versões 5.32.0 e 6.2.0 do Amazon EMR.

Interrupção do serviço

O Amazon EMR segue um processo contínuo para reconfigurar as instâncias nos grupos de instâncias centrais e de tarefa. Somente 10% das instâncias em um grupo de instâncias são modificadas e reiniciadas por vez. Esse processo leva mais tempo para ser concluído, mas reduz a chance de possíveis falhas de aplicativo em um cluster em execução.

Para executar trabalhos do YARN durante a reinicialização do YARN, crie um cluster do Amazon EMR com múltiplos nós principais ou defina yarn.resourcemanager.recovery.enabled como true na classificação da configuração yarn-site. Para obter mais informações sobre o uso de múltiplos nós principais, consulte High availability YARN ResourceManager.

Validação da aplicação

O Amazon EMR verifica se cada aplicação do cluster está em execução após o processo de reinicialização da reconfiguração. Se alguma aplicação não estiver disponível, a operação geral de reconfiguração falhará. Se houver falha na reconfiguração de uma operação, o Amazon EMR reverterá os parâmetros de configuração para a versão de trabalho anterior.

nota

Para evitar falhas na reconfiguração, é recomendável instalar somente as aplicações que planeja usar no cluster. Também é recomendável verificar se todas as aplicações do cluster estão íntegras e em execução antes de enviar uma solicitação de reconfiguração.

Tipos de reconfiguração

É possível reconfigurar um grupo de instâncias de duas maneiras:

  • Substituir. Método de reconfiguração padrão e o único disponível nas versões do Amazon EMR anteriores a 5.35.0 e 6.6.0. Esse método de reconfiguração substitui indiscriminadamente todo arquivo no cluster pelo conjunto de configurações recém-enviado. O método apaga as alterações nos arquivos de configuração feitas fora da API de reconfiguração.

  • Mesclar. Método de reconfiguração compatível com o Amazon EMR 5.35.0 e 6.6.0 e versões posteriores, exceto no console do Amazon EMR, em que nenhuma versão é compatível. Esse método de reconfiguração mescla as configurações recém-enviadas com as configurações já existentes no cluster. Essa opção só adicionará ou modificará as novas configurações que você enviar. Ela preserva as configurações atuais.

nota

O Amazon EMR continua substituindo algumas configurações essenciais do Hadoop necessárias para garantir que o serviço seja executado corretamente.

Limitações

Ao reconfigurar um grupo de instâncias de um cluster em execução, considere estas limitações:

  • Aplicações que não sejam do Yarn podem falhar durante a reinicialização ou causar problemas no cluster, sobretudo se as aplicações não estiverem configuradas corretamente. Ao se aproximarem demais do uso máximo de memória e CPU, os clusters poderão ter problemas após o processo de reinicialização. Isso se aplica principalmente ao grupo de instâncias principal.

  • Não é possível enviar uma solicitação de reconfiguração quando o grupo de instâncias está sendo redimensionado. Se uma reconfiguração for iniciada enquanto um grupo de instâncias estiver sendo redimensionado, a reconfiguração não poderá ser iniciada até que o redimensionamento do grupo de instâncias tenha sido concluído e vice-versa.

  • Depois de reconfigurar um grupo de instâncias, o Amazon EMR reiniciará as aplicações para permitir que as novas configurações entrem em vigor. Uma falha no trabalho ou outro comportamento inesperado do aplicativo poderão ocorrer se os aplicativos estiverem em uso durante a reconfiguração.

  • Se houver falha na reconfiguração de um grupo de instâncias, o Amazon EMR reverterá os parâmetros de configuração para a versão anterior válida. Se também houver falha no processo de reversão, você deverá enviar uma nova solicitação ModifyInstanceGroup para recuperar o grupo de instâncias a partir do estado SUSPENDED.

  • As solicitações de reconfiguração para classificações de configuração do Phoenix são compatíveis com as versões 5.23.0 e posteriores do Amazon EMR, e não são compatíveis com a versão 5.21.0 ou 5.22.0 do Amazon EMR.

  • Solicitações de reconfiguração para classificações de configuração do HBase são compatíveis somente com o Amazon EMR 5.30.0 e versões posteriores, e não são compatíveis com as versões 5.23.0 a 5.29.0 do Amazon EMR.

  • O Amazon EMR oferece suporte a solicitações de reconfiguração de aplicações em um cluster do Amazon EMR com múltiplos nós primários somente nas versões 5.27.0 e posteriores do Amazon EMR.

  • Não há suporte para reconfigurar a classificação hdfs-encryption-zones ou qualquer uma das classificações de configuração em um cluster do Amazon EMR com múltiplos nós primários.

  • O Amazon EMR atualmente não é compatível com determinadas solicitações de reconfiguração para o agendador de capacidade que exijam a reinicialização do YARN ResourceManager. Por exemplo, não é possível remover uma fila completamente.

Reconfigurar um grupo de instâncias no console

nota

O console do Amazon EMR não oferece suporte a reconfigurações do tipo Merge.

  1. Abra o console do Amazon EMR em https://console.aws.amazon.com/emr

  2. Na lista de clusters, m Nome, escolha o cluster ativo que você deseja reconfigurar.

  3. Abra a página de detalhes do cluster e acesse a guia Configurações.

  4. Na lista suspensa Filter (Filtro), selecione o grupo de instâncias que você deseja reconfigurar.

  5. No menu suspenso Reconfigurar, escolha Editar na tabela ou Editar no arquivo JSON.

    • Editar na tabela: na tabela de classificações de configuração, edite a propriedade e o valor das configurações atuais ou escolha Adicionar configuração para fornecer a propriedade e o valor para outras classificações de configuração.

    • Editar no arquivo JSON: insira a configuração diretamente no JSON ou use a sintaxe abreviada (demonstrada no texto sombreado). Caso contrário, forneça um URI do Amazon S3 para um arquivo com um objeto JSON Configurations.

    nota

    A coluna Origem na tabela de classificações de configuração indica se a configuração é fornecida quando você cria um cluster ou quando você especifica configurações adicionais para esse grupo de instâncias. Você pode editar as configurações para um grupo de instâncias de ambas as origens. Não é possível excluir as configurações iniciais do cluster, mas você pode substituí-las por um grupo de instâncias.

    Você também pode adicionar ou editar classificações de configuração aninhadas diretamente na tabela. Por exemplo, para fornecer uma sub-classificação de export adicional de hadoop-env, adicione uma classificação de configuração hadoop.export na tabela. Em seguida, forneça uma propriedade específica e um valor para essa classificação.

  6. (Opcional) Selecione Apply this configuration to all active instance groups (Aplicar essa configuração a todos os grupos de instâncias ativas).

  7. Salve as alterações.

Reconfigurar um grupo de instâncias usando a CLI

Você pode usar o comando modify-instance-groups para especificar configurações para cada grupo de instâncias em um cluster em execução.

nota

Nos exemplos a seguir, substitua <j-2AL4XXXXXX5T9> por seu ID de cluster e substitua <ig-1xxxxxxx9> pelo ID de seu grupo instâncias.

exemplo : substituir uma configuração para um grupo de instâncias

O exemplo a seguir referencia um arquivo de configuração JSON chamado instanceGroups.json para editar a propriedade do verificador de integridade de disco do YARN NodeManager para um grupo de instâncias.

  1. Prepare a classificação da configuração e salve-a como instanceGroups.json no mesmo diretório em que você executará o comando.

    [ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" }, "Configurations":[] } ] } ]
  2. Execute o seguinte comando .

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
exemplo — Adicionar uma configuração a um grupo de instâncias

Se deseja adicionar uma configuração a um grupo de instâncias, você deverá incluir todas as configurações especificadas anteriormente para aquele grupo de instâncias em sua nova solicitação ModifyInstanceGroup. Caso contrário, as configurações especificadas anteriormente serão removidas.

O exemplo a seguir adiciona uma propriedade para o verificador de memória virtual YARN NodeManager. A configuração também inclui valores previamente especificados para o verificador de integridade do disco YARN NodeManager para que os valores não sejam substituídos.

  1. Prepare o conteúdo a seguir em instanceGroups.json e salve-o no mesmo diretório onde você executará o comando.

    [ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0", "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
  2. Execute o seguinte comando .

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
exemplo — Adicionar uma configuração a um grupo de instâncias com uma reconfiguração do tipo Merge

Quando quiser usar o método padrão de reconfiguração Overwrite para adicionar uma configuração, é necessário incluir todas as configurações especificadas anteriormente para esse grupo de instâncias em sua nova solicitação ModifyInstanceGroup. Caso contrário, Overwrite removerá as configurações que você especificou anteriormente. Não é necessário fazer isso com a reconfiguração Merge. Em vez disso, garanta que sua solicitação inclua apenas as novas configurações.

O exemplo a seguir adiciona uma propriedade para o verificador de memória virtual YARN NodeManager. Como essa é uma reconfiguração do tipo Merge, ela não substitui os valores especificados anteriormente para o verificador de integridade do disco YARN NodeManager.

  1. Prepare o conteúdo a seguir em instanceGroups.json e salve-o no mesmo diretório onde você executará o comando.

    [ {"InstanceGroupId":"<ig-1xxxxxxx9>", "ReconfigurationType" :"MERGE", "Configurations":[ {"Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
  2. Execute o seguinte comando .

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
exemplo : excluir uma configuração de um grupo de instâncias

Para excluir uma configuração para um grupo de instâncias, envie uma nova solicitação de reconfiguração que exclua a configuração anterior.

nota

Só é possível substituir a configuração inicial do cluster. Você não pode excluí-la.

Por exemplo, para excluir a configuração do verificador de integridade de disco do YARN NodeManager do exemplo anterior, envie um novo instanceGroups.json com o conteúdo a seguir.

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
nota

Para excluir todas as configurações na última solicitação de reconfiguração, envie uma solicitação de reconfiguração com uma matriz de configurações. Por exemplo,

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[] } ]
exemplo — Reconfigurar e redimensionar um grupo de instâncias em uma solicitação

O JSON de exemplo a seguir demonstra como reconfigurar e redimensionar um grupo de instâncias em na mesma solicitação.

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "InstanceCount":5, "EC2InstanceIdsToTerminate":["i-123"], "ForceShutdown":true, "ShrinkPolicy":{ "DecommissionTimeout":10, "InstanceResizePolicy":{ "InstancesToTerminate":["i-123"], "InstancesToProtect":["i-345"], "InstanceTerminationTimeout":20 } }, "Configurations":[ { "Classification":"yarn-site", "Configurations":[], "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" } } ] } ]

Reconfigurar um grupo de instâncias usando o SDK do Java

nota

Nos exemplos a seguir, substitua <j-2AL4XXXXXX5T9> por seu ID de cluster e substitua <ig-1xxxxxxx9> pelo ID de seu grupo instâncias.

O trecho de código a seguir fornece uma nova configuração para um grupo de instâncias usando o AWS SDK for Java.

AWSCredentials credentials = new BasicAWSCredentials("access-key", "secret-key"); AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials); Map<String,String> hiveProperties = new HashMap<String,String>(); hiveProperties.put("hive.join.emit.interval","1000"); hiveProperties.put("hive.merge.mapfiles","true"); Configuration configuration = new Configuration() .withClassification("hive-site") .withProperties(hiveProperties); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("<ig-1xxxxxxx9>") .withReconfigurationType("MERGE"); .withConfigurations(configuration); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);

O trecho de código a seguir exclui uma configuração especificada anteriormente para um grupo de instâncias fornecendo uma matriz vazia de configurações.

List<Configuration> configurations = new ArrayList<Configuration>(); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("<ig-1xxxxxxx9>") .withConfigurations(configurations); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);

Solucionar problemas de reconfiguração do grupo de instâncias

Se o processo de reconfiguração de um grupo de instâncias falhar, o Amazon EMR reverterá a reconfiguração e registrará em log uma mensagem de falha usando um evento do Amazon CloudWatch. O evento fornece um breve resumo da falha de reconfiguração. Ele lista as instâncias em que a reconfiguração falhou e as mensagens de falha correspondentes. Veja a seguir um exemplo de mensagem de falha.

The reconfiguration operation for instance group ig-1xxxxxxx9 in Amazon EMR cluster j-2AL4XXXXXX5T9 (ExampleClusterName) failed at 2021-01-01 00:00 UTC and took 2 minutes to fail. Failed configuration version is example12345. Failure message: Instance i-xxxxxxx1, i-xxxxxxx2, i-xxxxxxx3 failed with message "This is an example failure message".

Para coletar mais dados sobre uma falha de reconfiguração, verifique os logs de provisionamento do nó. Isso serve principalmente quando você recebe a mensagem a seguir.

i-xxxxxxx1 failed with message “Unable to complete transaction and some changes were applied.”
On the node
Acessar os logs de provisionamento do nó conectando-se a um nó
  1. Use o SSH para se conectar ao nó em que a reconfiguração falhou. Para obter instruções, consulte Conecte-se à sua instância do Linux no Guia do usuário do Amazon EC2 para instâncias do Linux.

  2. Navegue até o diretório a seguir, que contém os arquivos de log de provisionamento do nó.

    /mnt/var/log/provision-node/
  3. Abra o subdiretório reports e pesquise o relatório de provisionamento do nó para a reconfiguração. O diretório reports organiza os logs por número de versão de reconfiguração, identificador universal exclusivo (UUID), endereço IP da instância Amazon EC2 e carimbo de data/hora. Cada relatório é um arquivo YAML compactado contendo informações detalhadas sobre o processo de reconfiguração.

    Veja a seguir um exemplo de nome e caminho do arquivo de relatório.

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  4. Você pode examinar um relatório usando um visualizador de arquivos como zless, como no exemplo a seguir.

    zless 202104061715.yaml.gz
Amazon S3
Acessar logs de provisionamento do nó usando o Amazon S3
  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Abra o bucket do Amazon S3 especificado quando você configurou o cluster para arquivar arquivos de log.

  3. Navegue até esta pasta, que contém os arquivos de log de provisionamento do nó:

    amzn-s3-demo-bucket/elasticmapreduce/<cluster id>/node/<instance id>/provision-node/
  4. Abra a pasta reports e pesquise o relatório de provisionamento do nó para a reconfiguração. A pasta reports organiza os logs por número de versão de reconfiguração, identificador universal exclusivo (UUID), endereço IP da instância Amazon EC2 e carimbo de data/hora. Cada relatório é um arquivo YAML compactado contendo informações detalhadas sobre o processo de reconfiguração.

    Veja a seguir um exemplo de nome e caminho do arquivo de relatório.

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  5. Para visualizar um arquivo de log, você pode baixá-lo no Amazon S3 para a máquina local como arquivo de texto. Para obter instruções, consulte Fazer download de um objeto.

Cada arquivo de log contém um relatório detalhado de provisionamento para a reconfiguração associada. Para encontrar informações sobre mensagens de erro, pesquise o nível do log err de um relatório. O formato do relatório depende da versão do Amazon EMR no cluster.

O exemplo a seguir mostra informações de erro para versões do Amazon EMR anteriores a 5.32.0 e 6.2.0.

- !ruby/object:Puppet::Util::Log level: !ruby/sym err tags: - err message: "Example detailed error message." source: Puppet time: 2021-01-01 00:00:00.000000 +00:00

Em vez disso, as versões 5.32.0 e 6.2.0 e posteriores do Amazon EMR usam o formato a seguir.

- level: err message: 'Example detailed error message.' source: Puppet tags: - err time: '2021-01-01 00:00:00.000000 +00:00' file: line: