Wie behebe ich den Fehler „Fehlercode: 503 Slow Down" bei s3-dist-cp-Jobs in Amazon EMR?
Mein S3DistCp-Auftrag (s3-dist-cp) im Amazon EMR-Auftrag schlägt aufgrund der Drosselung durch den Amazon Simple Storage Service (Amazon S3) fehl. Ich erhalte eine Fehlermeldung ähnlich der folgenden: mapreduce.Job: Task-ID: attempt_xxxxxx_0012_r_000203_0, Status : FEHLGESCHLAGEN Fehler: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Slow Down (Service: Amazon S3; Statuscode: 503; Fehlercode: 503 Slow Down; Anforderungs-ID: D27E827C847A8304; Erweiterte S3-Anforderungs-ID: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo=), Erweiterte S3-Anforderungs-ID: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo= at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)
Kurzbeschreibung
„Slow Down“ -Fehler treten auf, wenn Sie die Amazon S3-Anforderungsrate überschreiten (3.500 PUT/COPY/POST/DELETE- und 5.500 GET/HEAD-Anfragen pro Sekunde pro Präfix in einem Bucket). Dies passiert häufig, wenn Ihre Daten Partitionen im Apache Hive-Stil verwenden. Die folgenden Amazon S3-Pfade verwenden beispielsweise dasselbe Präfix (/year=2019/). Dies bedeutet, dass das Anforderungslimit bei 3.500 Schreibanforderungen oder 5.500 Leseanforderungen pro Sekunde liegt.
- s3://awsexamplebucket/year=2019/month=11/day=01/mydata.parquet
- s3://awsexamplebucket/year=2019/month=11/day=02/mydata.parquet
- s3://awsexamplebucket/year=2019/month=11/day=03/mydata.parquet
Wenn eine Erhöhung der Anzahl der Partitionen keine Option ist, reduzieren Sie die Anzahl der Reducer-Aufgaben oder erhöhen Sie das Wiederholungslimit für das EMR-Dateisystem (EMRFS), um Amazon S3-Drosselungsfehler zu beheben.
Lösung
Verwenden Sie eine der folgenden Optionen, um Drosselungsfehler bei s3-dist-cp-Aufträgen zu beheben.
Reduzieren Sie die Anzahl der Reduzierungen
Der Parameter mapreduce.job.reduces legt die Anzahl der Reduzierungen für die Aufgabe fest. Amazon EMR legt mapreduce.job.reduces automatisch auf Grundlage der Anzahl von Knoten im Cluster und der Speicherressourcen des Clusters fest. Führen Sie anschließend folgenden Befehl aus, um die Standardanzahl der Reduzierungen für Jobs in Ihrem Cluster zu überprüfen:
$ hdfs getconf -confKey mapreduce.job.reduces
Führen Sie einen Befehl ähnlich dem folgenden aus, um einen neuen Wert für mapreduce.job.reduces festzulegen. Mit diesem Befehl wird die Anzahl der Reduzierungen auf 10 festgelegt.
$ s3-dist-cp -Dmapreduce.job.reduces=10 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/
Erhöhen Sie das EMRFS-Wiederholungslimit
Standardmäßig ist das EMRFS-Wiederholungslimit auf 4 festgelegt. Führen Sie den folgenden Befehl aus, um das Wiederholungslimit für Ihren Cluster zu bestätigen:
$ hdfs getconf -confKey fs.s3.maxRetries
Um das Wiederholungslimit für einen einzelnen s3-dist-cp-Job zu erhöhen, führen Sie einen Befehl ähnlich dem folgenden aus. Mit diesem Befehl wird das Wiederholungslimit auf 20 festgelegt.
$ s3-dist-cp -Dfs.s3.maxRetries=20 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/
Um das Wiederholungslimit für einen neuen oder laufenden Cluster zu erhöhen, gehen Sie wie folgt vor:
- Neuer Cluster: Fügen Sie ein Konfigurationsobjekt ähnlich dem folgenden hinzu, wenn Sie einen Cluster starten.
- Laufender Cluster: Verwenden Sie das folgende Konfigurationsobjekt, um die Cluster-Konfiguration für die Instance-Gruppe zu überschreiben (Amazon EMR-Release-Versionen 5.21.0 und höher).
[ { "Classification": "emrfs-site", "Properties": { "fs.s3.maxRetries": "20" } } ]
Wenn Sie das Wiederholungslimit für den Cluster erhöhen, können Spark- und Hive-Anwendungen das neue Limit ebenfalls verwenden. Hier sehen Sie ein Beispiel für eine Spark-Shell-Sitzung, die das höhere Wiederholungslimit verwendet:
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/")
Ähnliche Informationen
Bewährte Methoden zur Gestaltung von Mustern: Optimierung der Amazon S3-Leistung
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr