Apache Hadoop ( / h ə ˈ d uː p / ) es una colección de utilidades de software de código abierto que facilita el uso de una red de muchas computadoras para resolver problemas que involucran cantidades masivas de datos y cálculos. [ vago ] Proporciona un marco de software para el almacenamiento distribuido y el procesamiento de grandes cantidades de datos utilizando el modelo de programación MapReduce . Hadoop fue diseñado originalmente para clústeres de computadoras construidos a partir de hardware básico , que todavía es el uso común. [3] Desde entonces, también se ha utilizado en clústeres de hardware de gama alta. [4] [5] Todos los módulos en Hadoop están diseñados con el supuesto fundamental de que las fallas de hardware son ocurrencias comunes y deben ser manejadas automáticamente por el marco. [6]
El núcleo de Apache Hadoop consta de una parte de almacenamiento, conocida como Hadoop Distributed File System (HDFS), y una parte de procesamiento que es un modelo de programación MapReduce. Hadoop divide los archivos en grandes bloques y los distribuye entre los nodos de un clúster. Luego transfiere el código empaquetado a los nodos para procesar los datos en paralelo. Este enfoque aprovecha la localidad de datos , [7] donde los nodos manipulan los datos a los que tienen acceso. Esto permite que el conjunto de datos se procese más rápido y de manera más eficiente de lo que sería en una arquitectura de supercomputadora más convencional que se basa en un sistema de archivos paralelo donde el cálculo y los datos se distribuyen a través de redes de alta velocidad. [8] [9]
El marco base de Apache Hadoop se compone de los siguientes módulos:
El término Hadoop se utiliza a menudo tanto para los módulos base y submódulos como para el ecosistema , [12] o la colección de paquetes de software adicionales que se pueden instalar encima o junto con Hadoop, como Apache Pig , Apache Hive , Apache HBase , Apache Phoenix , Apache Spark , Apache ZooKeeper , Apache Impala , Apache Flume , Apache Sqoop , Apache Oozie y Apache Storm . [13]
Los componentes MapReduce y HDFS de Apache Hadoop se inspiraron en los documentos de Google sobre MapReduce y Google File System . [14]
El marco de Hadoop en sí está escrito principalmente en el lenguaje de programación Java , con algo de código nativo en C y utilidades de línea de comandos escritas como scripts de shell . Aunque el código Java de MapReduce es común, se puede usar cualquier lenguaje de programación con Hadoop Streaming para implementar las partes de map y reduce del programa del usuario. [15] Otros proyectos en el ecosistema Hadoop exponen interfaces de usuario más ricas.
Según sus cofundadores, Doug Cutting y Mike Cafarella , el origen de Hadoop fue el documento Google File System que se publicó en octubre de 2003. [16] [17] Este documento generó otro de Google: "MapReduce: procesamiento de datos simplificado en grandes clústeres". [18] El desarrollo comenzó en el proyecto Apache Nutch , pero se trasladó al nuevo subproyecto Hadoop en enero de 2006. [19] Doug Cutting, que trabajaba en Yahoo! en ese momento, lo nombró en honor al elefante de juguete de su hijo. [20] El código inicial que se extrajo de Nutch consistió en aproximadamente 5000 líneas de código para HDFS y aproximadamente 6000 líneas de código para MapReduce.
En marzo de 2006, Owen O'Malley fue el primer colaborador en sumarse al proyecto Hadoop; [21] Hadoop 0.1.0 se lanzó en abril de 2006. [22] Sigue evolucionando a través de las contribuciones que se realizan al proyecto. [23] El primer documento de diseño para el sistema de archivos distribuidos Hadoop fue escrito por Dhruba Borthakur en 2007. [24]
Hadoop consta del paquete Hadoop Common , que proporciona abstracciones a nivel de sistema operativo y de sistema de archivos, un motor MapReduce (MapReduce/MR1 o YARN/MR2) [32] y el sistema de archivos distribuido Hadoop (HDFS). El paquete Hadoop Common contiene los archivos Java Archive (JAR) y los scripts necesarios para iniciar Hadoop.
Para una programación eficaz del trabajo, todos los sistemas de archivos compatibles con Hadoop deben proporcionar información sobre la ubicación, que es el nombre del bastidor, específicamente el conmutador de red donde se encuentra un nodo de trabajo. Las aplicaciones de Hadoop pueden utilizar esta información para ejecutar código en el nodo donde se encuentran los datos y, en su defecto, en el mismo bastidor o conmutador para reducir el tráfico de la red troncal. HDFS utiliza este método al replicar datos para lograr redundancia de datos en varios bastidores. Este enfoque reduce el impacto de un corte de energía en el bastidor o una falla del conmutador; si ocurre cualquiera de estas fallas de hardware, los datos permanecerán disponibles. [33]
Un clúster Hadoop pequeño incluye un nodo maestro y varios nodos de trabajo. El nodo maestro consta de un rastreador de tareas, un rastreador de trabajos, un nodo de nombres y un nodo de datos. Un nodo esclavo o de trabajo actúa como un nodo de datos y un rastreador de tareas, aunque es posible tener nodos de trabajo solo de datos y solo de cómputo. Estos normalmente se utilizan solo en aplicaciones no estándar. [34]
Hadoop requiere Java Runtime Environment (JRE) 1.6 o superior. Los scripts de inicio y apagado estándar requieren que se configure Secure Shell (SSH) entre los nodos del clúster. [35]
En un clúster más grande, los nodos HDFS se administran a través de un servidor NameNode dedicado para alojar el índice del sistema de archivos y un NameNode secundario que puede generar instantáneas de las estructuras de memoria del namenode, lo que evita la corrupción del sistema de archivos y la pérdida de datos. De manera similar, un servidor JobTracker independiente puede administrar la programación de trabajos en todos los nodos. Cuando se utiliza Hadoop MapReduce con un sistema de archivos alternativo, la arquitectura NameNode, NameNode secundario y DataNode de HDFS se reemplazan por los equivalentes específicos del sistema de archivos.
El sistema de archivos distribuido Hadoop (HDFS) es un sistema de archivos distribuido, escalable y portátil escrito en Java para el marco de Hadoop. Algunos lo consideran un almacén de datos debido a su falta de compatibilidad con POSIX , [36] pero sí proporciona comandos de shell y métodos de interfaz de programación de aplicaciones (API) Java que son similares a otros sistemas de archivos. [37] Una instancia de Hadoop se divide en HDFS y MapReduce. HDFS se utiliza para almacenar los datos y MapReduce se utiliza para procesarlos. HDFS tiene cinco servicios, a saber:
Los tres primeros son servicios maestros/daemons/nodos y los dos últimos son servicios esclavos. Los servicios maestros pueden comunicarse entre sí y, de la misma manera, los servicios esclavos pueden comunicarse entre sí. El nodo de nombre es un nodo maestro y el nodo de datos es su nodo esclavo correspondiente y pueden comunicarse entre sí.
Nodo de nombre: HDFS consta de un solo nodo de nombre, denominado nodo maestro. El nodo maestro puede realizar un seguimiento de los archivos, administrar el sistema de archivos y tiene los metadatos de todos los datos almacenados en él. En particular, el nodo de nombre contiene los detalles de la cantidad de bloques, las ubicaciones del nodo de datos en el que se almacenan los datos, dónde se almacenan las réplicas y otros detalles. El nodo de nombre tiene contacto directo con el cliente.
Nodo de datos: un nodo de datos almacena datos en él como bloques. También se lo conoce como nodo esclavo y almacena los datos reales en HDFS, que es responsable de que el cliente los lea y escriba. Estos son daemons esclavos. Cada nodo de datos envía un mensaje de latido al nodo de nombre cada 3 segundos y transmite que está activo. De esta manera, cuando el nodo de nombre no recibe un latido de un nodo de datos durante 2 minutos, considerará que ese nodo de datos está inactivo e iniciará el proceso de replicaciones de bloques en algún otro nodo de datos.
Nodo de nombre secundario: este solo se encarga de los puntos de control de los metadatos del sistema de archivos que se encuentran en el nodo de nombre. También se lo conoce como nodo de punto de control. Es el nodo auxiliar del nodo de nombre. El nodo de nombre secundario le indica al nodo de nombre que cree y envíe el archivo fsimage y editlog, sobre el cual el nodo de nombre secundario crea el archivo fsimage compactado. [38]
Rastreador de trabajos: el rastreador de trabajos recibe las solicitudes de ejecución de Map Reduce del cliente. El rastreador de trabajos se comunica con el nodo de nombre para conocer la ubicación de los datos que se utilizarán en el procesamiento. El nodo de nombre responde con los metadatos de los datos de procesamiento necesarios.
Rastreador de tareas: es el nodo esclavo del rastreador de tareas y tomará la tarea del rastreador de tareas. También recibe código del rastreador de tareas. El rastreador de tareas tomará el código y lo aplicará al archivo. El proceso de aplicar ese código al archivo se conoce como Mapper. [39]
El clúster Hadoop tiene nominalmente un solo nodo de nombre más un clúster de nodos de datos, aunque hay opciones de redundancia disponibles para el nodo de nombre debido a su criticidad. Cada nodo de datos proporciona bloques de datos a través de la red utilizando un protocolo de bloques específico de HDFS. El sistema de archivos utiliza sockets TCP/IP para la comunicación. Los clientes utilizan llamadas a procedimientos remotos (RPC) para comunicarse entre sí.
HDFS almacena archivos grandes (normalmente en el rango de gigabytes a terabytes [40] ) en varias máquinas. Logra confiabilidad replicando los datos en varios hosts y, por lo tanto, teóricamente no requiere almacenamiento redundante en matriz de discos independientes (RAID) en los hosts (pero para aumentar el rendimiento de entrada-salida (E/S) algunas configuraciones RAID siguen siendo útiles). Con el valor de replicación predeterminado, 3, los datos se almacenan en tres nodos: dos en el mismo rack y uno en un rack diferente. Los nodos de datos pueden comunicarse entre sí para reequilibrar los datos, mover copias y mantener alta la replicación de datos. HDFS no es totalmente compatible con POSIX, porque los requisitos para un sistema de archivos POSIX difieren de los objetivos de una aplicación Hadoop. La desventaja de no tener un sistema de archivos totalmente compatible con POSIX es un mayor rendimiento para el procesamiento de datos y soporte para operaciones no POSIX como Append. [41]
En mayo de 2012, se agregaron capacidades de alta disponibilidad a HDFS, [42] lo que permite que el servidor de metadatos principal, llamado NameNode, realice una conmutación por error manual en una copia de seguridad. El proyecto también ha comenzado a desarrollar conmutaciones por error automáticas .
El sistema de archivos HDFS incluye un denominado namenode secundario , un término engañoso que algunos podrían interpretar incorrectamente como un namenode de respaldo cuando el namenode principal se desconecta. De hecho, el namenode secundario se conecta regularmente con el namenode principal y crea instantáneas de la información del directorio del namenode principal, que luego el sistema guarda en directorios locales o remotos. Estas imágenes con puntos de control se pueden usar para reiniciar un namenode principal fallido sin tener que reproducir todo el diario de acciones del sistema de archivos y luego editar el registro para crear una estructura de directorio actualizada. Debido a que el namenode es el único punto para el almacenamiento y la administración de metadatos, puede convertirse en un cuello de botella para admitir una gran cantidad de archivos, especialmente una gran cantidad de archivos pequeños. HDFS Federation, una nueva incorporación, tiene como objetivo abordar este problema hasta cierto punto al permitir que varios espacios de nombres sean atendidos por namenodes separados. Además, existen algunos problemas en HDFS, como problemas con archivos pequeños, problemas de escalabilidad, punto único de falla (SPoF) y cuellos de botella en solicitudes de metadatos enormes. Una ventaja de usar HDFS es el conocimiento de los datos entre el rastreador de trabajos y el rastreador de tareas. El rastreador de trabajos programa trabajos de mapeo o reducción para los rastreadores de tareas con conocimiento de la ubicación de los datos. Por ejemplo: si el nodo A contiene datos (a, b, c) y el nodo X contiene datos (x, y, z), el rastreador de trabajos programa el nodo A para que realice tareas de mapeo o reducción en (a, b, c) y el nodo X se programaría para que realice tareas de mapeo o reducción en (x, y, z). Esto reduce la cantidad de tráfico que pasa por la red y evita la transferencia innecesaria de datos. Cuando se utiliza Hadoop con otros sistemas de archivos, esta ventaja no siempre está disponible. Esto puede tener un impacto significativo en los tiempos de finalización de los trabajos, como se demuestra con los trabajos con uso intensivo de datos. [43]
HDFS fue diseñado para archivos mayoritariamente inmutables y puede no ser adecuado para sistemas que requieren operaciones de escritura simultáneas. [41]
HDFS se puede montar directamente con un sistema de archivos virtual Filesystem in Userspace (FUSE) en Linux y algunos otros sistemas Unix .
Se puede acceder a los archivos a través de la API nativa de Java, la API Thrift (genera un cliente en varios lenguajes, por ejemplo, C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa , Smalltalk y OCaml ), la interfaz de línea de comandos , la aplicación web HDFS-UI sobre HTTP o mediante bibliotecas de cliente de red de terceros. [44]
HDFS está diseñado para portabilidad entre varias plataformas de hardware y para compatibilidad con una variedad de sistemas operativos subyacentes. El diseño de HDFS introduce limitaciones de portabilidad que resultan en algunos cuellos de botella de rendimiento, ya que la implementación de Java no puede usar características que son exclusivas de la plataforma en la que se ejecuta HDFS. [45] Debido a su amplia integración en la infraestructura de nivel empresarial, monitorear el rendimiento de HDFS a escala se ha convertido en un problema cada vez más importante. Monitorear el rendimiento de extremo a extremo requiere métricas de seguimiento de nodos de datos, nodos de nombres y el sistema operativo subyacente. [46] Actualmente, existen varias plataformas de monitoreo para rastrear el rendimiento de HDFS, incluidas Hortonworks , Cloudera y Datadog .
Hadoop trabaja directamente con cualquier sistema de archivos distribuido que pueda ser montado por el sistema operativo subyacente simplemente usando una file://
URL; sin embargo, esto tiene un precio: la pérdida de localidad. Para reducir el tráfico de red, Hadoop necesita saber qué servidores están más cerca de los datos, información que los puentes de sistemas de archivos específicos de Hadoop pueden proporcionar.
En mayo de 2011, la lista de sistemas de archivos compatibles incluidos con Apache Hadoop era:
También se han escrito varios puentes de sistemas de archivos de terceros, ninguno de los cuales se encuentra actualmente en distribuciones de Hadoop. Sin embargo, algunas distribuciones comerciales de Hadoop se entregan con un sistema de archivos alternativo como predeterminado, específicamente IBM y MapR .
Encima de los sistemas de archivos se encuentra el motor MapReduce, que consta de un JobTracker , al que las aplicaciones cliente envían trabajos de MapReduce. El JobTracker envía el trabajo a los nodos TaskTracker disponibles en el clúster, intentando mantener el trabajo lo más cerca posible de los datos. Con un sistema de archivos que reconoce los bastidores, el JobTracker sabe qué nodo contiene los datos y qué otras máquinas están cerca. Si el trabajo no se puede alojar en el nodo real donde residen los datos, se da prioridad a los nodos del mismo bastidor. Esto reduce el tráfico de red en la red troncal principal. Si un TaskTracker falla o se agota el tiempo de espera, esa parte del trabajo se reprograma. El TaskTracker en cada nodo genera un proceso de máquina virtual Java (JVM) independiente para evitar que el propio TaskTracker falle si el trabajo en ejecución bloquea su JVM. Se envía un latido desde el TaskTracker al JobTracker cada pocos minutos para verificar su estado. Jetty expone el estado y la información de Job Tracker y TaskTracker y se pueden ver desde un navegador web.
Las limitaciones conocidas de este enfoque son:
De manera predeterminada, Hadoop utiliza la programación FIFO y, opcionalmente, 5 prioridades de programación para programar trabajos desde una cola de trabajo. [53] En la versión 0.19, el programador de trabajos se refactorizó para eliminarlo del JobTracker, al tiempo que se agregó la capacidad de usar un programador alternativo (como el programador Fair o el programador Capacity , que se describen a continuación). [54]
El planificador de eventos fue desarrollado por Facebook . [55] El objetivo del planificador de eventos es proporcionar tiempos de respuesta rápidos para trabajos pequeños y calidad de servicio (QoS) para trabajos de producción. El planificador de eventos tiene tres conceptos básicos. [56]
De forma predeterminada, los trabajos que no están categorizados se incluyen en un grupo predeterminado. Los grupos deben especificar la cantidad mínima de espacios de mapa, espacios de reducción y un límite en la cantidad de trabajos en ejecución.
El programador de capacidad fue desarrollado por Yahoo. El programador de capacidad admite varias funciones similares a las del programador de ferias. [57]
No hay preferencia una vez que se ejecuta un trabajo.
La mayor diferencia entre Hadoop 1 y Hadoop 2 es la incorporació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 daemons, 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, y el maestro de aplicaciones , que monitorea el progreso de la ejecución.
Hadoop 3 ofrece características importantes. Por ejemplo, mientras que en Hadoop 2 hay un único nodo de nombre , 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 cambios más grandes es que Hadoop 3 reduce la sobrecarga de almacenamiento con codificación de borrado .
Además, Hadoop 3 permite el uso de hardware GPU dentro del clúster, lo que constituye un beneficio muy importante para ejecutar algoritmos de aprendizaje profundo en un clúster Hadoop. [58]
HDFS no se limita a los trabajos de MapReduce. Se puede utilizar para otras aplicaciones, muchas de las cuales están en desarrollo en Apache. La lista incluye la base de datos HBase , el sistema de aprendizaje automático Apache Mahout y el almacén de datos Apache Hive . En teoría, Hadoop se podría utilizar para cualquier carga de trabajo que esté orientada a lotes en lugar de tiempo real, sea muy intensiva en datos y se beneficie del procesamiento paralelo . También se puede utilizar para complementar un sistema en tiempo real, como la arquitectura lambda , Apache Storm , Flink y Spark Streaming . [59]
Las aplicaciones comerciales de Hadoop incluyen: [60]
El 19 de febrero de 2008, Yahoo! Inc. lanzó lo que afirmaba que era la aplicación de producción Hadoop más grande del mundo. Yahoo! Search Webmap es una aplicación Hadoop que se ejecuta en un clúster Linux con más de 10.000 núcleos y produce datos que se utilizan en cada consulta de búsqueda web de Yahoo! [61] Hay varios clústeres Hadoop en Yahoo! y ningún sistema de archivos HDFS o trabajos MapReduce se dividen en varios centros de datos. Cada nodo del clúster Hadoop arranca la imagen Linux, incluida la distribución Hadoop. Se sabe que el trabajo que realizan los clústeres incluye los cálculos de índice para el motor de búsqueda Yahoo! En junio de 2009, Yahoo! puso el código fuente de su versión Hadoop a disposición de la comunidad de código abierto. [62]
En 2010, Facebook afirmó que tenía el clúster Hadoop más grande del mundo con 21 PB de almacenamiento. [63] En junio de 2012, anunciaron que los datos habían crecido a 100 PB [64] y más tarde ese año anunciaron que los datos estaban creciendo aproximadamente medio PB por día. [65]
A partir de 2013 [actualizar], la adopción de Hadoop se había generalizado: más de la mitad de las empresas Fortune 50 usaban Hadoop. [66]
Hadoop se puede implementar en un centro de datos local tradicional así como en la nube . [67] La nube permite a las organizaciones implementar Hadoop sin la necesidad de adquirir hardware o experiencia de configuración específica. [68]
Varias empresas ofrecen implementaciones comerciales o soporte para Hadoop. [69]
La Apache Software Foundation ha declarado que sólo el software publicado oficialmente por el Proyecto Apache Hadoop puede llamarse Apache Hadoop o Distribuciones de Apache Hadoop . [70] La denominación de productos y trabajos derivados de otros proveedores y el término "compatible" son algo controvertidos dentro de la comunidad de desarrolladores de Hadoop. [71]
Algunos artículos influyeron en el nacimiento y el crecimiento de Hadoop y el procesamiento de big data. Algunos de ellos son:
El PMC de Lucene ha votado dividir parte de Nutch en un nuevo subproyecto llamado Hadoop
HDFS no es un sistema de archivos en el sentido tradicional y no suele montarse directamente para que un usuario lo vea
{{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite web}}
: CS1 maint: bot: estado de URL original desconocido ( enlace )