Apache Hadoop: sistema de archivos distribuido
El big data, últimamente en boca de todos, hace referencia a ingentes cantidades de datos en constante crecimiento. Alrededor del globo las empresas desarrollan métodos cada vez más eficientes para registrar sus enormes colecciones de datos, para almacenarlas en arquitecturas de proporciones gigantescas y para procesarlas sistemáticamente; las cifras resultantes raramente se encuentran por debajo de los petabyte o los exabyte. Esto hace que los procesos de cálculo ya no se puedan ejecutar en un solo sistema, de tal forma que estos análisis de big data precisan una plataforma de software que permita distribuir estas complejas tareas de computación en un gran número de nodos. El framework Apache Hadoop, fundamento de diversas distribuciones y suites de big data, representa aquí la mejor solución. A continuación te contamos un poco más.
¿Qué es Hadoop?
Apache Hadoop es una estructura para componentes de software diversos basada en Java, que permite fragmentar tareas de cálculo (jobs) en diferentes procesos y distribuirlos en los nodos de un clúster de ordenadores, de forma que puedan trabajar en paralelo. En las arquitecturas Hadoop más grandes pueden usarse incluso varios miles de ordenadores. La ventaja de este concepto es que a cada ordenador del clúster solo se le ha de proporcionar una fracción de los recursos de hardware necesarios. De esta manera, el trabajo con grandes volúmenes de datos no presupone ninguna máquina de última generación, sino que se puede llevar a cabo de forma más rentable con varios servidores estándar.
Creado por el desarrollador Doug Cutting en 2006, el proyecto open source Hadoop tuvo como inspiración el algoritmo MapReduce de Google. En 2004, cuando el buscador dio a conocer una tecnología que soporta la computación paralela de un gran volumen de datos con ayuda de un clúster de ordenadores, Cutting se dio cuenta del potencial del algoritmo y se puso manos a la obra para desarrollar su propio proyecto. El desarrollador, que hasta entonces había trabajado para gigantes del sector como Excite, Apple Inc., Xerox o Yahoo y que ya se había creado un nombre gracias a Apache Lucene, recibió el apoyo de esta última empresa. Dos años después, Hadoo logró convertirse en el mejor proyecto de la Fundación Apache Software y en 2011 alcanzó el release status 1.0.0.
Junto al lanzamiento oficial de la fundación Apache también existen algunas derivaciones del framework original ofrecidas como distribuciones profesionales a clientes finales de diversos proveedores de software. Un ejemplo lo ilustra Cloudera, la empresa donde hoy puede encontrarse a Cutting y que, además de ofrecer soporte para Hadoop, pone a disposición CDH, una distribución open source “Enterprise ready”. En Hortonworks y Teradata se encuentran productos parecidos. Microsoft lo ha incluido en su servicio en la nube Azure y también el InfoSphere BigInsights de IBM se basa en el proyecto Hadoop de Apache.
Componentes básicos de la arquitectura Hadoop
Cuando se habla de Hadoop se hace referencia a un paquete muy amplio de software a veces también denominado ecosistema Hadoop. Este paquete incluye, junto a los componentes centrales (Core Hadoop), una gran diversidad de extensiones que no solo destacan por sus curiosos nombres (Pig, Chukwa, Oozie o ZooKeeper) sino por ampliar el framework con un gran número de funciones adicionales que sirven para la manipulación de extensos grupos de datos. Todos estos proyectos, estrechamente vinculados entre sí, también son desarrollados bajo el techo de la fundación Apache Software.
El fundamento del ecosistema Hadoop lo constituye el Core Hadoop. Sus componentes en la primera versión son el módulo básico Hadoop Common, el Hadoop Distributed File System (HDFS) y un motor MapReduce. A partir de la versión 2.3 este último fue sustituido por la tecnología de gestión de clústers YARN, también denominada MapReduce 2.0. Esta técnica excluye el algoritmo MapReduce del sistema de gestión en sí, de forma que a partir de este momento se convierte en un plugin basado en YARN.
Hadoop Common
El módulo Hadoop Common pone a disposición de todos los demás elementos del framework un set de funciones básicas, entre las cuales se encuentran los archivos .jar de Java necesarios para iniciar Hadoop, las bibliotecas para la serialización de datos así como las interfaces para el acceso al sistema de archivos de la arquitectura Hadoop y la llamada a procedimiento remoto (remote procedure call o RPC) para la comunicación entre clientes dentro de un clúster. Además, el módulo también contiene el código fuente, la documentación del proyecto e información sobre otros proyectos de la comunidad Hadoop.
Hadoop Distributed File System (HDFS)
El sistema de archivos distribuido de Hadoop consiste en un sistema de ficheros de alta disponibilidad para el almacenamiento de un gran volumen de datos en un clúster de ordenadores, encargado del mantenimiento de los datos dentro del framework. Para ello, los archivos se fragmentan en bloques de datos y se distribuyen replicados en varios nodos sin seguir ningún esquema. Según los propios desarrolladores, HDFS es capaz de gestionar cantidades de datos en la escala de los petabytes. Es posible configurar individualmente tanto la longitud de los bloques de datos como el grado de la redundancia.
El clúster de Hadoop funciona básicamente según el principio maestro-esclavo, de tal forma que la arquitectura del framework de software consta de un nodo maestro al cual se subordinan una variedad de nodos esclavos. Este principio también se ve reflejado en la construcción del HDFS, consistente en un namenode (nodo de nombres) y varios datanodes (nodos de datos) subordinados. El nodo de nombres administra todos los metadatos del sistema de archivos, la estructura de ficheros y los archivos. El almacenamiento en sí de los datos se produce en los nodos de datos. Para minimizar la pérdida de datos, los archivos se fragmentan en bloques y se depositan replicados en diferentes nodos. De forma predeterminada, se realizan tres copias de cada bloque.
Cada datanode envía un signo vital al namenode en periodos regulares, el llamado heartbeat (latido). Si no se produce esta señal, el namenode declara a este esclavo como “muerto” y se ocupa, con ayuda de las copias disponibles en otros nodos, de que, a pesar de esta caída, existan en el clúster suficientes copias del bloque en cuestión. El namenode tiene, por esto, una función principal dentro del framework. Para que este no se convierta en el único responsable o “single point of failure”, es habitual nombrarle un “asistente”, el secondary name node, que registra todos los cambios en relación con los metadatos y permite de esta manera una recuperación de la entidad de control central.
El HDFS amplió en el paso de Hadoop 1 a Hadoop 2 con sistemas de seguridad adicionales: namenode HA (High Availability, alta disponibilidad) completa el sistema con una protección automática ante caídas, gracias a la cual se inicia un componente de sustitución en el caso de una caída del namenode. Además, la función Snapshot permite restablecer un estado anterior del sistema. La extensión Federation permite ejecutar varios namenodes dentro de un clúster.
MapReduce Engine
Otro componente fundamental del Core Hadoop es el algoritmo MapReduce desarrollado por Google, que en la primera versión de Hadoop aún estaba implementado como motor autónomo. La tarea central de esta máquina es la gestión de los recursos así como el control y el seguimiento de los procesos de cálculo (job scheduling/monitoring). El procesamiento de los datos se basa esencialmente en las fases “Map” y “Reduce” y se realiza directamente en el lugar donde se depositan (data locality). Esto acelera el tiempo de cálculo y reduce el tráfico en la red.
En la fase Map los procesos de cálculo se dividen en porciones que se denominan jobs (tareas) y que un jobtracker (rastreador de trabajos) en el nodo maestro distribuye en varios sistemas-esclavo dentro del clúster. Los denominados tasktracker (rastreadores de tareas) se encargan de que estas tareas o procesos trabajen en paralelo. En la consiguiente fase Reduce el motor recoge los resultados parciales y elabora un resultado global.
Mientras que el nodo maestro alberga por lo general los componentes namenode y jobtracker, en cada esclavo trabaja un datanode y un tasktracker. La siguiente imagen muestra una arquitectura Hadoop básica tal como funciona en la primera versión del framework, dividida en una capa MapReduce y una capa HDFS.
El lanzamiento de la version 2.3 de Hadoop significó la reelaboración completa del motor MapReduce, que dio como resultado la tecnología de administración de clústeres YARN/MapReduce 2.0, que separa la gestión de recursos y la administración de tareas (job scheduling / monitoring) propia de MapReduce, abriendo el framework a nuevos modelos de procesamiento y a una amplia paleta de aplicaciones para big data.
YARN/MapReduce 2.0
La llegada del módulo YARN („Yet Another Resource Negotiator“) en la versión 2.3 cambia fundamentalmente la arquitectura de Hadoop, razón por la cual suele hablarse de una transición de Hadoop 1 a Hadoop 2. Mientras que Hadoop 1 ofrece MapReduce a sus usuarios solo como aplicación, el desacople de la gestión de recursos y la gestión de tareas del modelo de procesamiento de datos permite integrar una gran variedad de aplicaciones para big data en el framework. Como consecuencia, con Hadoop 2 MapReduce se convierte una más entre otras aplicaciones que se pueden usar para acceder a los datos ejecutables en el framework. De esta forma, ya no es posible definir a Hadoop exclusivamente como un entorno de ejecución para MapReduce. En su lugar, YARN toma el papel de un sistema operativo distribuido para la gestión de recursos para aplicaciones para big data.
Las modificaciones fundamentales de la arquitectura Hadoop afectan sobre todo a los dos rastreadores del motor MapReduce, que en Hadoop 2 ya no existen como componentes independientes. El módulo YARN apuesta, en su lugar, por tres entidades nuevas: el resourcemanager o gestor de recursos, el nodemanager o gestor de nodos y el applicationmaster o maestro de aplicaciones.
- Resourcemanager: El gestor global de recursos actúa como la más alta autoridad (maestro) en la arquitectura Hadoop, bajo el cual se alinean diversos nodemanager (esclavos). Tiene la misión de administrar el clúster, orquestar el reparto de los recursos en los nodemanager subordinados y distribuir las aplicaciones. El gestor de recursos sabe en todo momento dónde se encuentran los distintos sistemas esclavo en el clúster y qué recursos se les pueden poner a disposición. Un componente importante del gestor de recursos es el resourcescheduler, que decide cómo se distribuyen los recursos disponibles en el clúster.
- Nodemanager: en cada nodo del clúster trabaja un denominado nodemanager que actúa en la posición de esclavo en la infraestructura de Hadoop 2 recibiendo las órdenes del resourcemanager. Cuando en un nodo se inicia un gestor de nodos, este informa al gestor de recursos y le envía un heartbeat periódico. Cada nodemanager es responsable de los recursos de su nodo y pone una parte de ellos a disposición del clúster. El resourcescheduler del gestor de recursos indica la forma como se han de usar los recursos en el clúster.
- Applicationmaster: en un sistema YARN, cada nodo contiene un applicationmaster que solicita recursos del resourcemanager y del nodemanager y los recibe en forma de contenedores. El maestro de aplicaciones ejecuta y controla las aplicaciones para big data que estos contienen.
Esta imagen muestra una representación esquemática de la arquitectura Hadoop 2:
Cuando se ha de ejecutar una aplicación en Hadoop 2 participan fundamentalmente tres actores:
- Un cliente,
- el resource manager y
- uno o varios node manager
En un primer paso, el cliente ordena al gestor de recursos iniciar una aplicación en el clúster, el cual reserva en consecuencia un contenedor -reserva recursos del clúster para la aplicación- y contacta a un node manager para que inicie el contenedor y ejecute en él un application master, responsable, a su vez, de ejecutar y supervisar la aplicación.
El ecosistema Hadoop: elementos opcionales de ampliación
Junto a los componentes centrales, el ecosistema Hadoop también incluye algunas extensiones desarrolladas en proyectos separados y que contribuyen de forma fundamental a la funcionalidad y la flexibilidad del framework de software. Debido al código abierto y a innumerables interfaces, estos componentes opcionales se pueden combinar a voluntad con las funciones nucleares. En la siguiente lista encuentras una selección de los proyectos más populares del ecosistema Hadoop:
- Ambari:el proyecto Ambari de Apache fue iniciado por el distribuidor de Hadoop Hortoworks y completa el ecosistema con una herramienta de instalación y gestión que agiliza de forma considerable el “aprovisionamiento” (puesta a disposición de recursos informáticos), así como la administración y el seguimiento de componentes Hadoop. Además, también ofrece un asistente step by step para la instalación de servicios Hadoop en un número arbitrario de ordenadores incluidos en el clúster, así como una función de administración con la cual es posible iniciar, interrumpir o configurar sistemas de forma central. Una interfaz de usuario gráfica informa al usuario del estado del sistema. Con el Ambari Metrics System y el Ambari Alert Framework, Ambari permite registrar métricas y configurar niveles de alarma.
- Avro: se trata de un sistema para la serialización de datos. Avro recurre a JSON para definir tipos de datos y protocolos. Los datos se serializan en un formato binario compacto, el cual funciona como formato de transferencia de datos para la comunicación entre los distintos nodos de Hadoop, así como entre los servicios de Hadoop y los programas cliente.
- Cassandra:Apache Cassandra es un sistema distribuido de gestión de bases de datos escrito en Java para grandes colecciones estructuradas de datos que siguen un supuesto no relacional. En este sentido se las denomina también bases de datos NoSQL. El objetivo de este sistema open source, desarrollado en un principio por Facebook, es garantizar una alta escalabilidad y seguridad ante caídas en grandes arquitecturas distribuidas. El depósito de datos se produce sobre la base de relaciones clave-valor.
- HBase: también en este caso se trata de una base de datos NoSQL de código abierto que permite acceso de escritura y de lectura en tiempo real a grandes conjuntos de datos en un clúster de ordenadores. HBase se apoya en BigTable, el sistema de base de datos de alto rendimiento desarrollado por Google. En comparación con otras bases de datos NoSQL, HBase se caracteriza por una alta consistencia de datos.
- Chukwa: en este caso estamos ante un sistema de recolecta y análisis de datos basado en HDFS y MapReduce, que permite el seguimiento en tiempo real y el análisis de datos en grandes sistemas distribuidos. Para ello, Chukwa se construye sobre agentes funcionando en cada uno de los nodos que se han de supervisar, recolectando los archivos de registro de las aplicaciones ejecutadas en él. Estos archivos se envían a los llamados collectors y se almacenan en el HDFS.
- Flume: este es un servicio también concebido para recolectar, agregar y mover archivos de registro. Para transmitir datos de fuentes diferentes al HDFS para su almacenamiento o su análisis, Flume utiliza formatos de transporte como Apache Thrift o Avro.
- Pig: Pig es una plataforma para el análisis de datos ingentes que pone a disposición de los usuarios de Hadoop el lenguaje de programación de alto nivel Pig Latin. Este permite describir el flujo de datos de tareas de MapReduce en un nivel abstracto. De esta forma, las peticiones en el marco de MapReduce ya no se crean en Java sino en el lenguaje Pig Latin, mucho más eficiente, lo que simplifica de forma considerable la administración de tareas en MapReduce. Esto permite, por ejemplo, entender mejor la ejecución paralela de análisis complejos. Pig Latin fue desarrollado inicialmente por Yahoo y el nombre se refiere al supuesto que da sentido al software: como cualquier “omnívoro”, Pig está capacitado para procesar todo tipo de datos, estructurados, no estructurados o relacionales.
- Hive: con Apache Hive, Hadoop se complementa con un denominado almacén de datos o data warehouse, una base de datos central optimizada para realizar análisis. Desarrollado por Facebook, el software se basa en el framework MapReduce. Con HiveQL Hive cuenta con una sintaxis similar a SQL que permite solicitar, agrupar o analizar datos almacenados en el HDFS. Para ello, Hive traduce las peticiones de tipo SQL en tareas de MapReduce automáticamente.
- HCatalog: elemento fundamental de Apache Hive, se trata de un sistema de gestión de metadatos y tablas que permite almacenar y procesar datos independientemente de su formato o estructura. HCatalog describe para ello la estructura de los datos, facilitando de esta manera su utilización con Hive o Pig.
- Mahout: este proyecto extiende el ecosistema Hadoop con bibliotecas Java ampliables para aplicaciones de data mining y aplicaciones matemáticas para el aprendizaje mecánico. Aquellos algoritmos que se pueden implementar con Mahout en Hadoop permiten operaciones como clasificación, clustering y filtrado colaborativo. En la práctica, Mahou se utiliza, por ejemplo, en el desarrollo de servicios de recomendaciones (“Los clientes que compraron este artículo compraron también este otro”).
- Oozie: este componente opcional permite construir cadenas de procesos, automatizarlos y programar su ejecución. De esta forma Oozie compensa el déficit del motor MapReduce propio de Hadoop 1, que no permite generar dependencias entre tareas en la configuración básica.
- Sqoop: Sqoop es un elemento de software que facilita la importación y la exportación de grandes cantidades de datos entre Hadoop y las unidades de memoria estructuradas. Hoy en día las empresas suelen guardar su información en bases de datos relacionales. Sqoop permitiría un intercambio eficaz entre estos sistemas de almacenamiento y el clúster de ordenadores.
- ZooKeeper: por último, este proyecto ofrece servicios para coordinar procesos en el clúster disponiendo funciones de almacenamiento, distribución y actualización de datos de configuración.
Hadoop en la empresa
Este framework disfruta de una gran popularidad en numerosas compañías debido a que con Hadoop se pueden implementar los clústeres para el procesamiento de grandes colecciones de datos con ordenadores estándar. Entre los usuarios más conocidos de Hadoop se encuentran Adobe, AOL, eBay, Facebook, Google, IBM, LinkedIn, Twitter o Yahoo. Además de la posibilidad de almacenar datos en arquitecturas distribuidas sin ninguna dificultad y de procesarlas en paralelo, otras cualidades muy estimadas de este software de código abierto son su estabilidad, sus opciones de ampliación y el gran número de funciones.