- ¿Qué es una base de datos? - noviembre 7, 2020
- ¿Es la programación una profesión para ti? - septiembre 3, 2020
- Temporada 2020-2021 - julio 15, 2020
Introducción
Big Data es uno de los términos que más relevancia tiene hoy en día en cualquier ámbito tecnológico en el que participes. Quieras o no, todos somos miembros, sin darnos cuenta, de una continua toma de datos y análisis de los mismos.
En este post quiero contarte algunos aspectos teóricos sobre operaciones que se realizan sobre esos datos e introducirte en una de las herramientas de Apache que trabaja con Big Data. En los siguientes posts voy a enseñarte a instalar Hadoop y a hacer tu primer desarrollo sobre Hadoop utilizando MapReduce.
¡Empecemos!
MapReduce
MapReduce es un proceso de extracción de valores de un gran número de orígenes de datos distintos y está compuesto por dos procesos:
- Map: Extraer y asignar valores a determinadas claves para un único documento.
- Reduce: Acumulación y combinación de claves de múltiples documentos para crear un valor reducido único para cada clave a partir de los múltiples valores generados.
MapReduce tiene su origen en 2004, cuando Google, para dar soporte a la computación paralela sobre grandes colecciones de datos en grupos de ordenadores desarrolló un framework para poder realizarlo. Desde entonces, han aparecido múltiples implementaciones en diferentes lenguajes de programación, como por ejemplo en C++, Java…
Lo más relevante de MapReduce es que es fácil de implementar en un clúster, permitiendo procesar los datos de forma paralela aprovechando el sistema de archivos distribuido; cada servidor del clúster procesa la parte de los datos que posee localmente.
La entrada al método Map es un par (clave, valor) y su salida es uno o varios pares (clave-i, valor-i). El sistema se encarga de mezclar y ordenar resultados intermedios en función de las claves.
La entrada al método Reduce es un par (clave, lista de valores) y su salida es un par (clave, valor).
Tal y como se puede apreciar en la imagen, MapReduce permite el procesamiento distribuido de las operaciones Map y Reduce, siempre que cada operación de asignación sea independiente.
Funcionamiento MapReduce
Los métodos Map y Reduce se definen sobre datos estructurados en pares clave/valor.
El método Map recibirá un par clave/valor y devolverá un conjunto de pares clave/valor intermedio:
Map(k1,v1) devolverá lista(k2,v2)
Todos los datos de entradas serán procesados por el método Map, obteniendo una lista del mismo y agrupando, posteriormente, los valores intermedios asociados con la misma clave k y se los pasará a la función Reduce:
Reduce(k2, lista(v2)) devolverá lista(v3)
Por tanto, la ejecución de MapReduce consiste en M tareas Map y R tareas Reduce independientes, donde cada una de las tareas R puede depender de M tareas Map.
El framework MapReduce está compuesto, principalmente, por los siguientes módulos:
- Lector de Entrada: Divide la entrada en pequeños bloques de tamaño apropiado y asigna una división a cada función Map.
- Función Map: Toma una serie de pares clave/valor, los procesa y genera cero o más pares clave/valor de salida.
- Función de Partición: Obtiene un hash de la clave.
- Función de Comparación: Ordena las entradas a la función de reducción.
- Función de Reducción: Obtiene la lista de valores de salida para la clave pasada como parámetro.
- Escritor de Salida: Escribe la salida de la reducción en las tablas de almacenamiento.
En la imagen a continuación se muestra el flujo de la información por todo el proceso de MapReduce:
Hadoop
Hadoop es una implementación MapReduce, de código abierto e inspirada en los documento de Google sobre MapReduce y Google File System. El proyecto Hadoop es administrado por Apache Software Foundation, y permite el desarrollo de aplicaciones de procesamiento paralelo, permitiendo trabajar con miles de nodos y petabytes de datos.
Hadoop fue creado por Doug Cutting, creador de Apache Lucene. Tiene sus orígenes en Apache Nutch, que es un buscador web de código abierto que es parte de Apache Lucene.
El nombre y logotipo de Hadoop surge por el nombre del peluche elefante del hijo de Doug:
Muchas empresas han decidido desplegar Hadoop junto a sus demás sistemas informáticos, permitiendo convivir los datos antiguos con los nuevos; esto se debe a que Hadoop fue diseñado para analizar de forma rápida y fiable los datos estructurados y los datos complejos; es decir, fue diseñado para diferentes tipos de fuentes de datos.
Uno de los componentes más importante que tiene Hadoop es el sistema de seguridad, que nos permite acceder a datos distribuidos y poder realizar búsquedas de forma paralela sin preocuparnos de los fallos.
Hadoop está compuesto por una serie de subproyectos que complementan su funcionalidad:
Arquitectura Hadoop
La arquitectura de Hadoop está basada en tres pilares fundamentales, que son:
Sobre HDFS podemos localizar el motor de MapReduce, compuesto por un planificador de trabajos, JobTracker, mediante el cual las aplicaciones envían los trabajos MapReduce. El planificador envía las tareas a los diferentes nodos TaskTracker que están disponibles en el clúster, donde se ejecutarán las operaciones Map y Reduce correspondientes.
HDFS
Hadoop Distributed File System (HDFS) es el sistema de ficheros utilizado por defecto por Hadoop y está inspirado en GFS de Google.
La principal característica es que los ficheros se dividen en bloques de un tamaño fijo y que son almacenados en un clúster. La cooperación de los diferentes nodos del clúster se realiza utilizando un protocolo de bloques específico de HDFS.
La disponibilidad reside en el único servidor que se requiere para funcionar; por lo tanto, ese servidor es el punto de fallo crítico en la instalación, si se cae, el sistema de ficheros entero estará caído. Una vez levantado, el servidor deberá re-ejecutar todas las operaciones pendientes. El sistema de ficheros es fiable ya que replica la información entre varios nodos.
Además del sistema de ficheros, en HDFS se pueden ejecutar tareas como por ejemplo:
- Rebalanceo de bloques.
- Copia de grandes conjuntos de ficheros.
- Exclusión de nodos.
- Verificación del sistema.
Resumen y conclusiones
En el post te he explicado qué es MapReduce y has podido comprobar que es una operación muy sencilla y que permite trabajar con cantidades grandes de datos obteniendo los resultados que esperamos. También te he explicado qué es Hadoop, herramienta que en los futuros posts vas a ser capaz de instalar, configurar y hacer desarrollos con ella.
Ten en cuenta que estos sistemas de Big Data son utilizados por grandes empresas, que tienen unos volúmenes de datos inmensos y que utilizan estas herramientas para almacenarlos y estos algoritmos para tratarlos y analizarlos, por lo que, estate atento a los próximos posts porque… ¡el futuro reside en estas herramientas!