Hadoop for dummies

hadoopHadoop es, hoy por hoy, el marco de desarrollo establecido para implantaciones de Big Data. Se compone de un conjunto de capacidades reales, escalables y automáticas para gestionar el flujo de datos, y convertir raw data (datos en bruto) en insight (valor).

Su creador fue Doug Cutting y lo donó a Apache Software Foundation (organización sin ánimo de lucro creada para dar soporte a los desarrollos de Software). Su nombre y el logo, se lo debe a la mascota de su hijo, un elefante de peluche llamado Hadoop.

Surge en 2004 a partir de un White Paper de Google que describía su sistema de ficheros. Doug no tuvo problema en implantarlo y mejorarlo.

Como ya hemos dicho en post anteriores, Hadoop cubre las necesidades básicas que tiene el Big Data: almacenamiento y procesado de datos. De ahí, que esté basado en dos conceptos:

  • HDFS (Hadoop Distributed File System): es un sistema de archivos distribuido, escalable y portátil.
  • MapReduce: es el modelo de programación sencillo para dar soporte a la computación paralela.hdfs

El sistema distribuido de ficheros trabaja sobre grupos de computadoras, organizadas en lo que se llama un cluster, puede incluir desde una máquina (nodo), hasta 30.000 según la web de Apache. Cada máquina puede tener varios discos.

Hadoop funciona en modo cliente-servidor. Existe un nodo máster que se encarga de la gestión del almacenamiento y procesado, es decir, de dónde está cada fichero de datos, de enviar las órdenes de procesado de los datos (Jobs) y de asegurar que todo queda procesado del modo más eficiente posible.

Los grandes ficheros de datos de entrada se trocean en tamaños menores (64GB ó 128GB) y cada trozo se replica al menos tres veces en nodos distintos. Así se comienza el procesamiento en paralelo, y si alguno de los nodos falla, el máster detecta el fallo y asigna el trabajo a otro nodo disponible.

MapReduce trabaja mediante algoritmos simples de “clavevalor” . La parte de Map, asigna la clave a la información que estamos buscando. El ejemplo estrella de los cursos de Hadoop es el algoritmo de contar palabras en un texto. La clave sería cada palabra, y el valor las veces que aparece. Primero contaríamos cada palabra, siendo el resultado (palabra, 1), después ordenaríamos las palabras y finalmente, en la fase Reduce, sumaríamos las palabras que aparecen repetidas. Veámoslo con un gráfico:

mapreduce

Con este método se ahorra tiempo de transferencia de ficheros, ya que el almacenamiento y el procesado se realiza en el mismo sitio.

Hadoop trabaja en modo batch, es decir, ejecutando unos procesos tras otros. Está optimizado para leer cada fichero entero, desde el principio hasta el final, por ello está destinado a trabajar con pocos ficheros grandes en vez de con muchos pequeños, porque lo carga en memoria y lo lee de una sola vez.

Por suerte, existe todo un ecosistema para trabajar con Hadoop, y no tener que escribir todo el código necesario para realizar la asignación de ficheros, el procesamiento, etc.

Veamos algunos de los componentes del zoo de Hadoop:

eco hadoop

Eclipse: es un entorno de desarrollo integrado, donado por IBM a la comunidad Apache. Agiliza enormemente el desarrollo de los programas Java.

Sqoop: nos permite conectarnos a cualquier base de datos relacional (que el acceso mediante una conexión ODBC) e intercambiar datos con nuestro sistema de ficheros HDFS. Es muy importante poder incorporar fácilmente datos de nuestras bbdd (datawarehouse, ERPs, etc.) igualmente poder llevar fácilmente el resultado de un cálculo (scoring, segmentación…) a nuestras bases de datos.

Flume: nos permite recuperar información de sitios remotos. Mediante un agente que se ejecuta en el lugar que se producen los datos (fichero de log, Tweeter…) recoge los datos y los importa en HDFS. Es solo de una dirección, no permite exportar datos de HDFS a otras ubicaciones. Muy útil para recuperar información en tiempo real.

Hive: actúa como la base de datos de Hadoop. Es un intérprete SQL – MapReduce. Traduce la query a programas Java que realicen los MapReduce. Esto permite utilizar herramientas de Business Intelligence convencionales (que admitan conexión ODBC) con los datos de HDFS.

Pig: para trabajar con MapReduce, es necesario programar, tener sólidos conocimientos de Java, saber cómo funciona MapReduce, conocer el problema a resolver, escribir, probar y mantener el código … Para ello es muy beneficioso disponer de un sistema más sencillo, que nos abstraiga de la complejidad del MapReduce. Para ello existe Pig, que facilita el flujo de datos de una manera más sencilla. Dispone de su propio lenguaje de programación llamado Pig Latin.

Hbase: es una base de datos columnar que se ejecuta sobre HDFS. Puede almacenar grandes cantidades de datos, y acceder a ellos muy rápidamente y lleva bien el procesamiento incluso cuando hay datos dispersos. Un ejemplo de base de datos columnar, es como si almacenáramos los resultados de fútbol en una tabla así:tabla futbol

Oozie: Actúa como un planificador. Es un motor de workflows, que puede incluir procesos MapReduce (varios, ya que los procesos MapReduce son simples y por lo general, hay que encadenar varios para realizar los cálculos), scripts de Pig, de Hive, etc.

Zookeeper: alguien tenía que cuidar de tanta fauna… Zookeeper actúa como coordinador. Guarda toda la configuración de los metadatos, realiza los bloqueos pertinentes si dos procesos deben acceder al mismo fichero, guarda usuarios y passwords para el acceso a los distintos sitos, etc.

Mahout: es una librería de algortimos de Machine Learning, escritos en Java. ¿Qué es Machine Learning? Un programa al que no hay que decirle qué debe hacer. Dedicaremos un post posterior a habla de Machine Learning.

Después de este ecosistema, ya podemos ponernos a utilizar Hadoop, sin necesidad de ser expertos en Java… ¿os animáis?

Deja un comentario