# Apache Hadoop

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). 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, 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.

## 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.
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 MB), 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.

### Job Tracker y Task Tracker: el motor MapReduce

Aparte del sistema de archivos, está el motor MapReduce, que consiste en un Job Tracker (rastreador de trabajos), para el cual las aplicaciones cliente envían trabajos MapReduce.
El rastreador de trabajos (Job Tracker) impulsa el trabajo fuera a los nodos Task Tracker disponibles en el clúster, intentando mantener el trabajo tan cerca de los datos como sea posible. Con un sistema de archivos consciente del rack en el que se encuentran los datos, el Job Tracker sabe qué nodo contiene la información, y que otras máquinas están cerca. Si el trabajo no puede ser almacenado en el nodo actual donde residen los datos, se da la prioridad a los nodos del mismo rack. Esto reduce el tráfico de red en la red principal backbone. Si un Task Tracker (rastreador de tareas) falla o no llega a tiempo, la parte de trabajo se reprograma. El TaskTracker en cada nodo genera un proceso separado JVM para evitar que el propio TaskTracker mismo falle si el trabajo en cuestión tiene problemas. Se envía información desde el TaskTracker al JobTracker cada pocos minutos para comprobar su estado. El estado del Job Tracker y el TaskTracker y la información obtenida se pueden ver desde un navegador web proporcionado por Jetty.
Si el Job Tracker fallaba en Hadoop 0.20 o anterior, todo el trabajo en curso se perdía. Hadoop versión 0.21 añadió algunos autoguardados al proceso; el rastreador de trabajo graba lo que está en el sistema de archivos. Cuando un Job Tracker comienza, busca datos para recomenzar el trabajo donde lo dejó. En versiones anteriores, todo el trabajo activo se perdía cuando se reiniciaba el Job Tracker.
Las limitaciones de esto son:
* La asignación de trabajo de los seguidores de trabajo es muy sencilla. Cada rastreador de tarea tiene un número de plazas disponibles, llamadas ranuras o slots (por ejemplo, "4 slots"). Cada mapa activo o cada “reduce” toma (ocupa) una posición. El Rastreador de Trabajo asigna trabajo para el seguidor más cercano a los datos con una ranura disponible. No hay ninguna consideración de la carga activa actual de la máquina asignada, y por tanto de su disponibilidad real.
* Si una tarea de seguimiento es muy lenta, se puede retrasar toda la operación MapReduce -especialmente hacia el final de un trabajo, donde todo puede estar a la espera de una sola tarea lenta-. Con la ejecución especulativa activada, sin embargo, una tarea simple puede ejecutarse en múltiples nodos esclavos. Así que esta tecnología permite una conexión en red muy eficiente.

#### Programación de tiempo

Por defecto Hadoop usa el método FIFO para programar la realización de trabajos desde una cola de trabajo. En la versión 0.19 el job scheduler (programador de trabajos) fue refactorizado fuera de Hadoop, lo cual añadió la habilidad de usar un programador alternativo.

##### Planificador justo

El fair scheduler (planificador justo o limpio) fue desarrollado por Facebook. El objetivo del planificador es proporcionar rápida respuesta para trabajos pequeños y calidad de servicio (QOS, en sus siglas en inglés) para trabajos de producción. El fair scheduler se basa en 3 conceptos básicos:
* Los trabajos se agrupan en pools.
* Cada pool tiene asignada una porción mínima garantizada.
* El exceso de capacidad se distribuye entre trabajos.
Por defecto, los trabajos que están sin categorizar van a un pool por defecto. Las pools tienen que especificar el n.º mínimo de slots de mapa, los reduce slots, y un límite en el número de trabajos ejecutándose.

##### Programador de capacidad

El programador de capacidad fue desarrollado por Yahoo. Soporta varias funciones similares a las del fair scheduler.
* Los trabajos son presentados en las colas.
* A las colas se le asigna una fracción de la capacidad total de recursos.
* Los recursos libres se asignan a las colas más allá de su capacidad total.
* Dentro de una cola, un trabajo con un alto nivel de prioridad tendrá acceso a los recursos de la cola.
No es posible la expropiación de recursos cuando se está ejecutando un trabajo.

### Uso de Hadoop en Apache

Dentro de los proyectos de Apache, Hadoop es un gran sustento en dichos proyectos. algunos de estos proyectos de Apache:

#### Apache Ambari

El proyecto Apache Ambari tiene como objetivo simplificar la administración de Hadoop mediante el desarrollo de software para el aprovisionamiento, la administración y el monitoreo de clústeres de Apache Hadoop. Ambari proporciona una interfaz de usuario web de administración de Hadoop intuitiva y fácil de usar respaldada por sus API RESTful.

### Aplicaciones de Hadoop en la medicina de precisión

