Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Warum schlägt mein Spark- oder Hive-Auftrag auf Amazon EMR mit einer Amazons3Exception vom Typ HTTP 503 „Slow Down“ fehl?
Mein Apache Spark- oder Apache Hive-Auftrag auf Amazon EMR schlägt mit einer Amazons3Exception vom Typ HTTP 503 „Slow Down“ fehl.
Kurzbeschreibung
Wenn die Amazon Simple Storage Service (Amazon S3)-Anforderungsrate für die Anwendung die normalerweise anhaltenden Raten überschreitet und Amazon S3 intern die Leistung optimiert, erhältst du die folgende Fehlermeldung:
„java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down; Request ID: 2E8B8866BFF00645; S3 Extended Request ID: oGSeRdT4xSKtyZAcUe53LgUf1+I18dNXpL2+qZhFWhuciNOYpxX81bpFiTw2gum43GcOHR+UlJE=), S3 Extended Request ID: oGSeRdT4xSKtyZAcUe53LgUf1+I18dNXpL2+qZhFWhuciNOYpxX81bpFiTw2gum43GcOHR+UlJE=“
Lösung
CloudWatch-Anforderungsmetriken konfigurieren
Um das Problem mit zu vielen Anforderungen zu identifizieren, empfiehlt es sich, Amazon CloudWatch-Anforderungsmetriken für den Amazon-S3-Bucket zu konfigurieren.
Aktiviere CloudWatch-Anforderungsmetriken für den Bucket und definiere einen Filter für das Präfix.
Ändern der Wiederholungsstrategie für Amazon-S3-Anforderungen
Standardmäßig verwendet EMR File System (EMRFS) eine exponentielle Backoff-Strategie, um Anforderungen an Amazon S3 erneut zu versuchen. Das standardmäßige EMRFS-Wiederholungslimit ist 15. Du kannst jedoch das Wiederholungslimit für einen neuen Cluster, einen laufenden Cluster oder zur Anwendungslaufzeit erhöhen.
Um das Wiederholungslimit zu erhöhen, ändere den Wert des fs.s3.maxRetries-Parameters.
Hinweis: Wenn du für diesen Parameter einen sehr hohen Wert festlegst, kann es zu einer längeren Auftragsdauer kommen.
Setze den Parameter auf einen hohen Wert, z. B. 20, und überwache den Zeitaufwand der Aufträge. Passe dann den Parameter an den Anwendungsfall an.
Für einen neuen Cluster kannst du beim Starten des Clusters ein Konfigurationsobjekt hinzufügen, das dem folgenden ähnelt:
[ { "Classification": "emrfs-site", "Properties": { "fs.s3.maxRetries": "20" } } ]
Nachdem du den Cluster gestartet hast, verwenden Spark- und Hive-Anwendungen, die auf Amazon EMR ausgeführt werden, das neue Limit.
Gehe wie folgt vor, um das Wiederholungslimit für einen aktuell ausgeführten Cluster zu erhöhen:
- Öffne die Amazon EMR-Konsole.
- Wähle den aktiven Cluster aus, den du neu konfigurieren möchtest.
- Wähle die Registerkarte Konfigurationen.
- Wähle in der Dropdown-Liste Filter die Instance-Gruppe aus, die du neu konfigurieren möchtest.
- Wähle in der Dropdown-Liste Neu konfigurieren die Option In Tabelle bearbeiten.
- Wähle in der Tabelle mit der Konfigurationsklassifizierung die Option Konfiguration hinzufügen aus und gib dann Folgendes ein:
Verwende für Klassifizierung emrfs-site
Verwende für Eigenschaft fs.s3.maxRetries
Verwende für Wert den neuen Wert für das Wiederholungslimit. Zum Beispiel, 20. - Wähle Diese Konfiguration auf alle aktiven Instance-Gruppen anwenden.
- Wähle Änderungen speichern.
Nach der Bereitstellung der Konfiguration verwenden Spark- und Hive-Anwendungen das neue Limit.
Um das Wiederholungslimit für eine Spark-Anwendung zur Laufzeit zu erhöhen, verwende eine Spark-Shell-Sitzung, um den fs.s3.maxRetries-Parameter ähnlich dem folgenden Beispiel zu ändern:
spark> sc.hadoopConfiguration.set("fs.s3.maxRetries", "20") spark> val source_df = spark.read.csv("s3://awsexamplebucket/data/") spark> source_df.write.save("s3://awsexamplebucket2/output/")
Um das Wiederholungslimit für eine Hive-Anwendung zur Laufzeit zu erhöhen, führe einen Befehl aus, der dem folgenden Beispiel ähnelt:
hive> set fs.s3.maxRetries=20; hive> select ....
Die Anzahl gleichzeitiger Amazon-S3-Anforderungen anpassen
- Wenn du mehrere Aufträge (Spark, Apache Hive oder s-dist-cp) hast, die dasselbe Amazon-S3-Präfix lesen und dasselbe Amazon-S3-Präfix schreiben, kannst du die Parallelität anpassen. Beginne mit den Aufträgen mit den meisten Lese- oder Schreibvorgängen und reduziere deren Parallelität, um übermäßige Parallelität zu vermeiden.
Hinweis: Wenn du den kontoübergreifenden Zugriff für Amazon S3 konfiguriert hast, können auch andere AWS-Konten Aufträge an dasselbe Präfix senden. - Wenn beim Versuch des Auftrags, in den Ziel-Bucket zu schreiben, Fehler auftreten, reduziere die übermäßige Schreibparallelität. Verwende beispielsweise die Spark-Operationen .coalesce() oder .repartition(), um die Anzahl der Spark-Ausgabepartitionen zu reduzieren, bevor du in Amazon S3 schreibst. Du kannst auch die Anzahl der Kerne pro Executor oder die Anzahl der Executoren reduzieren.
- Wenn beim Versuch des Auftrags, aus dem Quell-Bucket zu lesen, Fehler auftreten, passe die Größe der Objekte an. Um die Anzahl der vom Auftrag gelesenen Objekte zu reduzieren, aggregiere kleinere Objekte zu größeren Objekten. Verwende beispielsweise s3-dist-cp, um eine große Anzahl kleiner Dateien zu einer kleineren Anzahl großer Dateien zusammenzuführen.
Verwandte Informationen
Bewährte Methoden zur Gestaltung von Mustern: Optimierung der Amazon-S3-Leistung
- Themen
- Analytics
- Tags
- Amazon EMR
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor 3 Jahren