2012-02-29 9 views
6

Cuando ejecuto mi trabajo hadoop me sale el siguiente error:error Hadoop inusual - tareas mueren por su propia cuenta

Solicitud recibida para matar tarea 'attempt_201202230353_23186_r_000004_0' por el usuario tarea ha sido KILLED_UNCLEAN por el usuario

Los registros parecen estar limpios. Tengo 28 reductores, y esto no ocurre con todos los reductores. Sucede para unos pocos seleccionados y el reductor comienza de nuevo. No entiendo esto. También otra cosa que noté es que para un pequeño conjunto de datos, rara vez veo este error.

+0

¿Está fallando el trabajo debido a este problema? ¿Estás corriendo con la ejecución especulativa habilitada? –

+0

Sí, la ejecución especulativa se establece en verdadero. ¡El trabajo no falla, finalmente termina con una gran cantidad de reductores certificados/fallidos que en general aumentan el tiempo de finalización del trabajo! – RFT

+0

@Pradeep Gollakota Además, he observado que los reductores que se matan o fallan una vez siguen siendo asesinados como 8-9 veces hasta que tienen éxito y los reductores que no se matan ni siquiera una vez están limpios durante todo el trabajo. – RFT

Respuesta

1

¿Puedes intentar usar el contador (contador de hadoop) en tu lógica de reducción? Parece que hadoop no puede determinar si su programa de reducción se está ejecutando o está colgando. Espera unos minutos y lo mata, aunque tu lógica aún se esté ejecutando.

4

Hay tres cosas para probar:

Configuración de un contador de
Si Hadoop ve un contador para el trabajo progresa entonces no va a acabar con él (. Véase la respuesta de Arockiaraj Durairaj) Este parece ser el más Elegante, ya que podría permitirle obtener más información sobre los trabajos de larga duración y si los cuelgues pueden serlo.

Tiempos de espera de tareas más largos
Hadoop agota el tiempo de espera después de 10 minutos de manera predeterminada. Cambiar el tiempo de espera es algo así como fuerza bruta, pero podría funcionar. Imagine analizar archivos de audio que generalmente son archivos de 5MB (canciones), pero tiene unos pocos archivos de 50MB (álbum completo). Hadoop almacena un archivo individual por bloque. Entonces, si su tamaño de bloque HDFS es de 64MB, un archivo de 5MB y otro de 50M requerirá 1 bloque (64MB) (vea aquí http://blog.cloudera.com/blog/2009/02/the-small-files-problem/, y aquí Small files and HDFS blocks). Sin embargo, el trabajo de 5MB funcionaría más rápido que el de 50MB. tiempo de espera de la tarea se puede aumentar en el código (mapred.task.timeout) para el trabajo por las respuestas a esta pregunta similar: How to fix "Task attempt_201104251139_0295_r_000006_0 failed to report status for 600 seconds."

Aumentar la tarea intentos
Configurar Hadoop para hacer más de los 4 intentos por defecto (ver Pradeep La respuesta de Gollakota). Este es el método de fuerza más bruta de los tres. Hadoop intentará el trabajo más veces, pero podría estar enmascarando un problema subyacente (servidores pequeños, bloques de datos grandes, etc.).

Cuestiones relacionadas