RSS

Introducción a Big Data y Hadoop

21 Ago

hadoop logoEn el siguiente post voy a hablar de Big DataHadoop y del porqué se han hecho un hueco importante dentro del ecosistema tecnológico actual. La idea que tengo es que este va a ser el primero de una serie de post con las cosas que últimamente he estado viendo/estudiando/aplicando sobre el ecosistema Hadoop.

En principio me gustaría hacer un par de post más teóricos para luego meterme más en temas de desarrollo y configuración del entorno. Asimismo me gustaría hablar de proyectos con HiveSqoop y/o Flume.

Si quieres seguir leyendo esta post en mi blog java4developers.com pulsa este enlace. Si lo quieres leer en este mismo blog pincha en continuar leyendo, más abajo.

El camino hasta Big Data

La primera vez que oí hablar de hados fue hace unos años en un screencast que hablaba sobre tendencias en el mundo de la informática. Las palabras que más se repetían en ese video eran Big Data. Seguida tal vez por Data Science y quizá ‘negocio’ ó ‘dinero’. De hecho probablemente este equivocado y sean están dos últimas palabras las que más se repetían… Pero dejando de lado el dinero los términos Big Data Data Science han circulado con fuerza en los últimos años. Una de las definiciones más simples sobre Big Data la he encontrado en la Wikipedia, aunque no por ello menos precisa. La Wikipedia apunta sobre el término Big Data lo siguiente:

Big Data es en el sector de tecnologías de la información y la comunicación una referencia a los sistemas que manipulan grandes conjuntos de datos (o data sets). Las dificultades más habituales en estos casos se centran en la captura, el almacenado,búsqueda, compartición, análisis, y visualización

Por lo tanto podemos hablar de Big Data básicamente como el conjunto de técnicas que permiten manejar grandes volúmenes de información. Hay bastante gente que simplemente cree que Big Data no es otra cosa que un término de moda, hype en inglés, para definir una situación que no es distinta a la de otras épocas. Siempre ha habido momentos en que la información disponible ha superado a los dispositivos existentes en esos momentos para almacenar datos y las técnicas para manejarlos.

Recomiendo un par de libros que dan hablan sobre distintos puntos de vista sobre Big Data. El primero es gratuito y se titula Big Data Now de la editorial O’Reilly. El segundo, Big Data: A Revolution That Will Transform How We Live, Work, and Think escrito por Kenneth Cukier y Viktor Mayer-Schonbergerse ha convertido en un éxito de ventas y ha llegado a trascender incluso del canal tecnológico habitual al que este tipo de libros puede ir dedicados. Quizá el hecho de que Kenneth Cukier sea editor del periódico The Economist haya ayudado a ello.

El termino Data Science quizá es algo más genérico y hace referencia a las técnicas necesarias para manipular y tratar la información desde un punto de vista estadístico/matemático. De ahí que Data Science está fuertemente basado en algoritmos estadísticos matemáticos aplicados al problema de ‘Big Data’ entre otros.

Independientemente de los términos Big Data y Data Science, si parece que desde hace unos años y principalmente con el auge de las redes sociales ha surgido la necesidad de manejar grandes volúmenes de datos y no existía la manera de hacerlo de manera. Una de las tecnologías que se han echo fuertes en este entorno ha sido Hadoop.

Introducción a Hadoop

Para resolver parte de los problemas que acabamos de ver, surge, entre otros software, Hadoop por parte de su creador Doug Cutting. Las principales empresas que colaboran en el proyecto son YahooFacebook y Cloudera. Un enlace de la propia Cloudera hablando de los orígenes de Hadoop se puede encontrar en este link.

De la propia página del proyecto Apache Hadoop podemos encontrar que se Hadoop se define como:

un proyecto que desarrolla software para computación distribuida, escalable y fiable. La librería software Apache Hadoop permite el procesamiento distribuido de grandes conjuntos de datos en clusters de computadoras usando modelos sencillos de programación. Está diseñado para escalar desde unos pocos servidores hasta miles de máquinas, todas ellas ofreciendo almacenamiento y procesamiento local. En lugar de confiar en hardware para ofrecer alta disponibilidad, Hadoop está diseñado para detectar y manejar fallos en la capa de aplicación, para ofrecer un servicio de altamente disponible por encima de un cluster de computadores, los cuales pueden estar sujetos a fallos.

