Erros da VPC durante as operações de cluster do Amazon EMR
Os erros a seguir são comuns na configuração da VPC no Amazon EMR.
Tópicos
Configuração de sub-rede inválida
Na página Cluster Details (Detalhes do cluster), no campo Status, será exibida uma mensagem de erro semelhante ao seguinte:
The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable
rtb-id
for vpc vpc-id
.
Para resolver esse problema, você deve criar um Gateway da Internet e anexá-lo à sua VPC. Para obter mais informações, consulte Adicionar um gateway da Internet à VPC.
Como alternativa, verifique se você configurou a VPC com as opções Enable DNS resolution (Habilitar resolução DNS) e Enable DNS hostname support (Habilitar suporte de nome de host DNS) ativadas. Para obter mais informações, consulte Como usar o DNS com sua VPC.
Conjunto de opções DHCP ausente
Você verá uma falha de etapa no syslog (log do sistema) do cluster com uma mensagem de erro semelhante ao seguinte:
ERROR org.apache.hadoop.security.UserGroupInformation (main): PriviledgedActionException as:hadoop (auth:SIMPLE) cause:java.io.IOException: org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id '
application_id
' doesn't exist in RM.
ou
ERROR org.apache.hadoop.streaming.StreamJob (main): Error Launching job : org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id '
application_id
' doesn't exist in RM.
Para resolver esse problema, você deve configurar uma VPC que inclui um conjunto de opções DHCP cujos parâmetros estejam definidos como os seguintes valores:
nota
Se você usar a região AWS GovCloud (US-West), defina o domain-name como us-gov-west-1.compute.internal
em vez do valor usado no exemplo a seguir.
-
domain-name =
ec2.internal
Use
ec2.internal
, se a região for Leste dos EUA (Norte da Virgínia). Para outras regiões, useregion-name
.compute.internal
. Por exemplo, em us-west-2, use domain-name=us-west-2.compute.internal
. -
domain-name-servers =
AmazonProvidedDNS
Para obter mais informações, consulte Conjuntos de opções de DHCP.
Erros de permissão
Uma falha no log stderr
para uma etapa indica que um recurso do Amazon S3 não tem as permissões apropriadas. Este é um erro 403 e a mensagem de erro é semelhante a algo como:
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID:
REQUEST_ID
Se o ActionOnFailure estiver definido como TERMINATE_JOB_FLOW
, isso resultará no encerramento do cluster com o estado SHUTDOWN_COMPLETED_WITH_ERRORS
.
Algumas maneiras de solucionar esse problema incluem:
-
Se você estiver usando uma política de bucket do Amazon S3 dentro de uma VPC, certifique-se de dar acesso a todos os buckets, criando um endpoint da VPC e selecionando Permitir todos na opção Política ao criar o endpoint.
-
Certifique-se de que as políticas associadas a recursos do S3 incluam a VPC na qual você inicia o cluster.
-
Tente executar o seguinte comando a partir de seu cluster, para verificar se você pode acessar o bucket
hadoop fs -copyToLocal s3://
path-to-bucket
/tmp/ -
Você pode obter mais informações de depuração específicas, ao configurar o parâmetro
log4j.logger.org.apache.http.wire
comoDEBUG
no arquivo/home/hadoop/conf/log4j.properties
no cluster. Você pode verificar o arquivo de logstderr
depois de tentar acessar o bucket a partir do cluster. O arquivo de log fornecerá informações mais detalhadas:Access denied for getting the prefix for bucket - us-west-2.elasticmapreduce with path samples/wordcount/input/ 15/03/25 23:46:20 DEBUG http.wire: >> "GET /?prefix=samples%2Fwordcount%2Finput%2F&delimiter=%2F&max-keys=1 HTTP/1.1[\r][\n]" 15/03/25 23:46:20 DEBUG http.wire: >> "Host: us-west-2.elasticmapreduce.s3.amazonaws.com[\r][\n]"
Erros que resultam em START_FAILED
Antes da AMI 3.7.0, para VPCs em que um nome de host é especificado, o Amazon EMR, mapeia os nomes de hosts internos da sub-rede com endereços de domínio personalizados da seguinte forma: ip-
. Por exemplo, se o nome do host fosse X.X.X.X.customdomain.com
.tldip-10.0.0.10
e a VPC tivesse a opção nome de domínio definida como customdomain.com, o nome de host resultante mapeado pelo Amazon EMR seria ip-10.0.1.0.customdomain.com
. Uma entrada é incluída em /etc/hosts
para resolver o nome do host como 10.0.0.10. Esse comportamento é alterado com a AMI 3.7.0 e agora o Amazon EMR honra totalmente a configuração de DHCP da VPC. Anteriormente, os clientes também podiam usar uma ação de bootstrap para especificar um mapeamento de nome de host.
Se quiser preservar esse comportamento, você deve fornecer o DNS e encaminhar a configuração de resolução que você precisa para o domínio personalizado.
Cluster Terminated with
errors
e falha ao iniciar NameNode
Ao iniciar um cluster do EMR em uma VPC que faz o uso de um nome de domínio DNS personalizado, pode haver falha no cluster com a seguinte mensagem de erro no console:
Terminated with errors On the master instance(
instance-id
), bootstrap action 1 returned a non-zero return code
A falha é resultado do NameNode não conseguir ser iniciado. Isso resultará no seguinte erro encontrado nos logs do NameNode, cujo URI do Amazon S3 tem o formato: s3://
:amzn-s3-demo-bucket
/logs
/cluster-id
/daemons/master instance-id
/hadoop-hadoop-namenode-master node hostname
.log.gz
2015-07-23 20:17:06,266 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem (main): Encountered exception loading fsimage java.io.IOException: NameNode is not formatted. at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:212) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1020) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:739) at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:537) at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:596) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:765) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:749) at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1441) at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1507)
Isso é causado por um possível problema em que uma instância do EC2 pode ter vários conjuntos de nomes de domínio totalmente qualificados ao iniciar clusters do EMR em uma VPC que faz uso de um servidor DNS fornecido pela AWS e um servidor DNS personalizado fornecido pelo usuário. Se o servidor DNS fornecido pelo usuário não fornecer nenhum PTR (registro do apontador) para qualquer um dos registros A usados para designar nós em um cluster do EMR, haverá falha de inicialização nos clusters quando configurado desta maneira. A solução é adicionar um registro PTR para cada registro A criado quando uma instância do EC2 é executada em qualquer uma das sub-redes na VPC.