Apache Hadoop es un entorno de trabajo para software, bajo licencia libre, para programar aplicaciones distribuidas que manejen grandes volúmenes de datos (big data)."Hadoop es un framework que ejecuta aplicaciones en grandes clusters de hardware dedicado. El framework proporciona a las aplicaciones de forma transparente fiabilidad y movilidad de datos. Hadoop implementa un paradigma computacional llamado map/reduce, donde la aplicación se divide en muchos pequeños fragmentos de trabajo, cada uno de los cuales se pueden ejecutar o volver a ejecutar en cualquier nodo del clúster. Además, proporciona un sistema de archivos distribuido que almacena los datos en los nodos de cómputo, produciendo un alto ancho de banda agregado en todo el clúster. Ambos, map/reduce y el sistema de archivos distribuidos, están diseñados de manera que las fallas de nodo se gestionan automáticamente mediante el framework." Hadoop Overview Permite a las aplicaciones trabajar con miles de nodos en red y petabytes de datos. Hadoop se inspiró en los documentos de Google sobre MapReduce y Google File System (GFS).
Apache Hadoop es un entorno de trabajo de software de código abierto que permite el procesamiento y análisis distribuido de grandes volúmenes de datos. Hadoop se ha convertido en un proyecto colaborativo dentro de la comunidad de desarrollo de Apache, con Yahoo! destacando como uno de los mayores contribuyentes y usuarios de esta tecnología.
Historia A medida que la World Wide Web creció a finales de los 1990 y principios de los 2000, se crearon buscadores (o motores de búsqueda) e índices para ayudar a localizar información relevante dentro de contenido basado en texto. En sus primeros años, los resultados de las búsquedas eran entregados por humanos. Pero a medida que la Web creció de docenas a millones de páginas, se requirió de la automatización. Se crearon los rastreadores Web, muchos como proyectos dirigidos por universidades, y entonces se iniciaron las primeras compañías de buscadores (Yahoo, AltaVista, etc.).
Uno de estos proyectos fue un buscador Web de código abierto llamado Nutch – idea original de Doug Cutting y Mike Cafarella. Deseaban generar resultados de búsquedas en la Web a mayor velocidad distribuyendo datos y cálculos en diferentes computadoras de modo que se pudieran procesar múltiples tareas de manera simultánea. Durante este tiempo, estaba en progreso otro proyecto de buscador llamado Google. Éste se basaba en el mismo concepto –almacenar y procesar datos de manera distribuida y automatizada de modo que se pudieran generar resultados de búsquedas en la Web a mayor velocidad.
En 2006, Cutting se unió a Yahoo y se llevó con él el proyecto Nutch, así como también ideas basadas en los trabajos iniciales de Google con la automatización del almacenaje y procesamiento de datos distribuidos. El proyecto Nutch fue dividido – la parte del rastreador Web se mantuvo como Nutch y la parte de cómputo y procesamiento distribuido se convirtió en Hadoop.
En 2008, Yahoo presentó Hadoop como proyecto de código abierto. Hoy día, la estructura y el ecosistema de tecnologías de Hadoop son gestionados y mantenidos por la Apache Software Foundation (ASF) sin fines de lucro, que es una comunidad global de programadores de software y otros contribuyentes. Foundation (ASF) puso Hadoop a disposición del público en noviembre de 2012 como Apache Hadoop.
Hadoop fue creado por Doug Cutting,Hadoop creator goes to Cloudera que lo nombró así por el elefante de juguete de su hijo. Fue desarrollado originalmente para apoyar la distribución del proyecto de motor de búsqueda, denominado Nutch."Hadoop contains the distributed computing platform that was formerly a part of Nutch. This includes the Hadoop Distributed Filesystem (HDFS) and an implementation of map/reduce." About Hadoop
Características Arquitectura Hadoop consiste básicamente en el Hadoop Common, que proporciona acceso a los sistemas de archivos soportados por Hadoop. El paquete de software The Hadoop Common contiene los archivos .jar y los scripts necesarios para ejecutar Hadoop. El paquete también proporciona código fuente, documentación, y una sección de contribución que incluye proyectos de la Comunidad Hadoop.
Una funcionalidad clave es que para la programación efectiva de trabajo, cada sistema de archivos debe conocer y proporcionar su ubicación: el nombre del rack (más precisamente, del switch) donde está el nodo trabajador. Las aplicaciones Hadoop pueden usar esta información para ejecutar trabajo en el nodo donde están los datos y, en su defecto, en el mismo rack/switch, reduciendo así el tráfico de red troncal (backbone traffic). El sistema de archivos HDFS usa esto cuando replica datos, para intentar conservar copias diferentes de los datos en racks diferentes. El objetivo es reducir el impacto de un corte de energía de rack o de fallo de interruptor de modo que incluso si se producen estos eventos, los datos todavía puedan ser legibles.https://web.archive.org/web/20090714010337/http://hadoop.apache.org/core/docs/r0.17.2/hdfs_user_guide.html#Rack+Awareness
Un clúster típico Hadoop incluye un nodo maestro y múltiples nodos esclavo. El nodo maestro consiste en jobtracker (rastreador de trabajo), tasktracker (rastreador de tareas), namenode (nodo de nombres), y datanode (nodo de datos). Un esclavo o compute node (nodo de cómputo) consisten en un nodo de datos y un rastreador de tareas. Hadoop requiere tener instalados entre nodos en el clúster JRE 1.6 o superior, y SSH.
Framework La estructura básica de Hadoop consta de cuatro módulos que juntos forman el ecosistema de Hadoop: HDFS: Es una parte central del ecosistema Hadoop. Este sistema de archivos distribuido proporciona un acceso de alto rendimiento a los datos de la aplicación sin necesidad de definir primero los esquemas. YARN: Esta plataforma gestiona los recursos informáticos del grupo y los utiliza para organizar las aplicaciones de los usuarios. Es responsable de organizar y distribuir recursos para todo el sistema Hadoop. MapReduce: Este modelo de diseño le permite procesar datos a gran escala. Utiliza algoritmos informáticos paralelos y distribuidos para automatizar la lógica de procesamiento y facilitar la creación de aplicaciones que transforman grandes conjuntos de datos en un solo conjunto de datos fácil de usar. Hadoop común: Incluye bibliotecas y herramientas utilizadas y compartidas por otros módulos de Hadoop.
Sistemas de archivos Hadoop Distributed File System El Hadoop Distributed File System (HDFS) es un sistema de archivos distribuido, escalable y portátil escrito en Java para el framework Hadoop. Cada nodo en una instancia Hadoop típicamente tiene un único nodo de datos; un clúster de datos forma el clúster HDFS. La situación es típica porque cada nodo no requiere un nodo de datos para estar presente. Cada nodo sirve bloques de datos sobre la red usando un protocolo de bloqueo específico para HDFS. El sistema de archivos usa la capa TCP/IP para la comunicación; los clientes usan RPC para comunicarse entre ellos. El HDFS almacena archivos grandes (el tamaño ideal de archivo es de 128 MBThe Hadoop Distributed File System: Architecture and Design), a través de múltiples máquinas. Consigue fiabilidad mediante replicado de datos a través de múltiples hosts, y no requiere almacenamiento RAID en ellos. Con el valor de replicación por defecto, 3, los datos se almacenan en 3 nodos: dos en el mismo rack, y otro en un rack distinto. Los nodos de datos pueden hablar entre ellos para reequilibrar datos, mover copias, y conservar alta la replicación de datos. HDFS no cumple totalmente con POSIX porque los requerimientos de un sistema de archivos POSIX difieren de los objetivos de una aplicación Hadoop, porque el objetivo no es tanto cumplir los estándares POSIX sino la máxima eficacia y rendimiento de datos. HDFS fue diseñado para gestionar archivos muy grandes. HDFS no proporciona Alta disponibilidad.
Sistemas de archivos soportados A junio de 2010, la lista de sistemas de archivos soportados incluye: HDFS: El sistema propio de Hadoop. Está diseñado para la escala de decenas petabytes de almacenamiento y funciona sobre los sistemas de archivos de base. Amazon S3: se dirige a clusters almacenados en la infraestructura del servidor bajo demanda Amazon Elastic Compute Cloud. No hay conciencia de racks en este sistema de archivos, porque todo él es remoto. CloudStore: (previamente llamado Kosmos Distributed File System), el cual es consciente de los racks. FTP: almacena todos sus datos en un servidor FTP accessible remotamente. HTTP y HTTPS de solo lectura.
Hadoop puede trabajar directamente con cualquier sistema de archivos distribuido, el cual puede ser montado por el sistema operativo subyacente simplemente usando la URL file://, sin embargo esto tiene un precio: la pérdida de la localidad. Para reducir el tráfico de red, Hadoop necesita saber qué servidores están más próximos a los datos; esta información la pueden proporcionar los puentes específicos del sistema de archivos específico de Hadoop.
La configuración por defecto incluye Amazon S3, y el almacén de archivos CloudStore, a través de las URLs s3:// y kfs://.
Se han escrito varios puentes de sistema de archivos de terceros, ninguno de los cuales están actualmente en las distribuciones de Hadoop. Estas pueden ser más de propósito general que HDFS, el cual está muy sesgado hacia grandes archivos y solo ofrece un subconjunto de la semántica esperada de sistema de archivos Posix Filesystem: no se puede bloquear o escribir en cualquier parte salvo la cola de un archivo. Apache Hadoop YARN (Yet Another Resource Negotiator)
YARN (Yet Another Resource Negotiator) representa la evolución arquitectónica que transformó a Hadoop de un motor de procesamiento por lotes monolítico a una plataforma de computación distribuida de propósito general. Introducido en Hadoop 2.0, YARN asume la responsabilidad de la gestión de los recursos del clúster, desacoplándola del modelo de programación MapReduce.
Motivación y Desacoplamiento
En la versión original de Hadoop (Hadoop 1.x), un único servicio llamado JobTracker era responsable tanto de la gestión de recursos (asignar tareas a nodos) como de la coordinación de los trabajos (monitorear el progreso, reiniciar tareas fallidas). Esta arquitectura presentaba serias limitaciones de escalabilidad, ya que el JobTracker se convertía en un cuello de botella en clústeres grandes (más de 4,000 nodos). Además, restringía el clúster a ejecutar únicamente trabajos MapReduce.
YARN resuelve esto separando estas dos preocupaciones principales en demonios distintos: un gestor de recursos global y gestores de aplicaciones específicos por trabajo. Esto permite que múltiples motores de procesamiento —como MapReduce, Apache Spark, Apache Tez, y motores de procesamiento de grafos o streaming— coexistan en el mismo clúster, compartiendo recursos de manera dinámica y eficiente.
Arquitectura de Componentes de YARN
La arquitectura de YARN se basa en tres componentes principales que interactúan para gestionar el ciclo de vida de las aplicaciones: el ResourceManager, el NodeManager y el ApplicationMaster.
ResourceManager (RM)
El ResourceManager es la autoridad suprema que arbitra los recursos entre todas las aplicaciones en el sistema. Es un servicio global (uno por clúster) y tiene dos componentes principales: