Una guía de introducción a MapReduce en Big Data

MapReduce ofrece una forma eficaz, rápida y rentable de crear aplicaciones.

Este modelo utiliza conceptos avanzados como procesamiento paralelo, localidad de datos, etc., para brindar muchos beneficios a programadores y organizaciones.

Pero hay tantos modelos de programación y marcos disponibles en el mercado que se vuelve difícil elegir.

Y cuando se trata de Big Data, no puede simplemente elegir cualquier cosa. Debe elegir tecnologías que puedan manejar grandes cantidades de datos.

MapReduce es una gran solución para eso.

En este artículo, discutiré qué es realmente MapReduce y cómo puede ser beneficioso.

¡Empecemos!

¿Qué es MapReduce?

MapReduce es un modelo de programación o marco de software dentro del marco Apache Hadoop. Se utiliza para crear aplicaciones capaces de procesar datos masivos en paralelo en miles de nodos (llamados clústeres o cuadrículas) con tolerancia a fallas y confiabilidad.

Este procesamiento de datos ocurre en una base de datos o sistema de archivos donde se almacenan los datos. MapReduce puede funcionar con un sistema de archivos Hadoop (HDFS) para acceder y administrar grandes volúmenes de datos.

Este marco fue introducido en 2004 por Google y es popularizado por Apache Hadoop. Es una capa o motor de procesamiento en Hadoop que ejecuta programas MapReduce desarrollados en diferentes lenguajes, incluidos Java, C++, Python y Ruby.

Los programas MapReduce en computación en la nube se ejecutan en paralelo, por lo que son adecuados para realizar análisis de datos a gran escala.

MapReduce tiene como objetivo dividir una tarea en múltiples tareas más pequeñas utilizando las funciones «mapa» y «reducir». Asignará cada tarea y luego la reducirá a varias tareas equivalentes, lo que da como resultado una menor potencia de procesamiento y una sobrecarga en la red del clúster.

Ejemplo: Suponga que está preparando una comida para una casa llena de invitados. Entonces, si intenta preparar todos los platos y hacer todos los procesos usted mismo, se volverá agitado y consumirá mucho tiempo.

Pero suponga que involucra a algunos de sus amigos o colegas (no invitados) para que lo ayuden a preparar la comida al distribuir diferentes procesos a otra persona que puede realizar las tareas simultáneamente. En ese caso, preparará la comida de manera más rápida y fácil mientras sus invitados todavía están en la casa.

MapReduce funciona de manera similar con tareas distribuidas y procesamiento paralelo para permitir una forma más rápida y sencilla de completar una tarea determinada.

Apache Hadoop permite a los programadores utilizar MapReduce para ejecutar modelos en grandes conjuntos de datos distribuidos y usar técnicas avanzadas de aprendizaje automático y estadísticas para encontrar patrones, hacer predicciones, detectar correlaciones y más.

Características de MapReduce

Algunas de las principales características de MapReduce son:

  • Interfaz de usuario: obtendrá una interfaz de usuario intuitiva que proporciona detalles razonables sobre cada aspecto del marco. Le ayudará a configurar, aplicar y ajustar sus tareas sin problemas.

  • Carga útil: las aplicaciones utilizan las interfaces Mapper y Reducer para habilitar el mapa y reducir las funciones. El mapeador asigna pares clave-valor de entrada a pares clave-valor intermedios. Reducer se utiliza para reducir pares clave-valor intermedios que comparten una clave con otros valores más pequeños. Realiza tres funciones: ordenar, barajar y reducir.
  • Particionador: Controla la división de las claves intermedias de salida del mapa.
  • Reportero: es una función para informar el progreso, actualizar contadores y establecer mensajes de estado.
  • Contadores: Representa contadores globales que define una aplicación MapReduce.
  • OutputCollector: esta función recopila datos de salida de Mapper o Reducer en lugar de salidas intermedias.
  • RecordWriter: escribe la salida de datos o pares clave-valor en el archivo de salida.
  • DistributedCache: distribuye eficientemente archivos más grandes de solo lectura que son específicos de la aplicación.
  • Compresión de datos: el escritor de la aplicación puede comprimir tanto las salidas del trabajo como las salidas del mapa intermedio.
  • Omisión de registros incorrectos: puede omitir varios registros incorrectos mientras procesa las entradas del mapa. Esta característica se puede controlar a través de la clase SkipBadRecords.
  • Depuración: tendrá la opción de ejecutar scripts definidos por el usuario y habilitar la depuración. Si falla una tarea en MapReduce, puede ejecutar su secuencia de comandos de depuración y encontrar los problemas.

