¿Cuál es el algoritmo de Apache Hadoop?

¿Cuál es el algoritmo de Apache Hadoop?

Bueno, la otra respuesta aquí le informa sobre los principios básicos alrededor de los cuales Hadoop puede haber sido diseñado (es decir, debe ser de código abierto, confiable, escalable, tolerante a fallas, etc.), pero no habla de ningún “algoritmo” que fue específicamente formulado en la pregunta, por lo tanto, agregaré mis dos centavos :). Espero que ayude al OP.

Lo primero es lo primero: ¿qué es exactamente Hadoop?

Hadoop es básicamente una forma de almacenar datos. Es posible que haya oído hablar de otras formas de almacenar datos (como NTFS, FAT, etc.). Estas formas se denominan básicamente un sistema de archivos. Entonces Hadoop es básicamente un sistema de archivos.

El Sistema de archivos Hadoop (denominado Sistema de archivos distribuidos de Hadoop o HDFS ) se especializa en almacenar datos en muchas máquinas diferentes (los llamamos grupos de servidores; cada servidor es generalmente una máquina virtual o VM), y luego ejecuta procesos distribuidos (o paralelos) / análisis a través de estos servidores. Dado que muchos servidores están involucrados (incluso pueden estar en cientos o miles), se pueden almacenar datos parciales en cada uno de ellos, y dado que el procesamiento (almacenamiento / recuperación / recuento, etc.) ocurre de manera paralela, se pueden manejar grandes cantidades de datos (por lo tanto Hadoop es generalmente sinónimo de Big data).

¿Cómo aprovechamos HDFS?

Ahora, dado que HDFS como sistema de archivos, realiza un seguimiento de los datos (qué datos se almacenan en qué máquina), genera redundancia (copias primarias y secundarias) y realiza las tareas básicas de administración de datos a nivel del sistema de archivos, por lo tanto, cualquier herramienta (como HBase o MongoDB) que se ejecuta sobre HDFS, puede aprovechar las características de HDFS como las API (por ejemplo, MongoDB tiene un conector para Hadoop, consulte – mongodb / mongo-hadoop). La mayoría de las herramientas para manejar grandes datos en estos días (Hbase, Hive, Apache Storm, Mongo, etc.) se ejecutan en HDFS.

Aunque no es necesario hacerlo , por ejemplo, en uno de los Productos que encabezo, estamos ejecutando MongoDB en SAN sin HDFS. Tenemos un entorno multi-fragmento (VM en un clúster), con los fragmentos (VM individuales que contienen partes de datos) administrados por MongoDB.

¿Hay algún algoritmo que pueda llamarse como el algoritmo principal de Hadoop?

Depende de cómo lo mires (ya que Hadoop es un sistema completo en sí mismo con múltiples componentes), pero la opinión más popular es que ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡!!!

Hablamos de que HDFS realiza un seguimiento de varias máquinas virtuales, cada una de las cuales almacena parte de nuestros datos. Por lo tanto, el algoritmo que ayuda a HDFS a realizar recados rápidamente en paralelo en tantas máquinas virtuales se llama MapReduce , y eso se puede llamar, de alguna manera, como el algoritmo de Hadoop (o la forma básica en que HDFS administra varios servidores en un clúster).

Entonces, ¿qué es MapReduce? El algoritmo de Hadoop

No es tan complejo: suponga que tiene que encontrar los 10 archivos más grandes entre un millón de archivos, ¡consume bastante tiempo! Pero ahora suponga que tiene los archivos reales, los nombres de archivo y sus tamaños almacenados en 1000 servidores (cada uno con 1000 archivos solamente), y le pide a cada uno de sus servidores que calcule sus propios 10 archivos más grandes, luego todos lo hacen en paralelo y ahora tiene 10,000 nombres de archivo y sus tamaños bastante rápido. El proceso principal ahora encuentra los 10 más grandes entre estos 10,000. El tiempo total que se tarda aquí es solo para escanear 11,000 registros en lugar de un millón (porque hicimos los 1000 iniciales en paralelo).

La primera tarea (que le da 1000 conjuntos de 10 cada uno), se llama la Tarea de Mapa, y la segunda tarea de consolidar los resultados de sus tareas de Mapa se llama Reducir Tarea – De ahí el nombre de MapReduce.

De manera similar, imagine las tareas de encontrar la suma de los atributos de un JSON (suma de la población en un país, cuando tiene una lista inteligente de ciudades en los grupos), la suma de almacenamiento tomada por los archivos de video, etc.

Ver: ¿Qué es MapReduce?

Sugerencias / Correcciones / Solicitudes de aclaración son bienvenidas 🙂

Según tengo entendido, está solicitando los principios de diseño de Hadoop. Entonces a continuación está mi respuesta en consecuencia:

Características y características de Hadoop

