Error de clúster de Amazon EMR: “Demasiados errores de búsqueda”
La presencia de mensajes de error Too many fetch-failures (Demasiados errores de recuperación) o Error reading task output (Error al leer la salida de la tarea) en los registros de intentos de tareas o de pasos indican que la tarea en ejecución depende de la salida de otra tarea. Esto suele ocurrir cuando una tarea de reducción se pone en cola para ejecutarse y requiere la salida de una o más tareas de asignación y la salida no está disponible aún.
Hay varias razones por las que la salida podría no estar disponible:
-
La tarea requisito previo aún se está procesando. Suele ser una tarea de asignación.
-
Los datos podrían no estar disponibles debido a una mala conectividad de red si los datos se encuentran en otra instancia.
-
Si HDFS se utiliza para recuperar la salida, es posible que exista un problema con HDFS.
La causa más frecuente de este error es que la tarea anterior sigue en procesamiento. Esto es especialmente probable si los errores se producen cuando las tareas de reducción son las primeras que se intentan ejecutar. Puede comprobar si este es el caso revisando el registro syslog para el paso de clúster que devuelve el error. Si el syslog muestra las tareas de asignación y reducción progresando, esto indica que la fase de reducción ha comenzado mientras hay tareas de asignación que no se han completado aún.
Una cosa que hay que buscar en los registros es un porcentaje de progreso de asignación que pasa al 100% y, a continuación, disminuye hasta un valor inferior. Cuando el porcentaje de asignación está al 100%, eso no significa que todas las tareas de asignación se han completado. Simplemente significa que Hadoop está ejecutando todas las tareas de asignación. Si este valor vuelve a disminuir por debajo del 100%, significa que una tarea de asignación ha devuelto un error y, en función de la configuración, Hadoop podría intentar volver a programar la tarea. Si el porcentaje de asignación permanece en el 100 % en los registros, consulte las métricas de CloudWatch, en concreto RunningMapTasks
, para comprobar si la tarea de asignación sigue procesándose. También puede encontrar esta información a través de la interfaz web de Hadoop en el nodo principal.
Si está viendo este problema, hay varias cosas que puede probar:
-
Indique a la fase de reducción que espere más tiempo antes de empezar. Puede hacerlo modificando el ajuste de configuración de Hadoop mapred.reduce.slowstart.completed.maps a un tiempo superior. Para obtener más información, consulte Creación de acciones de arranque para instalar software adicional con un clúster de Amazon EMR.
-
Asigne el recuento de reductores a la capacidad de reductor total del clúster. Esto se hace ajustando la opción de configuración de Hadoop mapred.reduce.tasks para el trabajo.
-
Utilice un código de clase de combinador para minimizar el número de salidas que se tienen que recuperar.
-
Compruebe que no haya ningún problema con el servicio de Amazon EC2 que esté afectando al rendimiento de red del clúster. Puede hacerlo utilizando el Panel de estado del servicio
. -
Revise los recursos de CPU y de memoria de las instancias en su clúster para asegurarse de que su procesamiento de datos no esté desbordando los recursos de los nodos. Para obtener más información, consulte Configuración del hardware y las redes de los clústeres de Amazon EMR.
Compruebe la versión de la imagen de máquina de Amazon (AMI) utilizada en el clúster de Amazon EMR. Si la versión es de la 2.3.0 a la 2.4.4 incluida, actualice a una versión posterior. Las versiones de AMI en el rango especificado utilizan una versión de Jetty que podría fallar a la hora de entregar la salida desde la fase de asignación. El error de recuperación se produce cuando los reductores no pueden obtener la salida desde la fase de asignación.
Jetty es un servidor HTTP de código abierto que se utiliza para comunicaciones de equipo a equipo dentro de un clúster de Hadoop.