Tengo un trabajo de transmisión EMR (Python) que normalmente funciona bien (por ejemplo, 10 máquinas que procesan 200 entradas). Sin embargo, cuando lo funciono contra grandes conjuntos de datos (12 máquinas de procesamiento de un total de 6000 entradas, en alrededor de 20 segundos por entrada), después de 2,5 horas de crujido consigo el siguiente error: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)
Si estoy leyendo esto correctamente, el subproceso falló con el código 143 porque alguien envió una señal SIGTERM al trabajo de transmisión.
¿Es correcto mi entendimiento? De ser así: ¿Cuándo enviaría la infraestructura EMR un SIGTERM?
¿Ha comprobado las métricas de CloudWatch para ver si está alcanzando algún tipo de límite de IO? Desde mi experiencia, una vez que alcanzas el límite de IO, comienzan a suceder cosas extrañas. No sé qué tipo de instancia estás usando para tus nodos de datos, pero te sugiero actualizar a algo con un rendimiento de E/S más rápido cuando se ejecutan trabajos más grandes. – Edenbauer
El problema es que cada tarea está unida a CPU, con E/S raras y esporádicas. Lo que hace es que carga un archivo desde S3, y luego durante unos 20 segundos realiza un gran procesamiento de CPU. Cada 5 segundos almacena otro archivo (intermedio) en S3. Utiliza algunas bibliotecas externas (lxml, scikit-learn), y pensé que tal vez una de ellas me estaba fallando (¿por un aumento en el consumo de memoria?), Y que la infraestructura EMR estaba enviando un SIGTERM. Para verificar eso, intento comprender los casos/escenarios en que EMR puede SIGTERM un proceso. – slavi