Apache Hadoop es la herramienta de big data más popular y poderosa, Hadoop proporciona la capa de almacenamiento más confiable del mundo – HDFS, un motor de procesamiento por lotes – MapReduce y una capa de gestión de recursos – YARN. En esta sección del tutorial de Hadoop, discutiremos las características importantes de Hadoop que se dan a continuación:

  • Código abierto : Apache Hadoop es un proyecto de código abierto. Significa que su código puede modificarse de acuerdo con los requisitos comerciales.
  • Procesamiento distribuido : como los datos se almacenan de forma distribuida en HDFS en todo el clúster, los datos se procesan en paralelo en un clúster de nodos.
  • Tolerancia a fallas : de manera predeterminada, 3 réplicas de cada bloque se almacenan en el clúster en Hadoop y también se pueden cambiar según el requisito. Entonces, si algún nodo se cae, los datos en ese nodo se pueden recuperar de otros nodos fácilmente. Las fallas de los nodos o tareas son recuperadas automáticamente por el marco. Así es como Hadoop es tolerante a fallas.
  • Confiabilidad : debido a la replicación de datos en el clúster, los datos se almacenan de manera confiable en el clúster de la máquina a pesar de las fallas de la máquina. Si su máquina se cae, también sus datos se almacenarán de manera confiable.
  • Alta disponibilidad : los datos están altamente disponibles y accesibles a pesar de la falla del hardware debido a múltiples copias de datos. Si una máquina o algunos hardware fallan, se accederá a los datos desde otra ruta.
  • Escalabilidad : Hadoop es altamente escalable en la forma en que se puede agregar fácilmente nuevo hardware a los nodos. También proporciona escalabilidad horizontal, lo que significa que se pueden agregar nuevos nodos sobre la marcha sin ningún tiempo de inactividad .
  • Económico : Apache Hadoop no es muy costoso ya que se ejecuta en un clúster de hardware básico. No necesitamos ninguna máquina especializada para ello. Hadoop proporciona un gran ahorro de costos también, ya que es muy fácil agregar más nodos sobre la marcha aquí. Entonces, si los requisitos aumentan, también puede aumentar los nodos sin ningún tiempo de inactividad y sin requerir mucha planificación previa.
  • Fácil de usar : no es necesario que el cliente se ocupe de la informática distribuida, el marco se encarga de todas las cosas. Por lo tanto, es fácil de usar.
  • Localidad de datos : Hadoop funciona según el principio de la localidad de datos que establece que mover el cálculo a los datos en lugar de los datos a los cálculos. Cuando un cliente envía el algoritmo MapReduce, este algoritmo se mueve a los datos en el clúster en lugar de llevar los datos a la ubicación donde se envía el algoritmo y luego procesarlo.

Suposiciones de Hadoop

Hadoop está escrito con grandes grupos de computadoras en mente y se basa en los siguientes supuestos:

  • El hardware puede fallar (ya que se puede usar hardware básico)
  • El procesamiento se ejecutará en lotes. Por lo tanto, se hace hincapié en el alto rendimiento en lugar de la baja latencia.
  • Las aplicaciones que se ejecutan en HDFS tienen grandes conjuntos de datos. Un archivo típico en HDFS tiene un tamaño de gigabytes a terabytes.
  • Las aplicaciones necesitan un modelo de acceso de escritura una vez, lectura múltiple .
  • Mover la computación es más barato que mover datos.

Principios de diseño de Hadoop

A continuación se presentan los principios de diseño en los que trabaja Hadoop:

  • El sistema se administrará y se curará a sí mismo de forma automática y transparente enrutar alrededor de la falla (Tolerante a fallas) Ejecutar tareas redundantes especulativamente si se detecta que ciertos nodos son lentos
  • El rendimiento debe escalar linealmente Cambio proporcional en la capacidad con el cambio de recursos (Escalabilidad)
  • La computación debe pasar a datos Latencia más baja, menor ancho de banda (Localidad de datos)
  • Núcleo simple, modular y extensible (económico)

Para conocer más conceptos de Hadoop, siga esta guía, y para leer sobre Hadoop Ecosystem, siga esta guía completa.

More Interesting

Cómo encontrar la cantidad mínima de pasos necesarios para eliminar todos los peones del tablero de ajedrez

En el algoritmo O (n) para encontrar el elemento máximo en una matriz, ¿cuál es el valor esperado del número total de cambios en el valor de una variable que mantiene el máximo sobre el paso de una matriz?

¿Por qué deberíamos conocer más de un algoritmo de clasificación en Python (burbuja, inserción, selección) si todos están haciendo el mismo trabajo?

Cómo calcular óptimamente grandes factoriales de orden 10 ^ 5 para operaciones repetidas (por ejemplo, encontrar permutaciones)

¿Alguien puede dar un ejemplo en Java de pasar una matriz unidimensional, una matriz bidimensional y una matriz tridimensional por referencia y luego manipularlos?

¿Cuáles son las formas de ajustar algoritmos de aprendizaje automático?

¿Cuáles son las aplicaciones de la vida real de los algoritmos?

¿Cómo y dónde recopilar datos estadísticos sobre el comercio algorítmico?

¿Cómo debo tomar una entrada de orden 10 ^ 250 usando una matriz de caracteres en C?

Si un algoritmo se ejecuta en tiempo O (N), pero N no excede una constante, ¿puedo decir que el algoritmo se ejecuta en tiempo constante?

¿Cuáles son las aplicaciones prácticas e industriales de los algoritmos de búsqueda / recorrido de gráficos BFS y DFS?

¿Qué estructura de datos usa internamente un objeto en los lenguajes OOP? ¿Qué algoritmo se usa para la búsqueda de propiedades en un objeto?

¿Cuál sería un algoritmo eficiente para ordenar millones de líneas de cadenas / enteros en un archivo?

Cómo implementar un árbol de segmentos con treaps

¿Existe algún algoritmo de clasificación con O (n) en el tiempo y O (n ^ 2) en la complejidad del espacio?