Warum schlägt mein Spark- oder Hive-Job auf Amazon EMR mit einer Amazons3-Ausnahme mit HTTP 503 „Slow Down“ fehl?

Lesedauer: 4 Minute
0

Mein Apache Spark- oder Apache Hive-Job auf Amazon EMR schlägt mit einer HTTP 503 „Slow Down“ -Amazons3Exception fehl, die der folgenden ähnelt: java.io.ioException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.Amazons3Exception: Verlangsamen (Service: Amazon S3; Statuscode: 503; Fehlercode: 503 Langsamer fahren; Anforderungs-ID: 2E8B8866BFF00645; S3 Erweiterte Anforderungs-ID: ogserdt4xsktyzaCUE53LGUF1+i18dnxpl2+qzhfwhucinoypxx81bpfitw2gum43gcohr+ulje =), S3 Erweiterte Anforderungs-ID: ogserdt4xsktyzaCUE53LGUF1+i18dnxpl2+qzhfpl2+qzhfpl2+qzhffpl2+qzhffpl2+qzhffpl2+qzhffpl2+qzHFFhF1+i18dnxpl2+qzhffpl2+qzHFFHfJf1+i18dnxpl2+qzhffpl2+qzhffpl2+qzwhucinoypxx81bpfitw2gum43gCOHR+Öl=

Kurzbeschreibung

Dieser Fehler tritt auf, wenn die Anforderungsrate von Amazon Simple Storage Service (Amazon S3) für Ihre Anwendung die normalerweise anhaltenden Raten von über 5.000 Anfragen pro Sekunde übersteigt und Amazon S3 intern die Leistung optimiert.

Versuchen Sie die folgenden Methoden, um die Erfolgsquote Ihrer Anfragen beim Zugriff auf die S3-Daten mit Amazon EMR zu verbessern:

  • Ändern Sie die Wiederholungsstrategie für S3-Anfragen.
  • Passen Sie die Anzahl gleichzeitiger S3-Anfragen an.

Behebung

Um das Problem mit zu vielen Anfragen zu identifizieren, empfiehlt es sich, Amazon CloudWatch-Anforderungsmetriken für den S3-Bucket zu konfigurieren. Anhand dieser CloudWatch-Metriken können Sie die Lösung ermitteln, die für Ihren Anwendungsfall am besten geeignet ist.

CloudWatch-Anforderungsmetriken konfigurieren

Um Amazon S3-Anfragen zu überwachen, aktivieren Sie die CloudWatch-Anforderungsmetriken für den Bucket. Definieren Sie dann einen Filter für das Präfix. Eine Liste nützlicher Metriken zur Überwachung finden Sie unter Überwachen von Metriken mit Amazon CloudWatch.

Ändern Sie die Wiederholungsstrategie für S3-Anfragen

Standardmäßig verwendet EMRFS eine exponentielle Backoff-Strategie, um Anfragen an Amazon S3 erneut zu versuchen. Das standardmäßige EMRFS-Wiederholungslimit ist 15. Sie können jedoch das Wiederholungslimit für einen neuen Cluster, einen laufenden Cluster oder zur Anwendungslaufzeit erhöhen.

Um das Wiederholungslimit zu erhöhen, ändern Sie den Wert des Parameters fs.s3.maxRetries. Wenn Sie für diesen Parameter einen sehr hohen Wert festlegen, kann es zu einer längeren Auftragsdauer kommen. Versuchen Sie, diesen Parameter auf einen hohen Wert (z. B. 20) zu setzen, überwachen Sie den Zeitaufwand der Jobs und passen Sie diesen Parameter dann an Ihren Anwendungsfall an.

Für einen neuen Cluster können Sie beim Starten des Clusters ein Konfigurationsobjekt hinzufügen, das dem folgenden ähnelt:

[
  {
    "Classification": "emrfs-site",
    "Properties": {
      "fs.s3.maxRetries": "20"
    }
  }
]

Nach dem Start des Clusters verwenden Spark- und Hive-Anwendungen, die auf Amazon EMR ausgeführt werden, das neue Limit.

Gehen Sie wie folgt vor, um das Wiederholungslimit für einen laufenden Cluster zu erhöhen:

1.Öffnen Sie die Amazon EMR-Konsole.

2.Wählen Sie in der Clusterliste unter Name den aktiven Cluster aus, den Sie neu konfigurieren möchten.

3.Öffnen Sie die Cluster-Detailseite für den Cluster und wählen Sie die Registerkarte Konfigurationen.

4.Wählen Sie in der Dropdownliste Filter die Instance-Gruppe aus, die Sie neu konfigurieren möchten.

5.Wählen Sie in der Dropdownliste Neu konfigurieren die Option In Tabelle bearbeiten.

6.Wählen Sie in der Tabelle mit der Konfigurationsklassifizierung die Option Konfiguration hinzufügen aus, und geben Sie dann Folgendes ein:

Zur Klassifizierung: emrfs-site

Für Eigenschaft: fs.s3.maxRetries

Für Wert: der neue Wert für das Wiederholungslimit (z. B. 20)

7.Wählen Sie Diese Konfiguration auf alle aktiven Instance-Gruppen anwenden.

8.Wählen Sie Save changes (Änderungen speichern).

Nach der Bereitstellung der Konfiguration verwenden Spark- und Hive-Anwendungen das neue Limit.

Um das Wiederholungslimit zur Laufzeit zu erhöhen, verwenden Sie eine Spark-Shell-Sitzung, die der folgenden ähnelt:

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/")

Hier ist ein Beispiel dafür, wie Sie das Wiederholungslimit zur Laufzeit für eine Hive-Anwendung erhöhen können:

hive> set fs.s3.maxRetries=20;
hive> select ....

Passen Sie die Anzahl gleichzeitiger S3-Anfragen an

  • Wenn Sie mehrere Jobs (Spark, Apache Hive oder s-dist-cp) haben, die in dasselbe S3-Präfix lesen und schreiben, können Sie die Parallelität anpassen. Beginnen Sie mit den Aufgaben mit den meisten Lese- und Schreibvorgängen und reduzieren Sie deren Parallelität, um übermäßige Parallelität zu vermeiden. Wenn Sie den kontenübergreifenden Zugriff für Amazon S3 konfiguriert haben, denken Sie daran, dass andere Konten möglicherweise auch Jobs an dasselbe Präfix senden.
  • Wenn beim Versuch des Jobs, in den Ziel-Bucket zu schreiben, Fehler auftreten, reduzieren Sie die übermäßige Schreibparallelität. Verwenden Sie beispielsweise die Spark-Operationen .coalesce() oder .repartition(), um die Anzahl der Spark-Ausgabepartitionen zu reduzieren, bevor Sie in Amazon S3 schreiben. Sie können auch die Anzahl der Kerne pro Executor oder die Anzahl der Executoren reduzieren.
  • Wenn beim Versuch des Jobs, aus dem Quell-Bucket zu lesen, Fehler auftreten, passen Sie die Größe der Objekte an. Sie können kleinere Objekte zu größeren zusammenfassen, sodass die Anzahl der Objekte, die vom Job gelesen werden sollen, reduziert wird. Auf diese Weise müssen Sie Datensätze mit weniger Leseanforderungen lesen. Verwenden Sie 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

Warum schlägt meine Amazon EMR-Anwendung mit der HTTP-403-Amazons3-Ausnahme „Zugriff verweigert“ fehl?

Warum schlägt meine Amazon EMR-Anwendung mit einer HTTP 404 „Not Found“ -Amazons3Exception fehl?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren