El maestro de aplicaciones cambia el estado del trabajo a «exitoso» cuando recibe una notificación de que se completó la última tarea de un trabajo. Luego, aprende que el trabajo se completó con éxito cuando el trabajo sondea el estado. Entonces, un mensaje regresa del waitForCompletion()
método después de que imprime un mensaje, para informarle al usuario sobre la finalización exitosa de la tarea. En este punto, se imprimen el trabajo, las estadísticas y los contadores. Si el maestro de aplicaciones está configurado para hacerlo, también envía una notificación de trabajo HTTP. Usando la mapreduce.job.end-notification.url
propiedad, los clientes que deseen recibir devoluciones de llamadas que pueden configurarlo. Finalmente, los contenedores de tareas y el maestro de aplicaciones limpian su estado de trabajo después de completar el trabajo. Entonces elOutputCommitter's commitJob()
Se llama al método y se elimina la salida intermedia. Para habilitar la interrogación posterior por parte de los usuarios si lo desea, el servidor de historial de trabajos archiva la información del trabajo.
¿Caso de fracasos?
El código de usuario real puede fallar en el proceso, puede estar lleno de errores o incluso la máquina puede fallar. La capacidad de Hadoop para manejar tales fallas es el mayor beneficio de usarlo, lo que permite que el trabajo se complete con éxito. Cualquiera de los siguientes componentes puede fallar:
- Maestro de aplicaciones
- administrador de Nodes
- Administrador de recursos
- Tarea
El más común de esto es la falla de la tarea. Cuando un código de usuario en la tarea de reducción o tarea de mapa , la excepción de tiempo de ejecución es la ocurrencia más común de esta falla. JVM informa el error si esto sucede, a su maestro de aplicación principal antes de que salga. El error finalmente llega a los registros de usuario. La aplicación libera el contenedor para que sus recursos estén disponibles para otra tarea después de marcar el intento de tarea como fallido.
Para transmitir la tarea, el proceso de transmisión se marca como fallido si el proceso de transmisión finaliza con un código de salida distinto de cero. stream.non.zero.exit.is.failure
La propiedad (el valor predeterminado es verdadero) gobierna este comportamiento. La salida repentina de la tarea, JVM es otro modo de falla y quizás debido a la exposición del código de usuario de MapReduce, hay un error de JVM que hace que JVM se cierre por un conjunto particular de circunstancias. El administrador de Nodes advierte que el proceso ha finalizado. Por lo tanto, puede marcar el intento como fallido cuando se informa al maestro de la aplicación. Las tareas colgantes se tratan de manera diferente. El maestro de aplicaciones procede a marcar la tarea como fallida y nota que no ha recibido una actualización de progreso durante algún tiempo. Después de este período, el proceso JVM de la tarea se eliminará automáticamente. El período de tiempo de espera se puede configurar por trabajo configurando elmapreduce.task.timeout
propiedad a un valor en milisegundos. Después de esta tarea, las tareas que se consideran fallidas son normalmente 10 minutos. Las tareas de ejecución prolongada nunca se marcan como fallidas porque establecer el tiempo de espera en un valor de cero desactiva el tiempo de espera. Con el tiempo, puede haber una ralentización del clúster como resultado y una tarea pendiente nunca liberará su contenedor. Por lo tanto, para asegurarse de que una tarea informe periódicamente sobre el progreso debería ser suficiente, se debe evitar este enfoque. El maestro de la aplicación reprogramará la ejecución de la tarea después de que se le notifique un intento de tarea. Después de que la tarea falle, el maestro de aplicaciones intentará evitar la reprogramación de la tarea en un administrador de Nodes. No se volverá a intentar si una tarea falla cuatro veces. Este valor es configurable para controlar el número máximo de la tarea. Es controlado por el mapreduce.reduce.maxattempts
para reducir tareas ymapreduce.map.maxattempts
propiedad para tareas de mapa. Todo el trabajo falla de forma predeterminada si alguna tarea falla cuatro veces. Si algunas tareas fallan, no es deseable cancelar el trabajo para alguna aplicación porque es posible usar los resultados del trabajo a pesar de algunas fallas. Sin activación, se puede configurar el error del trabajo para el trabajo. El uso de mapreduce.map.failures.maxpercent
y mapreduce.reduce.failures.maxpercent
las tareas de mapa de propiedades y las tareas de reducción se controlan de forma independiente. La tarea de ser asesinado es diferente de fallar. Debido a una duplicación especulativa o si el administrador de Nodes se estaba ejecutando, también se puede eliminar un intento de tarea. mapreduce.map.maxattempts
y mapreduce.reduce.maxattempts
las tareas no contarán los intentos de tareas canceladas contra el número de intentos para ejecutar la tarea.
Publicación traducida automáticamente
Artículo escrito por mayank5326 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA