Big Data: de la teoría a la práctica > 4. Herramientas

Escrito por 29 abril, 2016Tecnología
Herramientas de Big Data (parte I)

En el artículo anterior hemos visto Big Data desde el punto de vista teórico, explicando en que consiste y sus puntos clave. En esta entrada nos centraremos en las herramientas y tecnologías que hacen de Big Data algo más que un ejercicio de análisis teórico y que facilitan el acceso a toda clase de usuarios. Primero hablaremos de Hadoop, con sus módulos y tecnologías relacionados, y luego pasaremos a hablar de distribuciones y suites de Big Data.

Hadoop

Sin duda Hadoop (y sus derivados y evoluciones) es el framework para Big Data con mayor uso actualmente. Apache Hadoop es un framework de código libre para el almacenamiento y procesado de grandes cantidades de datos en clústeres de hardware comercial. Hadoop consta de varios módulos y cada uno de ellos ha sido diseñado con la idea principal de que el hardware se deteriora y falla, por lo que esos errores deben ser tratados en el software del framework. [4]

Los dos módulos principales de Hadoop son los siguientes:

HDFS

Hadoop Distributed Filesystem es el módulo que se encarga del almacenamiento. Está escrito en Java, es escalable y distribuido. Todo esto de forma persistente y segura y sin importar el tamaño de los datos. HDFS intenta que los datos sean escritos una sola vez y luego puedan ser leídos desde ese punto infinidad de veces, lo que hace difícil modificar datos una vez han sido escritos. Permite añadir datos a los ya existentes, pero es bastante ineficiente.

Los datos se dividen en bloques, normalmente de 64/128 Mb (aunque se suele jugar con el tamaño de los bloques para influir sobre el número de nodos que se usarán para las tareas MapReduce) para así ser guardados de forma distribuida en los nodos del clúster. Por norma general se realizan 3 copias  de cada bloque que se guardarán en distintos nodos del clúster teniendo incluso en cuenta la localización física de los nodos para así asegurar que los datos permanecerán a salvo. HDFS se encarga por completo de la administración de los datos y para el usuario es como si se tratara de acceder a un sistema de archivos virtual. Los comandos son muy similares a UNIX, como por ejemplo “hadoop fs –put <nombredelarchivo>” para mostrar las propiedades de un archivo o “hadoop fs –put <nombredelarchivo>” para guardar un archivo local en el sistema HDFS. Existen también permisos que deben ser administrados como en cualquier sistema Linux.

La arquitectura de HDFS es un caso claro de maestro/esclavo con los siguientes componentes:

  • Namenode: es el elemento maestro de la arquitectura y se encarga de administrar los metadatos de todos los datos distribuidos entre los distintos nodos. Guarda un plan con la localización de los bloques y un archivo con las operaciones actuales sobre los datos. Con esos dos archivos como base es capaz de responder a peticiones sobre los datos, aunque él mismo no guarde datos.
  • Datanodes: son los componentes esclavos de la arquitectura y se encargan únicamente del almacenamiento de datos y gracias a ellos se consigue la escalabilidad del sistema.
  • Namenode secundario: no sirve como copia de seguridad del namenode primario, sino que se encarga de forma periódica de juntar los datos del namenode principal para dejarlo libre para otras tareas.

Si se quiere almacenar un archivo en el sistema HDFS el cliente pregunta al namenode si tiene permiso para hacerlo. Si recibe el OK entonces envía los detalles del archivo al namenode y recibe una lista de datanodes en los que tiene permiso para escribir los datos. A partir de este punto la comunicación es entre el cliente y los datanodes. HDFS se encarga en segundo plano de replicar los bloques de forma automática. El grado de replicación estándar es 3 y el algoritmo tiene en cuenta que la segunda y tercera copia se almacenen en datanodes de racks/habitaciones/centros distintos.

Al leer un archivo vuelve a haber comunicación entre el cliente y el namenode para comprobar si el cliente tiene los permisos necesarios y recibe una lista con los bloques y los datanodes para leer los datos directamente desde allí. De esta forma es posible realizar lecturas masivas y escrituras masivas de forma paralela lo que aumenta la velocidad en gran medida en comparación con la lectura/escritura secuencial.

MapReduce

También basado en Java, MapReduce se encarga del procesamiento paralelo de gran cantidad de datos estructurados y desestructurados, que en Hadoop suelen encontrarse en HDFS (aunque veremos algunas alternativas más adelante). Utiliza el “divide y vencerás” y gracias a ello es capaz de paralelizar los cálculos sobre todos los nodos del clúster de forma segura y con tolerancia a fallos.

Esta forma de trabajar y sus distintas fases se explican muy bien usando el ejemplo de WordCount que es el equivalente a “Hola Mundo” en MapReduce. La tarea a realizar consiste en contar cuantas veces aparece una palabra en el texto de entrada (libros enteros). Se crea una clave con el nombre del archivo y un valor que sería el texto que contiene el archivo. La forma de proceder es la siguiente:

