Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
VPC-Fehler bei Amazon EMR-Clusteroperationen
Die folgenden Fehler treten häufig bei der VPC-Konfiguration in Amazon EMR auf.
Themen
Ungültige Subnetzkonfiguration
Auf der Seite Cluster Details (Cluster-Details) im Feld Status sehen Sie eine Fehlermeldung wie folgende:
The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable
rtb-id
for vpc vpc-id
.
Um dieses Problem zu lösen, müssen Sie ein Internet-Gateway erstellen und Ihre VPC anfügen. Weitere Informationen finden Sie unter Hinzufügen eines Internet-Gateways zu Ihrer VPC.
Alternativ stellen Sie sicher, dass Sie Ihre VPC mit Enable DNS resolution (DNS-Auflösung aktivieren) und Enable DNS hostname support (DNS-Hostnamen-Unterstützung aktivieren) aktiviert konfiguriert haben. Weitere Informationen finden Sie unter Verwenden von DNS in Ihrer VPC.
Fehlende DHCP-Optionsliste
Sie sehen einen Schrittfehler im Cluster-Systemprotokoll (syslog) mit einer Fehlermeldung ähnlich der folgenden:
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.
or
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.
Um dieses Problem zu lösen, müssen Sie eine VPC mit einer DHCP-Optionsliste konfigurieren, deren Parameter auf die folgenden Werte festgelegt sind:
Anmerkung
Wenn Sie die Region AWS GovCloud (US-West) verwenden, setzen Sie domain-name auf us-gov-west-1.compute.internal
anstelle des im folgenden Beispiel verwendeten Werts.
-
domain-name =
ec2.internal
Verwenden Sie
ec2.internal
, wenn Ihre Region USA Ost (Nord-Virginia) ist. Verwenden Sie für andere Regionen.region-name
.compute.internal
Verwenden Sie zum Beispiel in us-west-2 domain-name=us-west-2.compute.internal
. -
domain-name-servers =
AmazonProvidedDNS
Weitere Informationen finden Sie unter DHCP-Options-Sets.
Berechtigungsfehler
Ein Fehler im stderr
-Protokoll für einen Schritt gibt an, dass eine Amazon-S3-Ressource nicht über die entsprechenden Berechtigungen verfügt. Dies ist ein Fehler 403, der wie folgt aussieht:
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
Wenn der auf gesetzt ActionOnFailure istTERMINATE_JOB_FLOW
, würde dies dazu führen, dass der Cluster mit dem Status, SHUTDOWN_COMPLETED_WITH_ERRORS
beendet wird.
Möglichkeiten, um dieses Problem zu beheben, sind beispielsweise:
-
Wenn Sie eine Amazon-S3-Bucket-Richtlinie in einer VPC verwenden, stellen Sie sicher, dass der Zugriff auf alle Buckets ermöglicht wird. Erstellen Sie dazu einen VPC-Endpunkt und wählen Sie beim Erstellen des Endpunkts Alle zulassen unter der Option „Richtlinie“ aus.
-
Stellen Sie sicher, dass alle Richtlinien im Zusammenhang mit S3-Ressourcen die VPC umfassen, in der Sie den Cluster starten.
-
Führen Sie den folgenden Befehl über Ihren Cluster aus, um zu überprüfen, ob Sie auf den Bucket zugreifen können.
hadoop fs -copyToLocal s3://
path-to-bucket
/tmp/ -
Sie können spezifischere Debugging-Informationen abrufen, indem Sie den Parameter
log4j.logger.org.apache.http.wire
in der DateiDEBUG
-Datei im Cluster auf/home/hadoop/conf/log4j.properties
festlegen. Sie können diestderr
-Protokolldatei prüfen, nachdem Sie versucht haben, über den Cluster auf den Bucket zuzugreifen. Die Protokolldatei enthält detaillierte Informationen: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]"
Fehler, die zu START_FAILED
führen
Vor AMI 3.7.0, für die ein VPCs Hostname angegeben wurde, ordnet Amazon EMR die internen Hostnamen des Subnetzes den benutzerdefinierten Domainadressen wie folgt zu:. ip-
Wenn beispielsweise der Hostname X.X.X.X.customdomain.com
.tldip-10.0.0.10
lautet und die Domainnamenoption der VPC auf customdomain.com festgelegt ist, wird von Amazon EMR der Hostname ip-10.0.1.0.customdomain.com
zugeordnet. Ein Eintrag wird in /etc/hosts
hinzugefügt, um den Hostnamen in 10.0.0.10 aufzulösen. Dieses Verhalten wird ab AMI 3.7.0 geändert. Jetzt erkennt Amazon EMR die DHCP-Konfiguration der VPC vollständig an. Bislang konnten Kunden eine Zuweisung des Hostnamens auch mit einer Bootstrap-Aktion angeben.
Wenn Sie dieses Verhalten beibehalten möchten, müssen Sie die Einrichtung der DNS- und Weiterleitungsauflösung angeben, die Sie für die benutzerdefinierte Domain benötigen.
Cluster und kann nicht gestartet werden Terminated with
errors
NameNode
Beim Starten eines EMR-Clusters in einer VPC, die einen benutzerdefinierten DNS-Domainnamen verwendet, tritt bei Ihrem Cluster möglicherweise ein Fehler mit der folgende Fehlermeldung in der Konsole auf:
Terminated with errors On the master instance(
instance-id
), bootstrap action 1 returned a non-zero return code
Der Fehler ist darauf zurückzuführen, dass der Start NameNode nicht möglich ist. Dies führt zu dem folgenden Fehler in den NameNode Protokollen, deren Amazon S3 S3-URI die folgende Form hats3://
: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)
Dies ist auf ein potenzielles Problem zurückzuführen, bei dem eine EC2 Instance mehrere Sätze vollqualifizierter Domänennamen haben kann, wenn EMR-Cluster in einer VPC gestartet werden, die sowohl einen vom Benutzer AWS bereitgestellten DNS-Server als auch einen benutzerdefinierten DNS-Server verwendet. Wenn der vom Benutzer bereitgestellte DNS-Server keine Zeigerdatensätze (PTR) für die A-Datensätze bereitstellt, die zum Angeben von Knoten in einem EMR-Cluster dienen, können die so konfigurierten Cluster nicht starten. Die Lösung besteht darin, für jeden A-Datensatz, der erstellt wird, wenn eine EC2 Instance in einem der Subnetze der VPC gestartet wird, einen PTR-Datensatz hinzuzufügen.