Ich habe einen EMR-Streaming-Job (Python), der normalerweise gut funktioniert (z. B. 10 Maschinen, die 200 Eingaben verarbeiten). Allerdings, wenn ich laufen sie gegen große Datenmengen (12 Maschinen Verarbeitung insgesamt 6000 Eingänge, bei etwa 20 Sekunden pro Eingang), nach 2,5 Stunden von Knirschen ich folgende Fehlermeldung erhalten:Amazon Elastic MapReduce - SIGTERM
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 143
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:372)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:586)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:135)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:441)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:377)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Wenn ich das Lesen bin Dies richtig, der Subprozess ist mit Code 143 fehlgeschlagen, da jemand ein SIGTERM-Signal an den Streaming-Job gesendet hat.
Ist mein Verständnis korrekt? Wenn ja: Wann würde die EMR-Infrastruktur ein SIGTERM senden?
Haben Sie die CloudWatch-Messwerte überprüft, um zu sehen, ob Sie eine Art IO-Limit erreichen? Aus meiner Erfahrung beginnen einige seltsame Dinge zu passieren, sobald Sie das IO-Limit erreicht haben. Ich weiß nicht, welchen Instanztyp Sie für Ihre Datenknoten verwenden, aber ich würde vorschlagen, auf etwas mit schnellerer E/A-Leistung zu aktualisieren, wenn Sie größere Jobs ausführen. – Edenbauer
Die Sache ist, dass jede Aufgabe CPU-gebunden ist, mit seltenen und sporadischen I/O. Was es tut, ist, dass es eine Datei von S3 lädt und dann für ungefähr 20 Sekunden eine Menge schwerer CPU-Verarbeitung macht. Alle 5 Sekunden speichert er eine weitere (Zwischen-) Datei in S3. Es verwendet einige externe Bibliotheken (lxml, scikit-learn), und ich dachte, dass vielleicht einer von ihnen fehlgeschlagen ist (durch einen Anstieg des Speicherverbrauchs?), Und die EMR-Infrastruktur schickte einen SIGTERM. Um das zu überprüfen, versuche ich die Fälle/Szenarien zu verstehen, wenn EMR einen Prozess SIGTERM werden lässt. – slavi