La medicina de precisión es un enfoque médico que utiliza información genómica y otros datos de salud personalizados para ofrecer diagnósticos más precisos y tratamientos personalizados. Un nuevo y emocionante campo de aplicación para Hadoop es su uso en la medicina de precisión, donde puede ayudar a procesar y analizar grandes conjuntos de datos genómicos y clínicos. Procesamiento eficiente de datos genómicos: Explica cómo Hadoop se utiliza para procesar y analizar secuencias genómicas completas y variantes genéticas en grandes conjuntos de pacientes. Destaca su capacidad para realizar cálculos paralelos y distribuidos, lo que permite una mayor velocidad y escalabilidad en el análisis de datos genómicos.
Integración de datos clínicos y genómicos: Describe cómo Hadoop se utiliza para integrar datos clínicos y genómicos de diferentes fuentes, como registros médicos electrónicos y bancos de datos genómicos. Muestra cómo esta integración permite un análisis más completo y una comprensión más profunda de las relaciones entre los factores genéticos y las enfermedades.
Análisis de datos a gran escala: Explica cómo Hadoop permite el análisis de grandes conjuntos de datos genómicos y clínicos, lo que facilita la identificación de patrones, marcadores genéticos y asociaciones de enfermedades. Destaca cómo el procesamiento distribuido y paralelo de Hadoop acelera el descubrimiento de información relevante y mejora la precisión de los análisis.
Privacidad y seguridad de los datos: Menciona cómo Hadoop se utiliza para abordar los desafíos de privacidad y seguridad en el contexto de la medicina de precisión. Destaca las técnicas de anonimización de datos y control de acceso que se pueden implementar en un entorno de Hadoop para proteger la confidencialidad de los datos sensibles de los pacientes.

#### Apache Cassandra

Apache Cassandra es una base de datos distribuida NoSQL de código abierto en la que confían miles de empresas para la escalabilidad y la alta disponibilidad sin comprometer el rendimiento. La escalabilidad lineal y la tolerancia a fallos comprobada en hardware básico o infraestructura en la nube lo convierten en la plataforma perfecta para datos de misión crítica.

#### Apache Ozone

Apache Ozone es un almacenamiento distribuido altamente escalable para aplicaciones analytics, big data y cloud native. Ozone admite API de objetos compatibles con S3, así como una implementación de sistema de archivos compatible con Hadoop. Está optimizado tanto para operaciones eficientes de almacenamiento de objetos como de sistema de archivos.
Se basa en una capa de almacenamiento en bloque replicada de alta disponibilidad llamada Hadoop Distributed Data Store (HDDS).
Apache Spark
Apache Spark es un motor multilingüe para ejecutar ingeniería de datos, ciencia de datos y aprendizaje automático en máquinas o clústeres de un solo nodo.

#### ZooKeeper

ZooKeeper es un servicio centralizado para mantener la información de configuración, nombrar, brindar sincronización distribuida y brindar servicios grupales. Todos estos tipos de servicios son utilizados de una forma u otra por aplicaciones distribuidas.

### Otras aplicaciones

El sistema de archivos HDFS no se restringe a MapReduce jobs. Puede usarse para otras aplicaciones, muchas de las cuales están bajo desarrollo en Apache. La lista incluye la base de datos HBase, el sistema de aprendizaje automático Apache Mahout, y operaciones de matriz. Hadoop puede usarse en teoría para cualquier tipo de trabajo orientado a lotes, en lugar de tiempo real, el cual es muy intensivo en datos, y ser capaz de trabajar en piezas de datos en paralelo. En octubre de 2009, entre las aplicaciones comerciales de Hadoop se incluían:
* Registro y/o análisis de fuentes de clics (clickstream) de varios tipos
* Analíticas de marketing
* Aprendizaje automático y/o extracción de datos sofisticados (data mining)
* Procesamiento de imágenes
* El tratamiento de mensajes XML
* Web de rastreo y/o procesamiento de textos
* Archivado general, incluidos los relacionales y datos tabulares, por ejemplo, para cumplimiento

### Diferencia entre Hadoop 1 y Hadoop 2 (YARN)

La mayor diferencia entre Hadoop 1 y Hadoop 2 es la adición de YARN (Yet Another Resource Negotiator), que reemplazó al motor MapReduce en la primera versión de Hadoop. YARN se esfuerza por asignar recursos a varias aplicaciones de manera efectiva. Ejecuta dos demonios, que se encargan de dos tareas diferentes: el administrador de recursos, que realiza el seguimiento de trabajos y la asignación de recursos a las aplicaciones, el maestro de aplicaciones, que supervisa el progreso de la ejecución.

### Diferencia entre Hadoop 2 y Hadoop 3

Hay funciones importantes proporcionadas por Hadoop 3. Por ejemplo, mientras que hay un solo nodo de nombre en Hadoop 2, Hadoop 3 permite tener múltiples nodos de nombre, lo que resuelve el problema del punto único de falla.
En Hadoop 3, hay contenedores que funcionan según el principio de Docker, lo que reduce el tiempo dedicado al desarrollo de aplicaciones.
Uno de los mayores cambios es que Hadoop 3 reduce la sobrecarga de almacenamiento con la codificación de borrado.
Además, Hadoop 3 permite el uso de hardware de GPU dentro del clúster, lo que es un beneficio muy importante para ejecutar algoritmos de aprendizaje profundo en un clúster de Hadoop.