Mi interpretación libre es que Hadoop es una librería software que permite manejar grandes volúmenes de información dividiendo está tanto a nivel de almacenamiento como de procesamiento de la misma entre clusters de computadores (commodity hardware). Los dos conceptos en los que se apoya Hadoop es por un lado en la técnica de MapReduce y por otro lado en el sistema distribuido de archivos HDFS. Ambos conceptos parten originalmente de una serie de papers publicados por Google que puedes encontrar pinchando en los enlaces.

MapReduce

El modelo de programación MapReduce se basa en dos funciones llamadas Map y Reduce escritas por el usuario. La entrada a dicho modelo es un conjunto de pares clave/valor y la salida es otro conjunto de pares clave/valor. El mecanismo básico de MapReduce es el siguiente:

  1. Función Map. A partir del conjunto de pares clave/valor de entrada se genera un conjunto de datos intermedios. La función de Map asocia claves idénticas al mismo grupo de datos intermedios. Cada grupo de datos intermedios estará formado por una clave y un conjunto de valores por tanto. Estos datos intermedios van a ser a su vez la entrada de la función de Reduce.
  2. Función Reduce. La fase de Reduce se encargará de manipular y combinar los datos provenientes de la fase anterior para producir a su vez un resultado formado por otro conjunto de claves/valores.

Uno de los ejemplos más tipos implementados seguidos mediante el modelo MapReduce es el contador de número de vez que las palabras aparecen en un texto. Hay que tener en cuenta que el texto original tiene que ser tratado previamente para ser transformado en un conjunto de pares claves/valor. El pseudo código para este ejemplo es el siguiente:

map(String key, String value):
    // key: document name
    // value: document contents
    for each word w in value:
        EmitIntermediate(w, "1");

reduce(String key, Iterator values):
    // key: a word
    // values: a list of counts
    int result = 0;
    for each v in values:
        result += ParseInt(v);
    Emit(AsString(result));

La clave del modelo MapReduce es que puede realizar todo el computo de manera que se subdivida este en distintos computadores. Una idea muy repetida cuando se trata de explicar el modelo MapReduce es que es el algoritmo (funciones Map y Reduce) el que se va a desplazar donde están almacenado los datos. Precisamente el almacenamiento de datos corre a cargo de un sistema de ficheros distribuidos llamado HDFS.

HDFS

Es un sistema distribuido de ficheros en el que se apoya Hadoop. La arquitectura básica de un cluster en el que utilizamos HDFS es un nodo que es el encargado de las tareas y lleva control sobre la ejecución del proceso MapReduce a nivel global llamado jobtrackerotro coordinador llamado namenode que conoce como están distribuido los datos en el resto de nodos y el control de acceso. Es perfectamente válido que el jobtracker y el namenode estén en el mismo nodo.  Además hay un conjunto de nodos llamados datanodes que son los encargados de ejecutar el cómputo, es decir, las funciones Map y Reduce sobre los datos almacenados de manera local en cada uno de dichos nodos.

Las principales características de HDFS son:

  • Tolerancia a fallos.
  • Acceso a datos en streaming.
  • Facilidad para grandes volumenes
  • Model sencillo de coherencia.
  • Portabilidad entre hardware heterogeneo.

Un buen lugar para comenzar a aprender sobre HDFS es la propia página que tiene Hadoop sobre él.

Además del modelo de programación MapReduce y HDFSHadoop tiene un conjunto de librerías comunes que facilitan la interconexión entre los distintos componentes de Hadoop.

En el siguiente post profundizaremos en el ecosistema Hadoop.

Enlaces relacionados en este blog:

 
3 comentarios

Publicado por en 21 agosto, 2013 en Big Data

 

Etiquetas: , , ,

3 Respuestas a “Introducción a Big Data y Hadoop

Deja un comentario