bigdata-graph-1

Este procedimiento distribuido hace uso de parejas de clave-valor. Estas parejas de clave-valor se reparten entre los distintos procesos de los nodos del clúster en donde podemos encontrar las siguientes fases:

  • Fase de mapeo: el texto se divide en palabras individuales y se cuenta cuantas veces aparece cada palabra, creando para cada palabra una clave-valor con la propia palabra como clave y el número 1 como valor
  • La fase de combinación es opcional y funciona como una especie de mini reducción. Las parejas clave-valor se suman ya de forma local como ocurre en el Mapper 2.

Hasta este punto se ha trabajado únicamente de forma local, todavía falta un paso global para obtener el resultado final. Para ello se realiza un particionado de los resultados obtenidos hasta el momento y en el ejemplo mostrado todas las claves “a” son asignadas al Reducer 1, todas las claves “b” al Reducer 3 y las “c” al Reducer 3. La fase  de Shuffle y Sort (mezclar y ordenar) se encarga de asegurar  de que las parejas clave-valor sean asignadas al Reducer correcto. Los resultados parciales se ordenan antes de comenzar la fase de reducción.

  • Fase de reducción: todos los valores con la misma clave se encuentran en el mismo Reducer y este debe únicamente contar el número de veces que aparece cada una. De esta forma aparecen a y b dos veces, c tres veces. Esto se guarda también en claves-valor. Cada Reducer guarda los datos en un archivo y estos archivos se juntan para obtener el resultado final.

MapReduce hace uso de una arquitectura maestro-esclavo de forma similar a HDFS, con los siguientes componentes:

  • Jobtracker: es el componente maestro y administra todos los jobs y recursos del clúster y sería el equivalente del Namenode n HDFS
  • Tasktrackers: componentes esclavos que corren en cada servidor del clúster y se encargan de ejecutar los jobs MapReduce propiamente dichos.
  • Tareas (Tasks): son administrados de forma local por cada nodo del clúster y corresponden básicamente a una JVM (máquina virtual Java) donde corre como proceso un Mapper o un Reducer.

Otros módulos relacionados Hadoop

Pig

Crear tareas MapReduce en Java requiere de conocimientos de programación y es a la larga bastante costoso por lo que se creó una capa intermedia de abstracción llamada Apache Pig [6]. Pig dispone de un lenguaje de scripting llamado Pig Latin que permite describir de forma abstracta el flujo de datos de una tarea MapReduce. El compilador de Pig crea en base a esa descripción abstracta las propias tareas MapReduce. Esto permite seguir manteniendo el control sobre el código de las tareas, pero en la práctica muchas veces esto no es necesario y se utiliza Pig directamente.

Hive

Apache Hive funciona también como una capa de abstracción intermedia basada en el framework de MapReduce y que en muchos casos es vista como el Data Warehouse para Hadoop [7]. Hive utiliza un lenguaje llamado HiveQL que es similar a SQL que permite realizar consultas y análisis sobre datos almacenados en un sistema HDFS o en cualquier otro sistema de archivos compatible con Hadoop. Las consultas escritas en HiveSQL son convertidas por Hive en tareas MapReduce al igual que ocurre con Pig Latin y Pig. El objetivo de Hive es facilitar el uso de Hadoop a las personas familiarizadas desde hace años con SQL.

Uso

Hadoop se puede instalar de forma muy simple de forma local en un único ordenador, pero esta forma de uso es sólo recomendada para entornos de desarrollo. Para entornos de producción lo recomendado es la creación de un clúster. Es precisamente el uso e instalación de un clúster donde la complejidad empieza a ser un problema serio.

Para empezar no existe una instalación integrada para clúster. Cualquier componente extra que se quiera utilizar deberá ser instalado de forma manual y es aquí donde los problemas se multiplican: los módulos y componentes adicionales disponen de diversas versiones y no son compatibles entre sí, por lo que es el encargado de la instalación quien debe asegurarse de que todos los elementos instalados podrán funcionar bien en conjunto.

Para terminar no existe soporte comercial de Hadoop (a nivel local, lo que puede presentar una gran oportunidad de negocio) y las organizaciones deben arreglárselas como puedan ante cualquier problema. Existen muchos tutoriales y foros con preguntas que en algunos casos son resueltas por otros usuarios, pero ante un problema serio la organización puede verse ante una larga y dura tarea de experimentación e investigación hasta solucionar el problema.

Hadoop es por estas razones muy interesante para experimentos o para desarrolladores. También es útil en modo clúster para empresas pequeñas, pero para empresas con mayor tamaño y siempre dependiendo del modelo de negocio es posible que se deba recurrir a alguna de las distribuciones Hadoop existentes, sobre todo por el menor tiempo de autoaprendizaje requerido y  por el soporte comercial.

Join the discussion Un comentario

Dejar un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.

ACEPTAR
Aviso de cookies