## Usuarios prominentes

El 19 de febrero de 2008, Yahoo! Inc. lanzó lo que pretendía era la más grande aplicación de producción Hadoop. El Yahoo! Search Webmap es una aplicación de Hadoop que se ejecuta en más de 10 000 núcleos Linux Clusters de racimo y produce datos que se utilizan actualmente en todos los resultados de búsqueda de Yahoo!. En junio de 2009, Yahoo! hizo disponible el código fuente de la versión de Hadoop que usa en producción.
Aparte de Yahoo!, otras organizaciones usan Hadoop para ejecutar cómputos enormes distribuidos. Algunas de éstas empresas incluyen:
* A9.com
* AOL
* Booz Allen Hamilton
* EHarmony
* eBay
* Facebook
* Fox Interactive Media
* Freebase
* IBM
* ImageShack
* ISI
* Joost
* Last.fm
* LinkedIn
* Meebo
* Metaweb
* Mitula
* The New York Times
* Ning
* Powerset (ahora parte de Microsoft)
* Rackspace
* StumbleUpon
* Tuenti
* Twitter
* Veoh
* Zoosk
* 1&1
* MercadoLibre

## Con Sun Grid Engine y Nutanix

Hadoop puede usarse también en granjas de computadoras y entornos de alto rendimiento. La integración con Sun Grid Engine fue lanzada, y ejecutar Hadoop en Sun Grid (el servicio bajo demanda de utility computing) es posible. En la implementación inicial de la integración, el programador de tiempo de CPU no sabe la localización de los datos. Desafortunadamente, esto significa que el procesado no es hecho siempre en el mismo rack donde están los datos; esto era una característica principal de la Rutin Hadoop. Una mejor integración con localización de datos se anunció durante la Sun HPC Software Workshop '09.
Sun también tiene el proyecto Hadoop Live CD OpenSolaris, que permite ejecutar un clúster Hadoop completamente funcional usando un live CD.
Por su parte, la tecnología de Nutanix, también es capaz de soportar plataformas Hadoop, aportando las grandes ventajas de su arquitectura (redundancia, rendimientos, enorme facilidad de gestión, etc), sin las dependencias de storage habituales en estas infraestructuras Cloud.

## IoT y Hadoop

Las cosas en IoT necesitan saber qué comunicar y cuándo actuar. En el centro de IoT hay un torrente de datos en transición siempre activo. Hadoop se utiliza a menudo como el almacén de datos de millones o miles de millones de transacciones. Las capacidades masivas de almacenaje y procesamiento le permiten también usar Hadoop como caja de arena para el descubrimiento y la definición de patrones cuya instrucción prescriptiva deberá ser monitoreada. Luego puede mejorar continuamente estas instrucciones, ya que Hadoop se actualiza de manera constante con nuevos datos que no concuerdan con patrones definidos con anterioridad.

## Beneficios

* Capacidad de almacenar y procesar enormes cantidades de cualquier tipo de datos, al instante. Con el incremento constante de los volúmenes y variedades de datos, en especial provenientes de medios sociales y la Internet de las Cosas (IoT), ésa es una consideración importante.
* Poder de cómputo. El modelo de cómputo distribuido de Hadoop procesa big data a gran velocidad. Cuantos más nodos de cómputo utiliza usted, mayor poder de procesamiento tiene.
* Tolerancia a fallos. El procesamiento de datos y aplicaciones está protegido contra fallos del hardware. Si falla un nodo, los trabajos son redirigidos automáticamente a otros modos para asegurarse de que no falle el procesamiento distribuido. Se almacenan múltiples copias de todos los datos de manera automática.
* Flexibilidad. A diferencia de las bases de datos relacionales, no tiene que procesar previamente los datos antes de almacenarlos. Puede almacenar tantos datos como desee y decidir cómo utilizarlos más tarde. Eso incluye datos no estructurados como texto, imágenes y videos.
* Bajo costo. La estructura de código abierto es gratuita y emplea hardware comercial para almacenar grandes cantidades de datos.
* Escalabilidad. Puede hacer crecer fácilmente su sistema para que procese más datos con sólo agregar nodos. Se requiere poca administración

## Limitantes

* La programación MapReduce no es una opción adecuada para todos los problemas. stepEs adecuada para simples solicitudes de información y problemas que se pueden dividir en unidades independientes, pero no es eficiente para realizar tareas analíticas iterativas e interactivas.
* Existe una brecha de talento ampliamente reconocida. Puede ser difícil conseguir programadores principiantes con suficientes conocimientos de Java para que sean productivos con MapReduce. Ésta es una razón por la que los proveedores de distribución se apresuran para colocar tecnología relacional (SQL) sobre Hadoop.
* Seguridad de datos. Otro reto se centra alrededor de aspectos de seguridad de datos fragmentados, aunque están surgiendo nuevas herramientas y tecnologías. El protocolo de autenticación Kerberos es un paso importante para volver seguros los entornos Hadoop.
* Gestión y gobierno de datos completo. Hadoop no tiene herramientas fáciles de usar y repletas de características para la gestión de datos, depuración de datos.