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).[1] 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
Información general
Tipo de programa Sistema de archivos distribuido
Autor Doug Cutting
Desarrollador Apache Software Foundation
Lanzamiento inicial 1 de abril de 2006
Licencia Apache License 2.0
Estado actual Activo
Idiomas inglés
Información técnica
Programado en Java
Plataformas admitidas Java
Versiones
Última versión estable 1.0.015 de diciembre de 2011
Enlaces

Hadoop es un proyecto de la organización Apache que está siendo construido y usado por una comunidad global de contribuyentes,[2] mediante el lenguaje de programación Java. Yahoo! ha sido el mayor contribuyente al proyecto,[3] y usa Hadoop extensivamente en su negocio.[4]

Historia

A medida que la World Wide Web creció a finales de los 1900 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,[5] que lo nombró así por el elefante de juguete de su hijo.[6] Fue desarrollado originalmente para apoyar la distribución del proyecto de motor de búsqueda, denominado Nutch.[7]

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.[8]

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.

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[9]), 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.[9] HDFS no proporciona Alta disponibilidad.

Otros sistemas de archivos

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.[10]

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:[11]

  1. Los trabajos se agrupan en pools.
  2. Cada pool tiene asignada una porción mínima garantizada.
  3. 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.[12]

  • 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.

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[13] 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

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.[14]

Aparte de Yahoo!, otras organizaciones usan Hadoop para ejecutar cómputos enormes distribuidos. Algunas de éstas empresas incluyen:[2]

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.[17] 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.[18]

Sun también tiene el proyecto Hadoop Live CD OpenSolaris, que permite ejecutar un clúster Hadoop completamente funcional usando un live CD.[19]

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.

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 son 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.

Referencias

Notas

  1. "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
  2. «Applications and organizations using Hadoop». Archivado desde el original el 29 de noviembre de 2012. Consultado el 16 de febrero de 2011.
  3. «Hadoop Credits Page». Archivado desde el original el 8 de julio de 2009. Consultado el 16 de febrero de 2011.
  4. Yahoo! Launches World's Largest Hadoop Production Application
  5. Hadoop creator goes to Cloudera
  6. Ashlee Vance (17 de marzo de 2009). «Hadoop, a Free Software Program, Finds Uses Beyond Search». New York Times. Consultado el 20 de enero de 2010.
  7. "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 Archivado el 12 de julio de 2009 en Wayback Machine.
  8. https://web.archive.org/web/20090714010337/http://hadoop.apache.org/core/docs/r0.17.2/hdfs_user_guide.html#Rack+Awareness
  9. The Hadoop Distributed File System: Architecture and Design
  10. #HADOOP-3412 Refactor the scheduler out of the JobTracker - ASF JIRA
  11. (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). Hadoop Fair Scheduler Design Document
  12. Capacity Scheduler Guide
  13. "How 30+ enterprises are using Hadoop", in DBMS2
  14. Hadoop and Distributed Computing at Yahoo!
  15. «Mitula Search/Hadoop». Consultado el 6 de septiembre de 2011.
  16. «HBase at StumbleUpon». Archivado desde el original el 13 de agosto de 2010. Consultado el 26 de junio de 2010.
  17. «Creating Hadoop pe under SGE». Sun Microsystems. 16 de enero de 2008. Archivado desde el original el 12 de septiembre de 2008.
  18. «HDFS-Aware Scheduling With Grid Engine». Sun Microsystems. 10 de septiembre de 2009. Archivado desde el original el 5 de julio de 2010.
  19. «OpenSolaris Project: Hadoop Live CD». Sun Microsystems. 29 de agosto de 2008. Archivado desde el original el 22 de octubre de 2009.

20. Cyttek Group http://cyttek.com/consultoria/cyttek-big-data-manager/ (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).

21¿Qué es Hadoop? (s. f.). SAS. Recuperado 23 de mayo de 2022, de https://www.sas.com/es_mx/insights/big-data/hadoop.html

Bibliografía

Enlaces internos

  • Portal:Software libre. Contenido relacionado con Software libre.
  • Nutch - un esfuerzo para construir un motor de búsqueda de código abierto, basado en Lucene y Hadoop. También creado por Doug Cutting.
  • Hortonworks - plataforma libre basada en Hadoop con soporte comercial
  • Cloudera - plataforma libre basada en Hadoop con soporte comercial y aplicaciones de gestión disponibles
  • Datameer Analytics Solution – motor de análisis, visualización e integración de fuentes de datos y almacenamiento
  • HBase - base de datos modelo BigTable
  • IBM - plataforma libre basada en Hadoop con soporte comercial y aplicaciones de gestión y manejo de tecnologías open source.
  • Hypertable - alternativa a HBase
  • MapReduce - algoritmo de filtrado de datos fundamentales Hadoop
  • Apache Mahout - algoritmos de Machine Learning implementados en Hadoop
  • Apache Cassandra - una base de datos orientada a columnas que soporta acceso desde Hadoop
  • Computación en nube
  • Big data
  • Sqoop

Enlaces externos

Este artículo ha sido escrito por Wikipedia. El texto está disponible bajo la licencia Creative Commons - Atribución - CompartirIgual. Pueden aplicarse cláusulas adicionales a los archivos multimedia.