apache hadoop | |
---|---|
Tipo de | estructura |
Autor | Corte Doug [d] |
Desarrollador | Fundación de software Apache |
Escrito en | Java |
Sistema operativo | multiplataforma y POSIX |
Primera edición | 1 de abril de 2006 [1] |
plataforma de hardware | máquina virtual de Java |
ultima versión |
|
Licencia | Licencia Apache 2.0 y GNU GPL |
Sitio web | hadoop.apache.org _ |
Archivos multimedia en Wikimedia Commons |
Hadoop es un proyecto de Apache Software Foundation , un conjunto de utilidades , bibliotecas y un marco distribuidos libremente para desarrollar y ejecutar programas distribuidos que se ejecutan en clústeres de cientos y miles de nodos. Se utiliza para implementar mecanismos contextuales y de búsqueda para muchos sitios web de alta carga, incluido Yahoo! y Facebook [2] . Desarrollado en Java en el marco del paradigma computacional MapReduce , según el cual la aplicación se divide en un gran número de tareas elementales idénticas que son ejecutables en los nodos del clúster y se reducen naturalmente al resultado final.
A partir de 2014, el proyecto consta de cuatro módulos: Hadoop Common ( software intermedio : un conjunto de bibliotecas de software de infraestructura y utilidades utilizadas para otros módulos y proyectos relacionados), HDFS ( sistema de archivos distribuido ), YARN (un sistema para programar tareas y administrar un clúster) y Hadoop MapReduce (una plataforma para programar y ejecutar cálculos MapReduce distribuidos), anteriormente Hadoop incluía una serie de otros proyectos que se independizaron dentro del sistema de proyectos de Apache Software Foundation.
Se considera una de las tecnologías fundacionales del " big data ". Se ha formado todo un ecosistema de proyectos y tecnologías relacionados alrededor de Hadoop, muchos de los cuales se desarrollaron inicialmente como parte del proyecto y luego se independizaron. Desde la segunda mitad de la década de 2000, ha habido un proceso de comercialización activa de la tecnología , varias empresas están construyendo su negocio completamente en la creación de distribuciones comerciales de Hadoop y servicios de soporte técnico del ecosistema, y casi todas las principales tecnologías de la información. los proveedores para organizaciones de una forma u otra incluyen Hadoop en estrategias de productos y líneas de productos.
El desarrollo fue iniciado a principios de 2005 por Doug Cutting con el objetivo de construir una infraestructura de software de computación distribuida para el proyecto Nutch , un motor de búsqueda de software libre en Java , su base ideológica fue la publicación de los empleados de Google Jeffrey Dean y Sanjay Gemawat [3] sobre conceptos informáticos de MapReduce [4] . El nuevo proyecto lleva el nombre del bebé elefante de juguete del fundador [5] .
Durante 2005-2006, Hadoop fue desarrollado por dos desarrolladores - Cutting y Mike Cafarella ( Mike Cafarella ) en modo de tiempo parcial [4] , primero como parte del proyecto Nutch, luego - el proyecto Lucene . En enero de 2006, Yahoo invitó a Cutting a liderar un equipo dedicado al desarrollo de una infraestructura informática distribuida, que también incluye la separación de Hadoop en un proyecto separado. En febrero de 2008, Yahoo lanzó un motor de búsqueda de clúster de 10.000 núcleos impulsado por Hadoop.
En enero de 2008, Hadoop se convierte en el proyecto de nivel superior del sistema de proyectos de Apache Software Foundation . En abril de 2008, Hadoop batió el récord mundial de rendimiento en el benchmark de clasificación de datos estandarizados , procesando 1 TB en 209 segundos. en un clúster de 910 nodos [6] . A partir de ese momento, Hadoop comenzó a ser ampliamente utilizado fuera de Yahoo - Last.fm , Facebook , The New York Times [7] están implementando la tecnología para sus sitios , y se está realizando la adaptación para ejecutar Hadoop en nubes Amazon EC2 .
En abril de 2010, Google otorgó a Apache Software Foundation los derechos de uso de la tecnología MapReduce, tres meses después de que fuera defendida en la Oficina de Patentes de EE . UU ., liberando así a la organización de posibles reclamaciones de patentes [8] .
Desde 2010, Hadoop se ha caracterizado repetidamente como una tecnología clave de " big data ", se predice su uso generalizado para el procesamiento de datos en paralelo de forma masiva y, junto con Cloudera, ha surgido una serie de nuevas empresas tecnológicas que están completamente enfocadas en la comercialización de Hadoop. [9] [10] . Durante 2010, varios subproyectos de Hadoop ( Avro , HBase , Hive , Pig , Zookeeper ) se convirtieron sucesivamente en los proyectos de nivel superior de la fundación Apache, lo que sirvió como el comienzo de la formación de un ecosistema en torno a Hadoop . En marzo de 2011, Hadoop recibió el premio anual a la innovación de Guardian Media Group , en el que la tecnología fue nombrada la " navaja suiza del siglo XXI" [11] .
La implementación del módulo YARN en Hadoop 2.0, lanzado en el otoño de 2013, se considera un salto significativo que lleva a Hadoop más allá del paradigma MapReduce y coloca la tecnología al nivel de una solución universal para organizar el procesamiento de datos distribuidos [12] .
Hadoop Common incluye bibliotecas para gestionar sistemas de archivos compatibles con Hadoop y scripts para crear la infraestructura necesaria y gestionar el procesamiento distribuido, para cuya comodidad se ha creado un intérprete de línea de comandos simplificado especializado ( shell FS, shell del sistema de archivos ), lanzado desde el sistema operativo. shell del sistema con un comando de la forma: , donde es un comando de intérprete y es una lista de recursos con el prefijo del tipo de sistema de archivos compatible, como o . La mayoría de los comandos del intérprete se implementan por analogía con los comandos Unix correspondientes (por ejemplo, , , , , , , , , , , , además, se admiten algunas teclas de comandos Unix similares, por ejemplo, la tecla recursiva para , , ) , hay comandos específicos de Hadoop (por ejemplo, cuenta la cantidad de directorios, archivos y bytes en una ruta determinada, vacía la papelera de reciclaje y modifica el factor de replicación para un recurso determinado). hdfs dfs -command URIcommandURIhdfs://example.com/file1file:///tmp/local/file2catchmodchownchgrpcpdulsmkdirmvrmtail-Rchmodchownchgrpcountexpungesetrep
HDFS ( Sistema de archivos distribuidos de Hadoop ) es un sistema de archivos diseñado para almacenar archivos grandes distribuidos bloque por bloque entre los nodos de un clúster informático. Todos los bloques en HDFS (excepto el último bloque de un archivo) tienen el mismo tamaño y cada bloque se puede colocar en varios nodos, el tamaño del bloque y el factor de replicación (número de nodos en los que se debe colocar cada bloque) se definen en la configuración a nivel de archivo. Gracias a la replicación se asegura la estabilidad de un sistema distribuido frente a fallos de nodos individuales. Los archivos solo se pueden escribir en HDFS una vez (no se admite la modificación), y solo un proceso puede escribir en un archivo a la vez. La organización de archivos en el espacio de nombres es jerárquica tradicional : hay un directorio raíz, se admite el anidamiento de directorios y los archivos y otros directorios se pueden ubicar en el mismo directorio.
La implementación de una instancia de HDFS proporciona un nodo de nombre central ( nodo de nombre ing. ), que almacena metadatos del sistema de archivos y metainformación sobre la distribución de bloques, y una serie de nodos de datos ( nodo de datos ing. ), que almacena directamente bloques de archivos. El nodo de nombre es responsable de procesar las operaciones a nivel de archivos y directorios: abrir y cerrar archivos, manipular directorios, los nodos de datos procesan directamente las operaciones de escritura y lectura de datos. El nodo de nombre y los nodos de datos cuentan con servidores web que muestran el estado actual de los nodos y le permiten ver el contenido del sistema de archivos. Las funciones administrativas están disponibles desde la interfaz de línea de comandos.
HDFS es una parte integral del proyecto, sin embargo, Hadoop admite el trabajo con otros sistemas de archivos distribuidos sin usar HDFS, el soporte para Amazon S3 y CloudStore se implementa en la distribución principal. Por otro lado, HDFS se puede usar no solo para ejecutar trabajos de MapReduce, sino también como un sistema de archivos distribuido de propósito general, en particular, se implementa un DBMS HBase NoSQL distribuido encima de él, y Apache Mahout escalable. El sistema de aprendizaje automático se ejecuta en su entorno .
YARN ( en inglés Yet Another Resource Negotiator - “ otro intermediario de recursos ”) es un módulo que apareció con la versión 2.0 (2013), que se encarga de administrar los recursos del clúster y programar tareas. Si en versiones anteriores esta función se integró en el módulo MapReduce , donde fue implementada por un solo componente ( JobTracker ), entonces en YARN hay un demonio lógicamente independiente : el programador de recursos ( ResourceManager ), que abstrae todos los recursos informáticos del clúster y gestiona su suministro a las aplicaciones de procesamiento distribuido. Tanto los programas MapReduce como cualquier otra aplicación distribuida que admita las interfaces de programación adecuadas pueden funcionar bajo el control de YARN; YARN brinda la posibilidad de ejecución paralela de varias tareas diferentes dentro del clúster y su aislamiento (según los principios de multiusuario ). Un desarrollador de aplicaciones distribuidas necesita implementar una clase especial de administración de aplicaciones ( ApplicationMaster ) que es responsable de coordinar tareas dentro de los recursos proporcionados por el programador de recursos; el programador de recursos es responsable de crear instancias de la clase de control de la aplicación e interactuar con ella a través del protocolo de red apropiado.
YARN se puede considerar como un sistema operativo de clúster en el sentido de que actúa como una interfaz entre los recursos de hardware del clúster y una amplia clase de aplicaciones que usan su poder para realizar procesamiento computacional [13] .
Hadoop MapReduce es un marco de software para programar computación distribuida dentro del paradigma MapReduce . Un desarrollador de aplicaciones para Hadoop MapReduce necesita implementar un controlador base que, en cada nodo de cómputo del clúster, asegure la transformación de los pares clave-valor iniciales en un conjunto intermedio de pares clave-valor (la clase que implementa la interfaz Mapperes llamado así por la función de orden superior Map ), y el controlador , que reduce el conjunto intermedio de pares al conjunto final reducido ( fold , clase que implementa la interfaz Reducer). El marco pasa las salidas ordenadas de los controladores base a la entrada de la convolución, la reducción consta de tres fases: barajar ( shuffle , selección de la sección deseada de la salida), sort ( clasificación , agrupación por claves de salidas de distribuidores - clasificación adicional, que se requiere cuando diferentes procesadores atómicos devuelven conjuntos con las mismas claves, al mismo tiempo, las reglas de clasificación en esta fase se pueden configurar mediante programación y usar cualquier característica de la estructura interna de las claves) y reducirse ( plegamiento de lista ) - obteniendo el conjunto de resultados. Para algunos tipos de procesamiento, no se requiere el pliegue y, en este caso, el marco devuelve un conjunto de pares ordenados recibidos por los procesadores base.
Hadoop MapReduce le permite crear trabajos con controladores base y pliegues escritos sin usar Java: las utilidades de transmisión de Hadoop le permiten usar cualquier archivo ejecutable que funcione con E / S del sistema operativo estándar (por ejemplo, utilidades de shell UNIX ) como controladores base y pliegues ), también hay una API de canalizaciones Hadoop de C++ compatible con SWIG . Además, las distribuciones de Hadoop incluyen implementaciones de varios procesadores base específicos y acumulaciones que se usan más comúnmente en el procesamiento distribuido.
En las primeras versiones de Hadoop MapReduce se incluía un programador de trabajos ( JobTracker ), desde la versión 2.0 esta función se ha movido a YARN , y desde esta versión el módulo de Hadoop MapReduce se implementa sobre YARN. Las interfaces de programación se conservan en su mayoría, pero no existe una retrocompatibilidad completa (es decir, para ejecutar programas escritos para versiones anteriores de la API , para poder trabajar en YARN, en general, se requiere su modificación o refactorización , y solo con algunas restricciones son posibles las opciones de compatibilidad binaria hacia atrás [14] ).
Inicialmente, uno de los principales objetivos de Hadoop era proporcionar escalabilidad de clúster horizontal agregando nodos económicos (equipo de clase masiva, hardware básico en inglés ), sin recurrir a servidores potentes y redes de almacenamiento costosas . Los clústeres en funcionamiento de miles de nodos de tamaño confirman la viabilidad y la rentabilidad de tales sistemas, por ejemplo, a partir de 2011, se conocen grandes clústeres de Hadoop en Yahoo (más de 4 mil nodos con una capacidad de almacenamiento total de 15 PB), Facebook (alrededor de 2 mil nodos por 21 PB) y Ebay (700 nodos por 16 PB) [15] . Sin embargo, se cree que la escalabilidad horizontal en los sistemas Hadoop es limitada, para Hadoop anterior a la versión 2.0, el máximo posible se estimaba en 4 mil nodos al utilizar 10 trabajos de MapReduce por nodo [16] . En muchos sentidos, esta limitación fue facilitada por la concentración en el módulo MapReduce de funciones para monitorear el ciclo de vida de los trabajos, se cree que con su eliminación al módulo YARN en Hadoop 2.0 y la descentralización - la distribución de parte de las funciones de monitoreo a los nodos de procesamiento: la escalabilidad horizontal ha aumentado.
Otra limitación de los sistemas Hadoop es el tamaño de la memoria RAM en el nodo de nombre ( NameNode ), que almacena todo el espacio de nombres del clúster para procesar la distribución; además, la cantidad total de archivos que el nodo de nombre es capaz de procesar es de 100 millones [17] . Para superar esta limitación, se está trabajando para distribuir el nodo de nombre, que es común en la arquitectura actual para todo el clúster, en varios nodos independientes. Otra opción para superar esta limitación es usar DBMS distribuido sobre HDFS, como HBase , en el que el papel de los archivos y directorios lo desempeñan los registros en una gran tabla de base de datos desde el punto de vista de la aplicación.
A partir de 2011, un clúster típico se creó a partir de nodos x86-64 multinúcleo de un solo socket que ejecutan Linux con 3-12 dispositivos de almacenamiento en disco conectados por una red de 1 Gb/s. Hay tendencias tanto para reducir el poder de cómputo de los nodos y usar procesadores de bajo consumo ( ARM , Intel Atom ) [18] , como el uso de nodos de cómputo de alto rendimiento simultáneamente con soluciones de red de gran ancho de banda ( InfiniBand en Oracle Big Data Dispositivo , canal de fibra de 10 Gb/s de alto rendimiento y SAN Ethernet en configuraciones de plantilla de big data FlexPod ).
La escalabilidad de los sistemas Hadoop depende en gran medida de las características de los datos que se procesan, en primer lugar, de su estructura interna y características para extraer de ellos la información necesaria, y de la complejidad de la tarea de procesamiento, que a su vez dictan la organización de los mismos. ciclos de procesamiento, la intensidad computacional de las operaciones atómicas y, en última instancia, el nivel de paralelismo y carga de clúster. El manual de Hadoop (primeras versiones, antes de la 2.0) indicaba que un nivel aceptable de paralelismo es el uso de 10-100 instancias de procesadores básicos por nodo de clúster y para tareas que no requieren un tiempo de CPU significativo, hasta 300; para las convoluciones se consideró óptimo utilizarlas por el número de nodos multiplicado por un coeficiente en el rango de 0,95 a 1,75 y una constante mapred.tasktracker.reduce.tasks.maximum. Con un valor de coeficiente más grande, los nodos más rápidos, después de haber completado la primera ronda de convergencia, recibirán la segunda porción de pares intermedios para procesar antes, por lo tanto, aumentar el coeficiente sobrecarga el clúster, pero al mismo tiempo proporciona un equilibrio de carga más eficiente . En su lugar, YARN utiliza constantes de configuración que determinan los valores de la RAM disponible y los núcleos de procesador virtual disponibles para el programador de recursos [19] , en función de los cuales se determina el nivel de paralelismo.
Con el telón de fondo de la popularización de Hadoop en 2008 y los informes sobre la creación de clústeres de Hadoop en Yahoo y Facebook, se creó Cloudera en octubre de 2008, dirigida por Michael Olson, ex director ejecutivo de Sleepycat (la empresa que creó Berkeley DB ), totalmente dirigida a la comercialización de las tecnologías Hadoop. En septiembre de 2009, el principal desarrollador de Hadoop, Doug Cutting, se mudó a Cloudera desde Yahoo y, gracias a esta transición, los comentaristas describieron a Cloudera como "el nuevo abanderado de Hadoop", a pesar de que la mayor parte del proyecto seguía siendo creada por empleados de Facebook y Yahoo [20] . MapR se fundó en 2009 con el objetivo de crear una versión de alto rendimiento de la distribución de Hadoop y entregarla como software propietario. En abril de 2009, Amazon lanzó Elastic MapReduce, un servicio en la nube que permite a los suscriptores crear clústeres de Hadoop y ejecutar trabajos en ellos en función del tiempo. Posteriormente, como alternativa, a los suscriptores de Amazon Elastic MapReduce se les dio a elegir entre la distribución clásica de Apache y las distribuciones de MapR.
En 2011, Yahoo escindió la división que desarrolló y usó Hadoop en una empresa independiente: Hortonworks , pronto la nueva empresa logró concluir un acuerdo con Microsoft para desarrollar conjuntamente la distribución de Hadoop para Windows Azure y Windows Server [21] . En el mismo año, con el surgimiento de Hadoop como una de las tecnologías centrales de big data, prácticamente todos los principales proveedores de software de tecnología para organizaciones incluyeron tecnologías de Hadoop de una forma u otra en sus estrategias y líneas de productos. Entonces, Oracle lanzó el complejo de hardware y software Big Data appliance (preensamblado en un armario de telecomunicaciones y un clúster de Hadoop preconfigurado con un kit de distribución de Cloudera) [22] , IBM creó el producto BigInsights basado en el kit de distribución de Apache [ 23] , EMC obtuvo la licencia de MapR de su Hadoop de alto rendimiento para la integración en los productos de la recientemente adquirida Greenplum [24] (esta unidad de negocios luego se escindió en una empresa independiente, Pivotal , y se trasladó a una distribución de Hadoop completamente independiente basado en código Apache [25] ), Teradata concluyó un acuerdo con Hortonworks para integrar Hadoop en el dispositivo Aster Big Analytics [26] . En 2013, Intel creó su propia distribución de Hadoop [27] , abandonando un año después su desarrollo en favor de las soluciones de Cloudera, en la que adquirió una participación del 18% [28] .
El volumen del mercado de software y servicios en torno al ecosistema Hadoop para 2012 se estima en $ 540 millones con una previsión de crecimiento de $ 1,6 mil millones para 2017, los líderes del mercado son las startups californianas Cloudera, MapR y Hortonworks [29] . Además de ellos, Hadapt (adquirida en julio de 2014 por Teradata [30] ), Datameer , Karmasphere y Platfora también se destacan por construir todo su negocio en la creación de productos para proporcionar sistemas Hadoop con capacidades analíticas [31] .
Fundación de software Apache | |||||||
---|---|---|---|---|---|---|---|
Proyectos de primer nivel |
| ||||||
Subproyectos |
| ||||||
Web de Apache |
| ||||||
Otros proyectos | |||||||
Desarrollando proyectos ( Incubadora ) |
| ||||||
Proyectos fuera de servicio ( Ático ) | |||||||
|