Arquitectura MapReduce

Comprendamos la arquitectura de MapReduce profundizando en sus componentes:

  • Trabajo: un trabajo en MapReduce es la tarea real que el cliente de MapReduce desea realizar. Comprende varias tareas más pequeñas que se combinan para formar la tarea final.
  • Servidor de historial de trabajos: es un proceso demonio para almacenar y guardar todos los datos históricos sobre una aplicación o tarea, como los registros generados después o antes de ejecutar un trabajo.
  • Cliente: un cliente (programa o API) trae un trabajo a MapReduce para su ejecución o procesamiento. En MapReduce, uno o varios clientes pueden enviar continuamente trabajos a MapReduce Manager para su procesamiento.
  • MapReduce Master: un MapReduce Master divide un trabajo en varias partes más pequeñas, asegurando que las tareas progresen simultáneamente.
  • Partes del trabajo: Los trabajos secundarios o partes del trabajo se obtienen dividiendo el trabajo principal. Se trabajan y combinan por fin para crear la tarea final.
  • Datos de entrada: es el conjunto de datos que se alimenta a MapReduce para el procesamiento de tareas.
  • Datos de salida: Es el resultado final que se obtiene una vez procesada la tarea.

Entonces, lo que realmente sucede en esta arquitectura es que el cliente envía un trabajo a MapReduce Master, quien lo divide en partes iguales más pequeñas. Esto permite que el trabajo se procese más rápido, ya que las tareas más pequeñas tardan menos tiempo en procesarse en lugar de las tareas más grandes.

Sin embargo, asegúrese de que las tareas no se dividan en tareas demasiado pequeñas porque, si lo hace, es posible que deba enfrentar una mayor sobrecarga de administración de divisiones y perder mucho tiempo en eso.

A continuación, las partes del trabajo quedan disponibles para continuar con las tareas Mapear y Reducir. Además, las tareas Map y Reduce cuentan con un programa adecuado en función del caso de uso en el que esté trabajando el equipo. El programador desarrolla el código basado en lógica para cumplir con los requisitos.

Después de esto, los datos de entrada se envían a la tarea de mapa para que el mapa pueda generar rápidamente la salida como un par clave-valor. En lugar de almacenar estos datos en HDFS, se utiliza un disco local para almacenar los datos y eliminar la posibilidad de replicación.

Una vez completada la tarea, puede desechar la salida. Por lo tanto, la replicación se convertirá en una exageración cuando almacene la salida en HDFS. La salida de cada tarea de mapa se enviará a la tarea de reducción y la salida del mapa se proporcionará a la máquina que ejecuta la tarea de reducción.

A continuación, la salida se combinará y se pasará a la función de reducción definida por el usuario. Finalmente, la salida reducida se almacenará en un HDFS.

Además, el proceso puede tener varias tareas Mapear y Reducir para el procesamiento de datos según el objetivo final. Los algoritmos Map y Reduce están optimizados para mantener la complejidad temporal o espacial al mínimo.

Dado que MapReduce involucra principalmente tareas Map y Reduce, es pertinente comprender más sobre ellas. Entonces, analicemos las fases de MapReduce para tener una idea clara de estos temas.

Fases de MapReduce

Mapa

Los datos de entrada se asignan a la salida o pares clave-valor en esta fase. Aquí, la clave puede referirse a la identificación de una dirección, mientras que el valor puede ser el valor real de esa dirección.

Solo hay una pero dos tareas en esta fase: divisiones y mapeo. Divisiones significa las subpartes o partes del trabajo divididas del trabajo principal. También se denominan divisiones de entrada. Por lo tanto, una división de entrada puede llamarse un fragmento de entrada consumido por un mapa.

