sql >> Base de Datos >  >> NoSQL >> HBase

Ejecución especulativa en Hadoop MapReduce

En este artículo sobre la ejecución especulativa de MapReduce, explorará en detalle la ejecución especulativa de Hadoop. Aprenderá qué es la ejecución especulativa, cuál es su necesidad, cómo podemos habilitarla y deshabilitarla.

El artículo también explica si es beneficioso o no y cómo funciona.

¿Qué es la ejecución especulativa en Hadoop?

El modelo MapReduce en el marco Hadoop divide los trabajos en tareas independientes y ejecuta estas tareas en paralelo para reducir el tiempo total de ejecución del trabajo.

Esto hace que la ejecución del trabajo sea sensible al tiempo para las tareas de ejecución lenta porque solo una tarea lenta puede hacer que el tiempo de ejecución del trabajo completo sea más largo de lo esperado. Cuando cualquier trabajo consta de miles o cientos de tareas, la posibilidad de que haya pocas tareas rezagadas es muy real.

Las tareas pueden ser lentas debido a varias razones, como una configuración incorrecta del software o la degradación del hardware. Pero la causa que hace que el trabajo se ejecute lentamente es difícil de detectar porque las tareas aún se completan correctamente, aunque lleva más tiempo de lo esperado.

El marco de Hadoop no intenta diagnosticar ni corregir las tareas de ejecución lenta. El marco intenta detectar la tarea que se está ejecutando a una velocidad más lenta que la esperada y lanza otra tarea, que es una tarea equivalente a una copia de seguridad.

La tarea de copia de seguridad se conoce como tarea especulativa y este proceso se conoce como ejecución especulativa en Hadoop.

¿Cuál es la necesidad de ejecución especulativa en Hadoop?

En el marco de trabajo de Hadoop, el archivo de entrada se divide en varios bloques y esos bloques se almacenan en los diferentes nodos del clúster de Hadoop.

Cuando el cliente envía el trabajo de MapReduce, calcula el número de InputSplit y ejecuta tantos mapeadores como el número de InputSplit. Estos mapeadores (tareas de mapeo) se ejecutan en paralelo en los DataNodes, donde residen los datos divididos.

Ahora, ¿qué sucede si los pocos DataNodes en el clúster de Hadoop no ejecutan las tareas tan rápido como los otros DataNodes debido a una falla de hardware o problemas de red?

Por lo tanto, las tareas de mapa que se ejecutan en esos DataNodes serán más lentas en comparación con las tareas de mapa que se ejecutan en los otros DataNodes. El Reducer puede comenzar su ejecución solo cuando las salidas intermedias de todos los mapeadores están disponibles.

Por lo tanto, la menor cantidad de tareas de mapa de ejecución lenta retrasará la ejecución del Reducer.

Si Reducer se está ejecutando en el nodo más lento, eso también retrasará el resultado final del trabajo general.

Entonces, para protegerse contra tales tareas de ejecución lenta, el marco de Hadoop inicia la misma tarea en el otro nodo. Esta optimización del marco Hadoop se denomina ejecución especulativa de la tarea.

¿Cómo funciona la ejecución especulativa en Hadoop?

La ejecución especulativa no inicia las dos tareas duplicadas de cada tarea independiente de un trabajo aproximadamente al mismo tiempo para que puedan competir entre sí. Si el marco lo hace, se desperdiciarán los recursos del clúster.

En su lugar, el planificador realiza un seguimiento del progreso de todas las tareas del mismo tipo (como mapear y reducir) en un trabajo y lanza solo los duplicados especulativos para pequeñas proporciones que se estaban ejecutando más lentamente que el promedio.

Cuando la tarea se completa con éxito, cualquier tarea duplicada que se esté ejecutando se eliminó porque ya no era necesaria.

Entonces, en caso de que la tarea original se complete antes que la tarea especulativa, entonces la tarea especulativa se elimina. Si la tarea especulativa finaliza antes que la tarea original, la original se cancela.

Tenga en cuenta que la ejecución especulativa es una optimización. No es una característica para hacer que los trabajos de MapReduce se ejecuten de manera más confiable.

¿Cómo configurar la ejecución especulativa en Hadoop?

De forma predeterminada, la ejecución especulativa está habilitada para la tarea Map así como para las tareas de reducción. Sus propiedades se establecen en el mapred-site.xml archivo de configuración.

  • mapreduce.mapa.especulativa :si esta propiedad se establece en verdadero, la ejecución especulativa de la tarea de mapa está habilitada. Por defecto, es verdadero.
  • mapreduce.reduce.especulativa :si esta propiedad se establece en true, la ejecución especulativa de la tarea de reducción está habilitada. Por defecto, es verdadero.

¿Por qué querrías desactivar la ejecución especulativa?

El objetivo principal de la ejecución especulativa es reducir el tiempo de ejecución del trabajo. Pero esto se producirá a costa de la eficiencia del clúster de Hadoop.

En un clúster de Hadoop ocupado, esto puede reducir el rendimiento general porque las tareas redundantes se ejecutan para reducir el tiempo de ejecución del trabajo único.

Por este motivo, algunos administradores de clústeres desactivan la ejecución especulativa en el clúster de Hadoop y hacen que los usuarios la activen explícitamente para los trabajos individuales.

Podemos desactivarlo para las tareas de reducción porque cualquier tarea de reducción duplicada requiere obtener los mismos resultados del mapeador que la tarea original, lo que aumentará significativamente el tráfico de red en el clúster.

¿Es beneficiosa la ejecución especulativa?

La ejecución especulativa en Hadoop es beneficiosa en algunos casos porque en el clúster de Hadoop que tiene cientos o miles de nodos, los problemas como la congestión de la red o la falla del hardware son comunes.

Así que ejecutar tareas paralelas o duplicadas será mejor. Pero en caso de que las dos tareas duplicadas de cada tarea independiente de un trabajo se inicien aproximadamente al mismo tiempo, será un desperdicio de recursos del clúster.

Resumen

Espero que después de leer este artículo haya entendido claramente qué es la ejecución especulativa en Hadoop y por qué es necesaria. También has visto cómo podemos deshabilitarlo para tareas de mapa y reducir tareas individualmente.