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
comotrue
na classificação da configuraçãoyarn-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 estadoSUSPENDED
. -
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.
-
Abra o console do Amazon EMR em https://console.aws.amazon.com/emr
-
Na lista de clusters, m Nome, escolha o cluster ativo que você deseja reconfigurar.
-
Abra a página de detalhes do cluster e acesse a guia Configurações.
-
Na lista suspensa Filter (Filtro), selecione o grupo de instâncias que você deseja reconfigurar.
-
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 dehadoop-env
, adicione uma classificação de configuraçãohadoop.export
na tabela. Em seguida, forneça uma propriedade específica e um valor para essa classificação. -
-
(Opcional) Selecione Apply this configuration to all active instance groups (Aplicar essa configuração a todos os grupos de instâncias ativas).
-
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.
-
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":[] } ] } ] -
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.
-
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":[] } ] } ] -
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.
-
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":[] } ] } ] -
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 clusterj-2AL4XXXXXX5T9
(ExampleClusterName) failed at 2021-01-01 00:00 UTC and took 2 minutes to fail. Failed configuration version isexample12345
. Failure message: Instancei-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.”
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: