Los grandes volúmenes de datos, generados por miles de millones de personas y por miles de millones de dispositivos, han encontrado en las tecnologías Big Data herramientas capaces de procesarlos e indagar sobre ellos para extraer información útil y conocimiento no evidente.
Las dificultades más habituales que nos encontrábamos ante cantidades demasiado grandes de datos se centraban en capturar, almacenar, buscar, analizar, compartir y visualizar la información subyacente. Las tecnologías Big Data se centran principalmente en proporcionar paliativos para estas dificultades, y para ello se apoyan en tres pilares:
MapReduce ha sido adoptado mundialmente con un desarrollo opensouce denominado Hadoop. Google fue la primera empresa en proponer el framework MapReduce. Años más tarde, Yahoo mandó a uno de sus trabajadores, Doug Cutting, analizar el artículo de Google y realizar una implementación. Tras el éxito obtenido y la liberalización del código generado se creó el proyecto Hadoop, que actualmente mantiene la fundación Apache.
Apache Hadoop es una plataforma que permite el procesamiento de grandes volúmenes de datos a través de clusters, usando un modelo simple de programación. Además, su diseño permite pasar de pocos nodos a miles de nodos de forma ágil. Básicamente, Hadoop proporciona dos cosas: un sistema de archivos distribuido usando una arquitectura Master-Slave (HDFS, Hadoop Distributed File System) y un framework de MapReduce que permite dividir y paralelizar los cálculos complejos entre un número indefinido de ordenadores.
El modelo MapReduce de Hadoop simplifica el procesamiento en paralelo, abstrayéndonos de la complejidad que exite en los sistemas distribuidos. Básicamente las funciones map transforman un conjunto de datos a una lista de pares clave-valor, ordenando los elementos según su clave. La función reduce se utiliza para combinar los valores (con la misma clave o con un patrón común) en un único resultado.
Un programa MapReduce se suele conocer como Job, y la ejecución de un Job empieza cuando el cliente manda la configuración del Job al JobTracker. Esta configuración especifica las funciones Map, Combine (shuttle) y Reduce, además de la entrada y salida de los datos.
Hoy en día apenas existen alternativas importantes a Hadoop, si bien algunos foros se han hecho eco de que han encontrado cuellos de botella en su rendimiento, así como en la propuesta de paralelización MapReduce. En los siguientes enlaces puedes profundizar en esta información: Fatiga de Hadoop: alternativas emergentes y Alternativas a MapReduce y Hadoop.
La fundación Apache dispone de un conjunto bastante amplio y variado de proyectos que se pueden integrar con Hadoop, o interactuar con él, para conseguir mayor potencia y capacidad de especialización en los proyectos de Big Data. A continuación enumeramos los más destacados.
Apache HBase: la base de datos
HBase es la base de datos oficial de Hadoop. Aunque Hadoop puede interactuar con otras bases de datos relacionales o NoSQL, como Cassandra o BigTable, HBase es el componente oficial/estándar NoSQL a utilizar. HBase está basada en BigTable (de Google) por lo que es una base de datos clave-valor orientada a columnas (column-family). Como hemos visto en el post anterior, eso quiere decir que no sigue el esquema relacional y no admite SQL. Sin embargo, es capaz de manejar grandes conjuntos de datos con operaciones simultáneas de lectura y escritura.
Apache Hive: el data warehouse
Hive es un sistema de Data Warehouse para Hadoop que facilita la agregación de los datos para realizar informes (reporting) y análisis de grandes datasets. Hive permite realizar consultas sobre los datos usando un lenguaje similar a SQL, llamado HiveQL. Además permite utilizar los tradicionales MapReduce cuando el rendimiento no es el correcto. Permite conexiones JDBC/ODBC, por lo que se integra fácilmente con otras herramientas de Business Intelligence.
Apache Sqoop: la herramienta de ETL
Sqoop significa SQL-to-Hadoop. Se trata de una herramienta diseñada para transferir de forma eficiente información entre Hadoop y bases de datos relacionales. Básicamente, Sqoop permite importar tablas individuales, o bases de datos enteras, a HDFS. Además, genera clases Java gracias a las cuales se puede interactuar fácilmente con los datos importados. Otra de sus funcionalidades principales es la importación desde bases de datos SQL directamente a Hive.
Apache Mahout: la plataforma de data mining
Mahout es una plataforma de aprendizaje autónomo y data mining construida sobre Hadoop. Uno de sus principales objetivos consiste en ayudar a descubrir patrones, de manera automática, en grandes volúmenes de datos. Conseguir detectar patrones reales y útiles en los datos sin intervención humana es uno de los grandes retos del Big Data, por eso Mahout todavía tiene diferentes clases sin implementar. En general, Mahout tiene algoritmos de recomendación, clustering y clasificación.
Apache Lucene: el motor de búsqueda
Lucene es un motor de búsqueda escrito en Java que permite indexar cualquier texto para luego buscar por palabras clave, o por cualquier otro criterio de búsqueda, en tiempo récord. Aunque en principio Lucene sólo funciona sobre texto plano, existen plugins que permiten la indexación y búsqueda de contenidos en documentos Word, PDF, XML o páginas HTML. El proyecto Apache Solr es una plataforma complementaria de la fundación Apache que aporta funcionalidades muy interesantes al software base de Lucene.
Apache UIMA: el framework para estructurar información
UIMA significa Unstructured Information Management Applications (Aplicaciones de gestión de información desestructurada). Se trata de un framework que permite analizar grandes volúmenes de datos no estructurados, como texto, vídeo, audio, etc… y obtener conocimiento que sea relevante para el usuario final. Por ejemplo a partir de un fichero plano es posible descubrir que entidades son personas, lugares u organizaciones. Apache UIMA tiene ciertas semejanzas con nuestro servicio Classora Media Support, aunque no está tan maduro ni especializado.
Apache Stanbol: la librería de componentes semánticos
Stanbol es un conjunto de librerías semánticas que permiten realizar operaciones de enriquecimiento de contenidos. En general, pueden utilizar el cruce con bases de conocimiento para complementar el texto de entrada con contenidos externos relevantes, como definiciones enciclopédicas, imágenes, vídeos o componentes de redes sociales. Un proyecto complementario a Apache Stanbol es Apache Jena, que permite construir aplicaciones utilizando los recursos de la web semántica, como las APIs de Linked Data.
Apache ZooKeeper: la herramienta de sincronización
Zookeeper significa el guardián del Zoo. Se trata de un proyecto que proporciona una infraestructura centralizada para servicios basados en cluster (es decir, que se ejecutan en paralelo) y que necesitan estar sincronizados. Por ejemplo, datos de configuración, jerarquías de nombres, detalles de procesado… etc. De esta forma, ZooKeeper ofrece un punto de acceso común a una gran variedad de objetos ampliamente utilizados en grandes entornos de cluster.
Apache Avro: el sistema de serialización
Avro es un sistema de serialización de datos, es decir, una plataforma para codificar y homogeneizar los datos de forma que se puedan transmitir de forma óptima por la red. Dado que los proyectos en Hadoop suelen mover cantidades descomunales de datos, es recomendable emplear serialización para procesarlos y almacenarlos. Esta serialización puede ser en texto plano, JSON, en formato binario… etc. Avro permite almacenar y leer datos fácilmente desde diferentes lenguajes de programación y está optimizado para minimizar espacio en disco.
Apache Pig: el helper para analizar grandes volúmenes de datos
Apache Pig es una plataforma que permite simplificar el análisis de grandes volúmenes de datos proporcionando un lenguaje de alto nivel. Su objetivo es que los usuarios de Hadoop se puedan centrar más en el análisis de los datos y menos en la creación de programas MapReduce. Su nombre viene de una analogía con los cerdos: al igual que los cerdos comen de todo, el lenguaje de programación Pig está pensado para poder trabajar en cualquier tipo de datos. Pig consta de dos componentes: el lenguaje PigLatin y su entorno de ejecución.
Apache Flume: el agregador de logs
Flume es un proyecto para capturar, analizar y monitorizar datos de ficheros de logs. En general, es capaz de agregar y mover grandes volúmenes de logs desde diferentes servidores a un repositorio central, simplificando así el proceso de recolección. También emplea las operaciones MapReduce de Hadoop para procesar los logs en paralelo. Otro proyecto de Apache muy parecido a Flume en cuanto a funcionalidad y objetivos es Apache Chukwa, la principal diferencia es que Chukwa está pensado para ser usado en batch.
Gracias por la introducción! Gran recopilación de tecnologías. Echo en falta Apache Spark en la lista.