A continuación, se lleva a cabo la tarea de mapeo. Se considera la primera fase al ejecutar un programa de reducción de mapas. Aquí, los datos contenidos en cada división se pasarán a una función de mapa para procesar y generar la salida.

La función – Map() se ejecuta en el depósito de memoria en los pares clave-valor de entrada, generando un par clave-valor intermedio. Este nuevo par clave-valor funcionará como la entrada que se alimentará a la función Reduce() o Reducer.

Reducir

Los pares clave-valor intermedios obtenidos en la fase de mapeo funcionan como entrada para la función Reduce o Reducer. Similar a la fase de mapeo, hay dos tareas involucradas: barajar y reducir.

Entonces, los pares clave-valor obtenidos se ordenan y barajan para alimentar al Reducer. A continuación, Reducer agrupa o agrega los datos según su par clave-valor en función del algoritmo de reducción que ha escrito el desarrollador.

Aquí, los valores de la fase de barajado se combinan para devolver un valor de salida. Esta fase resume todo el conjunto de datos.

Ahora, el proceso completo de ejecución de tareas Map y Reduce está controlado por algunas entidades. Estos son:

  • Rastreador de trabajos: en palabras simples, un rastreador de trabajos actúa como un maestro que es responsable de ejecutar completamente un trabajo enviado. El rastreador de trabajos administra todos los trabajos y recursos en un clúster. Además, el rastreador de trabajos programa cada mapa agregado en el rastreador de tareas que se ejecuta en un nodo de datos específico.
  • Rastreadores de tareas múltiples: en palabras simples, los rastreadores de tareas múltiples funcionan como esclavos que realizan la tarea siguiendo las instrucciones del rastreador de trabajos. Se implementa un rastreador de tareas en cada nodo por separado en el clúster que ejecuta las tareas Map y Reduce.

Funciona porque un trabajo se dividirá en varias tareas que se ejecutarán en diferentes nodos de datos de un clúster. Job Tracker es responsable de coordinar la tarea programando las tareas y ejecutándolas en múltiples nodos de datos. A continuación, el Rastreador de tareas que se encuentra en cada nodo de datos ejecuta partes del trabajo y se ocupa de cada tarea.

Además, los rastreadores de tareas envían informes de progreso al rastreador de trabajos. Además, el Rastreador de tareas envía periódicamente una señal de «latido» al Rastreador de trabajos y les notifica el estado del sistema. En caso de falla, un rastreador de trabajos puede reprogramar el trabajo en otro rastreador de tareas.

Fase de salida: cuando llegue a esta fase, tendrá los pares clave-valor finales generados a partir del Reductor. Puede usar un formateador de salida para traducir los pares clave-valor y escribirlos en un archivo con la ayuda de un escritor de registros.

¿Por qué usar MapReduce?

Estos son algunos de los beneficios de MapReduce, explicando las razones por las que debe usarlo en sus aplicaciones de big data:

Procesamiento en paralelo

Puede dividir un trabajo en diferentes nodos donde cada nodo maneja simultáneamente una parte de este trabajo en MapReduce. Entonces, dividir las tareas más grandes en otras más pequeñas disminuye la complejidad. Además, dado que diferentes tareas se ejecutan en paralelo en diferentes máquinas en lugar de una sola máquina, lleva mucho menos tiempo procesar los datos.

Localidad de datos

En MapReduce, puede mover la unidad de procesamiento a los datos, no al revés.

De manera tradicional, los datos se llevaban a la unidad de procesamiento para su procesamiento. Sin embargo, con el rápido crecimiento de los datos, este proceso comenzó a plantear muchos desafíos. Algunos de ellos eran de mayor costo, más lentos, más pesados ​​para el nodo maestro, fallas frecuentes y rendimiento reducido de la red.

Pero MapReduce ayuda a superar estos problemas siguiendo un enfoque inverso: llevar una unidad de procesamiento a los datos. De esta forma, los datos se distribuyen entre diferentes nodos donde cada nodo puede procesar una parte de los datos almacenados.

