Publicado en
Conforme la conversación sobre Big Data comienza a pasar del “¿qué es” hacia el “¿cómo se hace?” y “¿cuál es la tecnología detrás?”, es inevitable mencionar a Hadoop, ya que es la base sobre la que están construidas la mayoría de las soluciones para análisis de Big Data.
Hadoop es un proyecto de software open source que provee un framework para habilitar el procesamiento distribuido de grandes conjuntos de datos sobre clusters construidos con hardware genérico. En esencia, Hadoop consiste de dos elementos base: un sistema de archivos distribuido (Hadoop Distributed File System, HDFS) y un motor de procesamiento de datos que implementa el modelo Map/Reduce (Hadoop MapReduce). Sin embargo, conforme ha ido ganando adopción y madurez, también se han ido creando tecnologías para complementarlo y ampliar sus escenarios de uso, de tal forma que hoy en día el nombre “Hadoop” no se refiere a una sola herramienta sino a una familia de herramientas alrededor de HDFS y MapReduce.
En este artículo brindo un mapa de estas tecnologías con el objetivo de explicar cómo se conforma —al menos al día de hoy— un stack tecnológico para Big Data basado en Hadoop.
Para explicar los distintos componentes, los he clasificado en distintas capas: almacenamiento y acceso a datos, procesamiento, programación, serialización, gestión e integración de datos. A continuación explico el propósito de cada una, y las tecnologías detrás de ellas.
Almacenamiento y acceso a datos
Como su nombre lo indica, estos componentes son los que proveen la capacidad de almacenar y acceder grandes volúmenes de datos. Aquí tenemos dos tecnologías principalmente: HDFS y HBase.
HDFS (Hadoop Distributed File System). Es un sistema de archivos distribuido que está optimizado para almacenar grandes cantidades de datos utilizando un patrón de acceso write-once read-many (escribe una vez, lee muchas). Esto hace que HDFS sea una opción adecuada cuando es necesario escribir pocos archivos grandes, que son leídos muchas veces. Un cluster HDFS tiene dos tipos de nodos: un nodo de nombre (namenode) y múltiples nodos de datos (datanodes). El primero es responsable del árbol del sistema de archivos y los metadatos, mientras que los segundos son los que realizan el acceso a los datos.
HBase (Hadoop Database). HBase es una base de datos distribuida, versionada y orientada a columnas, diseñada para almacenar tablas muy grandes (millones de registros con millones de columnas). HBase funciona encima de HDFS y usa la misma arquitectura de nodos: un nodo maestro que divide y distribuye los datos, y múltiples nodos de trabajo que realizan las operaciones de acceso a datos. Los datos de HBase típicamente se acceden por medio de tareas MapReduce, aunque también ofrece interfaces tipo REST.
Procesamiento de datos
Encima de la capa de datos necesitamos frameworks para procesar dichos datos. La herramienta principal en este capa es un motor de procesamiento de tareas MapReduce.
MapReduce es un modelo de programación creado originalmente por Google para procesar grandes cantidades de datos. Está inspirado en las funciones map y reduce de la programación funcional, aunque en realidad aquí funcionan de forma un poco distinta:
- Map: En este paso, un nodo maestro recibe una tarea y la divide en tareas más pequeñas que distribuye hacia otros nodos para que las procesen. Cada uno de estos nodos puede a su vez volver a dividir y repartir tareas, lo cual lleva a una estructura de árbol de varios niveles. Cada nodo de procesamiento, una vez que termina su tarea la regresa a su nodo maestro.
- Reduce: El nodo maestro colecciona todas las respuestas recibidas y las combina para generar la salida, es decir, la respuesta al problema que originalmente se trata de resolver.
Los beneficios principales de MapReduce son su escalabilidad y la variedad de datos que puede procesar tales como archivos, tablas de bases de datos, sitios web (web crawling).
Para complementar esta capa de procesamiento de datos, es común recurrir a otro componente que se encargue de coordinador el flujo de trabajo de las tareas de MapReduce. Aún las tareas más sencillas de MapReduce consisten de un gran número de funciones map y reduce, así que es recomendable apoyarse en un coordinador de workflow. Para ello existe Oozie, un coordinador de workflow open source creado por Yahoo que se utiliza frecuentemente para coordinar flujos MapReduce. Los workflows de Oozie se capturan en un lenguaje llamado Hadoo Process Definition Language (hPDL) el cual está basado en XML.
Programación
Escribir tareas de MapReduce directamente sería similar a utilizar lenguaje ensamblador para escribir aplicaciones de escritorio. Es así que necesitamos herramientas que nos permitan abstraer la creación de tareas MapReduce, para poder hacerlo de forma más sencilla y rápida. Las dos opciones más comunes para ello son: Pig y Hive.
Hive es una infraestructura para data warehousing sobre Hadoop que permite hacer queries, agregación de datos y análisis. Utiliza un lenguaje similar a SQL llamado HiveQL. Internamente, un compilador transforma las sentencias de HiveQL a un grafo de tareas MapReduce. Hive fue originalmente creado por Facebook y posteriormente pasó a ser un proyecto Apache de software libre.
Pig es un framework para crear programas que envíen tareas MapReduce a Hadoop. Su lenguaje de programación se llama Pig Latin. Una de las características principales de Pig Latin es que puede ser extendido utilizando funciones definidas por el usuario (UDF) las cuales pueden programarse en lenguajes como Java, Python y Javascript. Pig fue originalmente creado por Yahoo, pero al igual que Hive ahora también es un proyecto de Apache.
Tanto Hive como Pig buscan resolver el mismo problema: elevar el nivel de abstracción para crear tareas MapReduce. Hive está orientado a crear sentencias declarativas, por lo que puede ser más amigable para gente acostumbrada a lidiar con bases de datos, mientras que Pig Latin es un lenguaje de programación procedural, por lo que es más útil para crear pipelines de datos y empata mejor con la forma de pensar de los programadores.
Es muy posible que esta sea un área que tendrá crecimiento en los próximos años conforme se crean frameworks para facilitar el desarrollo de aplicaciones sobre Hadoop.
Serialización
MapReduce lee y escribe datos en formato de pares llave/valor (key/value). Para convertir estos datos a un stream, es necesario serializarlos. El componente de serialización que utiliza Hadoop se llama Avro. Vale la pena mencionar que aunque Avro es el componente que usa Hadoop, existen otros frameworks de serialización que se podrían usar, tales como Protocol Buffers, Thrift o BSON (Binary JSON).
Gestión
Coordinar la configuración y ejecución de aplicaciones distribuidas no es cosa sencilla. Necesitamos herramientas que se encarguen de esto, y la opción default para Hadoop es Zookeeper (que en inglés significa “guardían del zoológico”). Algunos de los aspectos que resuelve son:
- Gestión de la configuración a través de nodos. Si tienes decenas o cientos de nodos de procesamiento, se complica mantener sincronizada la configuración de todos ellos y hacer cambios rápidamente. Zookeeper se encarga de esto.
- Mensajería confiable. Zookeeper permite implementar fácilmente una cola productor/consumidor que garantiza la entrega de mensajes, aún en caso de que algún nodo falle.
- Redundancia. Zookeeper puede encargarse de gestionar nodos replicados, direccionando las peticiones a un nodo maestro y en caso de que éste falle redireccionando las peticiones a un nuevo nodo maestro.
- Sincronización de procesos. Zookeeper puede coordinar el arranque y fin de un grupo de nodos de procesamiento. Esto asegura que cualquier procesamiento posterior se realice hasta que todos los nodos hayan terminado sus cálculos.
Integración
Hasta ahora hemos visto como funciona Hadoop con datos que ya tiene, pero no hemos visto cómo podemos importar/exportar datos hacia HDFS y HBase. Menciono aquí 3 opciones:
- Apache Sqoop. Es una herramienta para transferir conjuntos de datos entre Hadoop y bases de datos relacionales.
- Apache Flume. Colecciona y organiza datos a partir de las bitácoras de las aplicaciones (application logs) y los mueve hacia HDFS.
- Drivers JDBC/ODBC. Ya han comenzado a surgir los primeros drivers que permiten conectar los datos de Hadoop con aplicaciones externas. Esta será una de las áreas donde estaremos viendo mayor actividad de parte de los proveedores, creando drivers y conectores para integrarse a sus sistemas de BI y aplicaciones empresariales.
Otras capas y componentes
Tanto Hadoop como tecnología, y Big Data como práctica, son bastante jóvenes y apenas comenzamos a ver la punta del iceberg en su desarrollo. Veo dos capas comenzando a formarse pero que no me he atrevido a poner dentro del mapa actual porque creo que todavía son bastante jóvenes:
La primera es una capa de aplicaciones, que es donde tendremos aplicaciones de propósito específico que utilicen Hadoop. Al día de hoy, las organizaciones que utilizan Hadoop han creado sus aplicaciones in-house para esta capa, pero conforme Hadoop madure y tenga una mayor penetración en los corporativos, comenzaremos a ver aplicaciones “listas para usarse” sobre Hadoop.
Por otro lado, se está gestando una capa orientada al testing de Hadoop. Ya existe MRUnit, una librería java para realizar pruebas unitarias de tareas MapReduce. También ya se está incubando en Apache el proyecto BigTop, para el empaquetado y pruebas del ecosistema Hadoop.
Otra tecnología relacionada con Hadoop y Big Data que está ganando popularidad y que no he sabido en qué parte del mapa asignar —posiblemente iría en la capa de aplicaciones—, es Apache Mahout. Esta es una implementación de algoritmos para aprendizaje automatizado (machine learning) y minería de datos sobre Hadoop.
Conclusión
Conforme el interés de las organizaciones por realizar análisis de Big Data aumente, las áreas de TI deberán crear un stack tecnológico para soportarlo. Espero que este mapa te ayude a entender mejor como crear tu propio stack, y/o a darle sentido a la oferta de los proveedores de soluciones.
Referencias
[1] “Hadoop Wiki”. http://wiki.apache.org/hadoop
[2] D. Engfer. “Intro to the Hadoop Stack.” http://www.slideshare.net/davidengfer/intro-to-the-hadoop-stack-javamug
[3] C. Zedlewski, E. Collins. “Hadoop Stack: Then, now and future”. http://www.slideshare.net/cloudera/the-hadoop-stack-then-now-and-in-the-future-eli-collins-charles-zedlewski-cloudera
[4] M. Collins. “Hadoop and MapReduce: Big Data Analytics”. Gartner Research, Enero 2011 http://www.gartner.com/id=1521016
Pedro Galván (@pedrogk) es cofundador y director editorial de SG Software Guru
- Log in to post comments