Hadoop

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Apache Hadoop
Hadoop logo.svg
Desarrollador
Apache Software Foundation
http://hadoop.apache.org/
Información general
Género Sistema de archivos distribuido
Programado en Java
Sistema operativo Multiplataforma
Plataforma Java
Licencia Apache License 2.0
Estado actual Activo
Idiomas inglés
En español No No
[editar datos en Wikidata ]

Apache Hadoop es un framework de software que soporta aplicaciones distribuidas bajo una licencia libre.[1] Permite a las aplicaciones trabajar con miles de nodos y petabytes de datos. Hadoop se inspiró en los documentos Google para MapReduce y Google File System (GFS).

Hadoop es un proyecto de alto nivel 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[editar]

Hadoop fue creado por Doug Cutting,[5] que lo nombró así por su elefante de juguete.[6] Fue desarrollado originalmente para apoyar la distribución del proyecto de motor de búsqueda, denominado Nutch.[7]

Características[editar]

Arquitectura[editar]

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 hacer correr 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.

Sistemas de archivos[editar]

Hadoop Distributed File System[editar]

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 64 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[editar]

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. Éste 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 es todo él remoto.
  • CloudStore (previamente llamado Kosmos Distributed File System), el cual es consciente de los racks.
  • FTP: éste 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.

Fuera de caja, esto incluye Amazon S3, y el almacén de archivos CloudStore, a través de las URLs s3:// y kfs://.

Varios puentes de sistema de archivos de terceros han sido escritos, ninguno de los cuales están actualmente en las distribuciones de Hadoop. Éstas 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[editar]

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 cuáles 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[editar]

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]

Programador justo[editar]

El fair scheduler (programador justo o limpio) fue desarrollado por Facebook. El objetivo del programador 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[editar]

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

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

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 restultados 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[editar]

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

Referencias[editar]

Notas[editar]

  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. a b Applications and organizations using Hadoop
  3. Hadoop Credits Page
  4. Yahoo! Launches World's Largest Hadoop Production Application
  5. Hadoop creator goes to Cloudera
  6. Ashlee Vance (17-03-2009). «Hadoop, a Free Software Program, Finds Uses Beyond Search». New York Times. Consultado el 20-01-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
  8. http://hadoop.apache.org/core/docs/r0.17.2/hdfs_user_guide.html#Rack+Awareness
  9. a b The Hadoop Distributed File System: Architecture and Design
  10. [1] #HADOOP-3412 Refactor the scheduler out of the JobTracker - ASF JIRA
  11. [2] Hadoop Fair Scheduler Design Document
  12. [3] 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 06-09-2011.
  16. «HBase at StumbleUpon». Consultado el 26-06-2010.
  17. «Creating Hadoop pe under SGE». Sun Microsystems (16-01-2008).
  18. «HDFS-Aware Scheduling With Grid Engine». Sun Microsystems (10-09-2009).
  19. «OpenSolaris Project: Hadoop Live CD». Sun Microsystems (29-08-2008).

20. Cyttek Group http://cyttek.com/consultoria/cyttek-big-data-manager/

Bibliografía[editar]

Véase también[editar]

Enlaces internos[editar]

  • Ver el portal sobre Software libre 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.
  • 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
  • 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

Enlaces externos[editar]