Como resultado, ofrece rentabilidad y reduce el tiempo de procesamiento ya que cada nodo trabaja en paralelo con su parte de datos correspondiente. Además, dado que cada nodo procesa una parte de estos datos, ningún nodo se sobrecargará.

Seguridad

El modelo MapReduce ofrece mayor seguridad. Ayuda a proteger su aplicación de datos no autorizados mientras mejora la seguridad del clúster.

Escalabilidad y flexibilidad

MapReduce es un marco altamente escalable. Le permite ejecutar aplicaciones desde varias máquinas, utilizando datos con miles de terabytes. También ofrece la flexibilidad de procesar datos que pueden ser estructurados, semiestructurados o no estructurados y de cualquier formato o tamaño.

Sencillez

Puede escribir programas MapReduce en cualquier lenguaje de programación como Java, R, Perl, Python y más. Por lo tanto, es fácil para cualquier persona aprender y escribir programas al mismo tiempo que garantiza que se cumplan los requisitos de procesamiento de datos.

Casos de uso de MapReduce

  • Indexación de texto completo: MapReduce se utiliza para realizar la indexación de texto completo. Su Mapper puede mapear cada palabra o frase en un solo documento. Y el Reductor se usa para escribir todos los elementos mapeados en un índice.
  • Cálculo del Pagerank: Google utiliza MapReduce para calcular el Pagerank.
  • Análisis de registro: MapReduce puede analizar archivos de registro. Puede dividir un archivo de registro grande en varias partes o dividirlo mientras el mapeador busca las páginas web a las que se accede.

Se enviará un par clave-valor al reductor si se detecta una página web en el registro. Aquí, la página web será la clave y el índice «1» es el valor. Después de entregar un par clave-valor al Reducer, se agregarán varias páginas web. El resultado final es el número total de visitas para cada página web.

  • Gráfico de enlace web inverso: el marco también encuentra uso en Gráfico de enlace web inverso. Aquí, Map() produce el destino de la URL y la fuente y toma información de la fuente o página web.

A continuación, Reduce() agrega la lista de cada URL de origen asociada con la URL de destino. Finalmente, emite las fuentes y el destino.

  • Recuento de palabras: MapReduce se utiliza para contar cuántas veces aparece una palabra en un documento determinado.
  • Calentamiento global: las organizaciones, los gobiernos y las empresas pueden usar MapReduce para resolver problemas de calentamiento global.

Por ejemplo, es posible que desee saber sobre el aumento del nivel de temperatura del océano debido al calentamiento global. Para esto, puede recopilar miles de datos en todo el mundo. Los datos pueden ser temperatura alta, temperatura baja, latitud, longitud, fecha, hora, etc. Esto requerirá varios mapas y reducirá las tareas para calcular la salida usando MapReduce.

  • Pruebas de medicamentos: tradicionalmente, los científicos de datos y los matemáticos trabajaban juntos para formular un nuevo medicamento que pudiera combatir una enfermedad. Con la difusión de algoritmos y MapReduce, los departamentos de TI de las organizaciones pueden abordar fácilmente problemas que solo eran manejados por Supercomputers, Ph.D. científicos, etc. Ahora, puede inspeccionar la efectividad de un medicamento para un grupo de pacientes.
  • Otras aplicaciones: MapReduce puede procesar incluso datos a gran escala que de otro modo no cabrían en una base de datos relacional. También utiliza herramientas de ciencia de datos y permite ejecutarlas en diferentes conjuntos de datos distribuidos, lo que antes solo era posible en una sola computadora.

Como resultado de la robustez y simplicidad de MapReduce, encuentra aplicaciones en el ejército, los negocios, la ciencia, etc.

Conclusión

MapReduce puede llegar a ser un gran avance en la tecnología. No solo es un proceso más rápido y simple, sino que también es rentable y consume menos tiempo. Dadas sus ventajas y su creciente uso, es probable que sea testigo de una mayor adopción en todas las industrias y organizaciones.

También puede explorar algunos de los mejores recursos para aprender Big Data y Hadoop.