stringtranslate.com

Mapa reducido

MapReduce es un modelo de programación y una implementación asociada para procesar y generar grandes conjuntos de datos con un algoritmo distribuido paralelo en un clúster . [1] [2] [3]

Un programa MapReduce se compone de un procedimiento de mapa , que realiza filtrado y clasificación (como ordenar a los estudiantes por nombre en colas, una cola para cada nombre), y un método de reducción , que realiza una operación de resumen (como contar el número de estudiantes en cada cola, lo que arroja frecuencias de nombres). El "Sistema MapReduce" (también llamado "infraestructura" o "marco") organiza el procesamiento reuniendo los servidores distribuidos, ejecutando las diversas tareas en paralelo, gestionando todas las comunicaciones y transferencias de datos entre las distintas partes del sistema y proporcionando redundancia . y tolerancia a fallos .

El modelo es una especialización de la estrategia dividir, aplicar y combinar para el análisis de datos. [4] Está inspirado en las funciones map y reduce comúnmente utilizadas en programación funcional , [5] aunque su propósito en el framework MapReduce no es el mismo que en sus formas originales. [6] Las contribuciones clave del marco MapReduce no son las funciones de mapa y reducción reales (que, por ejemplo, se parecen a las operaciones de reducción [ 8 ] y dispersión [9] del estándar Message Passing Interface de 1995 ), sino la escalabilidad y Tolerancia a fallas lograda para una variedad de aplicaciones debido a la paralelización. Como tal, una implementación de MapReduce de un solo subproceso generalmente no es más rápida que una implementación tradicional (que no sea MapReduce); Por lo general, cualquier ganancia solo se observa con implementaciones de subprocesos múltiples en hardware multiprocesador. [10] El uso de este modelo es beneficioso solo cuando entran en juego la operación aleatoria distribuida optimizada (que reduce el costo de comunicación de la red) y las características de tolerancia a fallas del marco MapReduce. Optimizar el costo de la comunicación es esencial para un buen algoritmo MapReduce. [11]

Las bibliotecas MapReduce se han escrito en muchos lenguajes de programación, con diferentes niveles de optimización. Una implementación popular de código abierto que admite reproducción aleatoria distribuida es parte de Apache Hadoop . El nombre MapReduce originalmente se refería a la tecnología patentada de Google , pero desde entonces se ha generalizado . En 2014, Google ya no usaba MapReduce como su principal modelo de procesamiento de big data , [12] y el desarrollo en Apache Mahout había pasado a mecanismos más capaces y menos orientados al disco que incorporaban mapas completos y capacidades reducidas. [13]

Descripción general

MapReduce es un marco para procesar problemas paralelizables en grandes conjuntos de datos utilizando una gran cantidad de computadoras (nodos), denominados colectivamente un clúster (si todos los nodos están en la misma red local y usan hardware similar) o una cuadrícula (si los nodos están compartidos entre sistemas distribuidos geográfica y administrativamente y utilizan hardware más heterogéneo). El procesamiento puede ocurrir en datos almacenados en un sistema de archivos (no estructurado) o en una base de datos (estructurada). MapReduce puede aprovechar la localidad de los datos, procesándolos cerca del lugar donde están almacenados para minimizar la sobrecarga de comunicación.

Un marco (o sistema) MapReduce generalmente se compone de tres operaciones (o pasos):

  1. Mapa: cada nodo trabajador aplica la mapfunción a los datos locales y escribe la salida en un almacenamiento temporal. Un nodo maestro garantiza que solo se procese una copia de los datos de entrada redundantes.
  2. Mezclar: los nodos trabajadores redistribuyen los datos en función de las claves de salida (producidas por la mapfunción), de modo que todos los datos que pertenecen a una clave se encuentran en el mismo nodo trabajador.
  3. Reducir: los nodos trabajadores ahora procesan cada grupo de datos de salida, por clave, en paralelo.

MapReduce permite el procesamiento distribuido del mapa y operaciones de reducción. Los mapas se pueden realizar en paralelo, siempre que cada operación de mapeo sea independiente de las demás; en la práctica, esto está limitado por la cantidad de fuentes de datos independientes y/o la cantidad de CPU cercanas a cada fuente. De manera similar, un conjunto de 'reductores' puede realizar la fase de reducción, siempre que todas las salidas de la operación del mapa que comparten la misma clave se presenten al mismo reductor al mismo tiempo, o que la función de reducción sea asociativa . Si bien este proceso a menudo parece ineficiente en comparación con algoritmos que son más secuenciales (porque se deben ejecutar múltiples instancias del proceso de reducción), MapReduce se puede aplicar a conjuntos de datos significativamente más grandes que los que un solo servidor "comercial" puede manejar; una gran granja de servidores puede usar MapReduce para ordenar un petabyte de datos en sólo unas pocas horas. [14] El paralelismo también ofrece alguna posibilidad de recuperación de fallas parciales de los servidores o del almacenamiento durante la operación: si un mapeador o reductor falla, el trabajo se puede reprogramar, suponiendo que los datos de entrada aún estén disponibles.

Otra forma de ver MapReduce es como un cálculo distribuido y paralelo de 5 pasos:

  1. Prepare la entrada Map() : el "sistema MapReduce" designa los procesadores Map, asigna la clave de entrada K1 en la que trabajaría cada procesador y proporciona a ese procesador todos los datos de entrada asociados con esa clave.
  2. Ejecute el código Map() proporcionado por el usuario : Map() se ejecuta exactamente una vez para cada clave K1 , generando una salida organizada por clave K2 .
  3. "Baraja" la salida del Mapa a los procesadores Reducir : el sistema MapReduce designa los procesadores Reducir, asigna la clave K2 en la que cada procesador debe trabajar y proporciona a ese procesador todos los datos generados por el Mapa asociados con esa clave.
  4. Ejecute el código Reduce() proporcionado por el usuario : Reduce() se ejecuta exactamente una vez por cada clave K2 producida por el paso Mapa.
  5. Produzca el resultado final : el sistema MapReduce recopila todos los resultados de Reducción y los clasifica por K2 para producir el resultado final.

Lógicamente se puede considerar que estos cinco pasos se ejecutan en secuencia (cada paso comienza sólo después de que se completa el paso anterior), aunque en la práctica pueden intercalarse siempre que el resultado final no se vea afectado.

En muchas situaciones, es posible que los datos de entrada ya se hayan distribuido ( "fragmentados" ) entre muchos servidores diferentes, en cuyo caso el paso 1 a veces podría simplificarse enormemente asignando servidores de mapas que procesarían los datos de entrada presentes localmente. De manera similar, el paso 3 a veces podría acelerarse asignando procesadores Reducir que estén lo más cerca posible de los datos generados por el mapa que necesitan procesar.

Vista lógica

Las funciones Map y Reduce de MapReduce están definidas con respecto a datos estructurados en pares (clave, valor). Map toma un par de datos con un tipo en un dominio de datos y devuelve una lista de pares en un dominio diferente:

Map(k1,v1)list(k2,v2)

La función Mapa se aplica en paralelo a cada par (codificado por k1) en el conjunto de datos de entrada. Esto produce una lista de pares (tecleados por k2) para cada llamada. Después de eso, el marco MapReduce recopila todos los pares con la misma clave ( k2) de todas las listas y los agrupa, creando un grupo para cada clave.

Luego, la función Reducir se aplica en paralelo a cada grupo, lo que a su vez produce una colección de valores en el mismo dominio:

Reduce(k2, list (v2))list((k3, v3))[15]

Cada llamada de Reduce normalmente produce un par clave-valor o un retorno vacío, aunque se permite que una llamada devuelva más de un par clave-valor. Las devoluciones de todas las llamadas se recopilan como la lista de resultados deseados.

Por lo tanto, el marco MapReduce transforma una lista de pares (clave, valor) en otra lista de pares (clave, valor). [16] Este comportamiento es diferente de la típica combinación de mapa de programación funcional y reducción, que acepta una lista de valores arbitrarios y devuelve un valor único que combina todos los valores devueltos por el mapa.

Es necesario, pero no suficiente, tener implementaciones del mapa y reducir las abstracciones para poder implementar MapReduce. Las implementaciones distribuidas de MapReduce requieren un medio para conectar los procesos que realizan las fases de Mapa y Reducción. Este puede ser un sistema de archivos distribuido . Son posibles otras opciones, como la transmisión directa desde los mapeadores a los reductores, o que los procesadores de mapeo entreguen sus resultados a los reductores que los consultan.

Ejemplos

El ejemplo canónico de MapReduce cuenta la aparición de cada palabra en un conjunto de documentos: [17]

 mapa de funciones (nombre de cadena, documento de cadena): // nombre: nombre del documento  // documento: contenido del documento  para cada palabra w en el documento: emitir (w, 1)función  reducir (palabra de cadena, iterador recuentos parciales): // palabra: una palabra  // recuentos parciales: una lista de recuentos parciales agregados suma = 0 para cada pc en recuentos parciales: suma += pc emitir (palabra, suma)

Aquí, cada documento se divide en palabras y cada palabra se cuenta mediante la función de mapa , utilizando la palabra como clave de resultado. El marco reúne todos los pares con la misma clave y los envía a la misma llamada para reducir . Por lo tanto, esta función sólo necesita sumar todos sus valores de entrada para encontrar el total de apariciones de esa palabra.

Como otro ejemplo, imaginemos que para una base de datos de 1.100 millones de personas, uno quisiera calcular el número promedio de contactos sociales que tiene una persona según su edad. En SQL , dicha consulta podría expresarse como:

 SELECCIONE edad , AVG ( contactos ) DE las redes sociales . persona GRUPAR POR edad ORDENAR POR edad        

Con MapReduce, los valores de la clave K1 podrían ser los números enteros del 1 al 1100, cada uno de los cuales representa un lote de 1 millón de registros, el valor de la clave K2 podría ser la edad de una persona en años y este cálculo se podría lograr usando las siguientes funciones:

Se ingresa  la función Map :  entero K1 entre 1 y 1100, que representa un lote de 1 millón de registros social.person para cada registro social.person en el lote K1, sea Y la edad de la persona , sea N el número de contactos que la persona ha producido . un registro de salida (Y,(N,1)) función de fin de repeticiónfunción Reducir es  entrada: edad (en años) Y para cada registro de entrada (Y,(N,C)) hacer Acumular en S la suma de N*C Acumular en C nuevo la suma de C repetir  sea A ser S/C nuevo  producir un registro de salida (Y,(A,C nuevo )) función final

Tenga en cuenta que en la función Reducir , C es el recuento de personas que tienen en total N contactos, por lo que en la función Mapa es natural escribir C=1 , ya que cada par de salida se refiere a los contactos de una sola persona.

El sistema MapReduce alinearía los 1100 procesadores de mapas y proporcionaría a cada uno su correspondiente millón de registros de entrada. El paso Map produciría 1,1 mil millones (Y,(N,1)) registros, con valores Y que oscilan entre, digamos, 8 y 103. Luego, el sistema MapReduce alinearía los 96 procesadores Reduce realizando una operación de barajado de la clave/valor. pares debido al hecho de que necesitamos un promedio por edad y proporcionar a cada uno sus millones de registros de entrada correspondientes. El paso Reducir daría como resultado un conjunto muy reducido de solo 96 registros de salida (Y,A) , que se colocarían en el archivo de resultados final, ordenados por Y .

La información del recuento en el registro es importante si el procesamiento se reduce más de una vez. Si no sumamos el recuento de registros, el promedio calculado sería incorrecto, por ejemplo:

-- salida del mapa #1: edad, cantidad de contactos10, 910, 910, 9
-- salida del mapa #2: edad, cantidad de contactos10, 910, 9
-- salida del mapa #3: edad, cantidad de contactos10, 10

Si reducimos los archivos #1 y #2 , tendremos un nuevo archivo con una media de 9 contactos para una persona de 10 años ((9+9+9+9+9)/5):

-- reducir el paso #1: edad, promedio de contactos10, 9

Si lo reducimos con el archivo #3 , perdemos la cuenta de cuántos registros ya hemos visto, por lo que terminamos con una media de 9,5 contactos para una persona de 10 años ((9+10)/2) , Cuál está mal. La respuesta correcta es 9,1 66 = 55 / 6 = (9×3+9×2+10×1)/(3+2+1).

Flujo de datos

La arquitectura del marco de software se adhiere al principio abierto-cerrado donde el código se divide efectivamente en puntos congelados no modificables y puntos calientes extensibles . El punto congelado del marco MapReduce es un tipo distribuido grande. Los puntos calientes que define la aplicación son:

Lector de entrada

El lector de entrada divide la entrada en 'divisiones' de tamaño apropiado (en la práctica, normalmente, de 64 MB a 128 MB) y el marco asigna una división a cada función de Mapa . El lector de entrada lee datos del almacenamiento estable (normalmente, un sistema de archivos distribuido ) y genera pares clave/valor.

Un ejemplo común leerá un directorio lleno de archivos de texto y devolverá cada línea como un registro.

Función de mapa

La función Mapa toma una serie de pares clave/valor, procesa cada uno y genera cero o más pares clave/valor de salida. Los tipos de entrada y salida del mapa pueden ser (y a menudo son) diferentes entre sí.

Si la aplicación está contando palabras, la función de mapa dividirá la línea en palabras y generará un par clave/valor para cada palabra. Cada par de salida contendría la palabra como clave y el número de instancias de esa palabra en la línea como valor.

Función de partición

La función de partición de la aplicación asigna cada salida de la función de mapa a un reductor particular para fines de fragmentación . La función de partición recibe la clave y el número de reductores y devuelve el índice del reductor deseado .

Un valor predeterminado típico es aplicar hash a la clave y utilizar el valor hash módulo del número de reductores . Es importante elegir una función de partición que proporcione una distribución aproximadamente uniforme de datos por fragmento para fines de equilibrio de carga ; de lo contrario, la operación MapReduce puede retrasarse esperando a que finalicen los reductores lentos (es decir, los reductores asignaron las partes más grandes de los no particiones). datos particionados uniformemente).

Entre las etapas de mapa y reducción, los datos se mezclan (se clasifican en paralelo/se intercambian entre nodos) para mover los datos desde el nodo del mapa que los produjo al fragmento en el que se reducirán. A veces, la reproducción aleatoria puede tardar más que el tiempo de cálculo, dependiendo del ancho de banda de la red, las velocidades de la CPU, los datos producidos y el tiempo que tarda el mapa y reduce los cálculos.

Función de comparación

La entrada para cada Reducción se extrae de la máquina donde se ejecutó el Mapa y se clasifica utilizando la función de comparación de la aplicación .

Reducir la función

El marco llama a la función Reducir de la aplicación una vez para cada clave única en el orden ordenado. Reducir puede iterar a través de los valores asociados con esa clave y producir cero o más resultados .

En el ejemplo del recuento de palabras, la función Reducir toma los valores de entrada, los suma y genera una salida única de la palabra y la suma final.

Escritor de salida

El Output Writer escribe la salida de Reduce en el almacenamiento estable.

Antecedentes teóricos

Las propiedades de los monoides son la base para garantizar la validez de las operaciones de MapReduce. [18] [19]

En el paquete Algebird [20], una implementación Scala de Map/Reduce requiere explícitamente un tipo de clase monoide. [21]

Las operaciones de MapReduce tratan con dos tipos: el tipo A de datos de entrada que se asignan y el tipo B de datos de salida que se reducen.

La operación Map toma valores individuales de tipo A y produce, para cada a:A un valor b:B ; La operación Reducir requiere una operación binaria • definida sobre valores de tipo B ; Consiste en plegar todos los b:B disponibles a un solo valor.

Desde el punto de vista de los requisitos básicos, cualquier operación de MapReduce debe implicar la capacidad de reagrupar arbitrariamente los datos que se están reduciendo. Tal requisito equivale a dos propiedades de la operación •:

La segunda propiedad garantiza que, cuando se paraleliza sobre múltiples nodos, los nodos que no tienen datos para procesar no tendrán ningún impacto en el resultado.

Estas dos propiedades equivalen a tener un monoide ( B , • , e ) en valores de tipo B con operación • y con elemento neutro e .

No hay requisitos sobre los valores del tipo A ; Se puede utilizar una función arbitraria AB para la operación de mapa . Esto significa que tenemos un catamorfismo A* → ( B , •, e ). Aquí A* denota una estrella Kleene , también conocida como el tipo de listas sobre A.

La operación Shuffle per se no está relacionada con la esencia de MapReduce; es necesario para distribuir los cálculos a través de la nube.

De lo anterior se deduce que no todas las operaciones binarias de Reducción funcionarán en MapReduce. Aquí están los contraejemplos:

Consideraciones de rendimiento

No se garantiza que los programas MapReduce sean rápidos. El principal beneficio de este modelo de programación es explotar la operación aleatoria optimizada de la plataforma y solo tener que escribir las partes Mapa y Reducir del programa. Sin embargo, en la práctica, el autor de un programa MapReduce debe tener en cuenta el paso aleatorio; en particular, la función de partición y la cantidad de datos escritos por la función Mapa pueden tener un gran impacto en el rendimiento y la escalabilidad. Los módulos adicionales, como la función Combiner , pueden ayudar a reducir la cantidad de datos escritos en el disco y transmitidos a través de la red. Las aplicaciones MapReduce pueden lograr aceleraciones sublineales en circunstancias específicas. [22]

Al diseñar un algoritmo MapReduce, el autor debe elegir un buen equilibrio [11] entre los costos de cálculo y comunicación. El costo de comunicación a menudo domina el costo de cálculo, [11] [22] y muchas implementaciones de MapReduce están diseñadas para escribir todas las comunicaciones en el almacenamiento distribuido para la recuperación de fallos.

Al ajustar el rendimiento de MapReduce, se debe tener en cuenta la complejidad de mapear, mezclar, ordenar (agrupar por clave) y reducir. La cantidad de datos producidos por los mapeadores es un parámetro clave que desplaza la mayor parte del costo de cálculo entre mapeo y reducción. La reducción incluye la clasificación (agrupación de claves) que tiene una complejidad no lineal. Por lo tanto, los tamaños de partición pequeños reducen el tiempo de clasificación, pero existe una compensación porque tener una gran cantidad de reductores puede resultar poco práctico. La influencia del tamaño de la unidad dividida es marginal (a menos que se elija particularmente mal, digamos <1 MB). Las ganancias de algunos mapeadores que leen la carga de los discos locales, en promedio, son menores. [23]

Para procesos que se completan rápidamente y donde los datos caben en la memoria principal de una sola máquina o de un pequeño clúster, el uso de un marco MapReduce generalmente no es efectivo. Dado que estos marcos están diseñados para recuperarse de la pérdida de nodos completos durante el cálculo, escriben resultados provisionales en el almacenamiento distribuido. Esta recuperación de fallas es costosa y solo vale la pena cuando el cálculo involucra muchas computadoras y un tiempo de ejecución prolongado. Una tarea que se completa en segundos puede simplemente reiniciarse en caso de error, y la probabilidad de que al menos una máquina falle aumenta rápidamente con el tamaño del clúster. En tales problemas, las implementaciones que mantienen todos los datos en la memoria y simplemente reinician un cálculo en caso de fallas de nodos o, cuando los datos son lo suficientemente pequeños, soluciones no distribuidas, a menudo serán más rápidas que un sistema MapReduce.

Distribución y confiabilidad

MapReduce logra confiabilidad al dividir una cantidad de operaciones en el conjunto de datos en cada nodo de la red. Se espera que cada nodo informe periódicamente sobre el trabajo completado y las actualizaciones de estado. Si un nodo permanece en silencio durante más tiempo que ese intervalo, el nodo maestro (similar al servidor maestro en el sistema de archivos de Google ) registra el nodo como muerto y envía el trabajo asignado al nodo a otros nodos. Las operaciones individuales utilizan operaciones atómicas para nombrar las salidas de archivos como una verificación para garantizar que no se estén ejecutando subprocesos paralelos en conflicto. Cuando se cambia el nombre de los archivos, también es posible copiarlos con otro nombre además del nombre de la tarea (lo que permite efectos secundarios ).

Las operaciones de reducción funcionan de forma muy parecida. Debido a sus propiedades inferiores con respecto a las operaciones paralelas, el nodo maestro intenta programar operaciones de reducción en el mismo nodo o en el mismo bastidor que el nodo que contiene los datos en los que se está operando. Esta propiedad es deseable ya que conserva el ancho de banda en toda la red troncal del centro de datos.

Las implementaciones no son necesariamente muy confiables. Por ejemplo, en versiones anteriores de Hadoop , NameNode era un punto único de falla para el sistema de archivos distribuido. Las versiones posteriores de Hadoop tienen alta disponibilidad con una conmutación por error activa/pasiva para el "NameNode".

Usos

MapReduce es útil en una amplia gama de aplicaciones, incluida la búsqueda distribuida basada en patrones, la clasificación distribuida, la inversión de gráficos de enlaces web, la descomposición de valores singulares, [24] estadísticas de registros de acceso web, la construcción de índices invertidos , la agrupación de documentos , el aprendizaje automático , [25 ] y traducción automática estadística . Además, el modelo MapReduce se ha adaptado a varios entornos informáticos, como sistemas multinúcleo y de muchos núcleos, [26] [27] [28] grids de escritorio, [29] multiclúster, [30] entornos informáticos voluntarios, [31 ] entornos dinámicos de nube, [32] entornos móviles, [33] y entornos informáticos de alto rendimiento. [34]

En Google, se utilizó MapReduce para regenerar completamente el índice de Google de la World Wide Web . Reemplazó a los antiguos programas ad hoc que actualizaban el índice y ejecutaban los distintos análisis. [35] Desde entonces, el desarrollo en Google ha pasado a tecnologías como Percolator, FlumeJava [36] y MillWheel que ofrecen operación de transmisión y actualizaciones en lugar de procesamiento por lotes, para permitir la integración de resultados de búsqueda "en vivo" sin reconstruir el índice completo. [37]

Las entradas y salidas estables de MapReduce generalmente se almacenan en un sistema de archivos distribuido . Los datos transitorios generalmente se almacenan en el disco local y los reductores los recuperan de forma remota.

Crítica

falta de novedad

David DeWitt y Michael Stonebraker , científicos informáticos especializados en bases de datos paralelas y arquitecturas sin compartir , han criticado la variedad de problemas para los que se puede utilizar MapReduce. [38] Calificaron su interfaz de nivel demasiado bajo y cuestionaron si realmente representa el cambio de paradigma que sus defensores han afirmado que es. [39] Cuestionaron las afirmaciones de novedad de los defensores de MapReduce, citando a Teradata como un ejemplo de estado de la técnica que ha existido durante más de dos décadas. También compararon a los programadores de MapReduce con los programadores de CODASYL , señalando que ambos "escriben en un lenguaje de bajo nivel y realizan manipulación de registros de bajo nivel". [39] El uso de archivos de entrada por parte de MapReduce y la falta de soporte de esquemas impiden las mejoras de rendimiento habilitadas por características comunes del sistema de bases de datos, como árboles B y particiones hash , aunque proyectos como Pig (o PigLatin) , Sawzall , Apache Hive , [40] HBase [41] y Bigtable [41] [42] están abordando algunos de estos problemas.

Greg Jorgensen escribió un artículo rechazando estos puntos de vista. [43] Jorgensen afirma que todo el análisis de DeWitt y Stonebraker es infundado ya que MapReduce nunca fue diseñado ni tuvo la intención de ser utilizado como una base de datos.

Posteriormente, DeWitt y Stonebraker publicaron un estudio comparativo detallado en 2009 comparando el rendimiento de los enfoques MapReduce y RDBMS de Hadoop en varios problemas específicos. [44] Concluyeron que las bases de datos relacionales ofrecen ventajas reales para muchos tipos de uso de datos, especialmente en procesamientos complejos o cuando los datos se utilizan en toda una empresa, pero que MapReduce puede ser más fácil de adoptar para los usuarios para tareas de procesamiento simples o únicas. .

El paradigma de programación MapReduce también se describió en la tesis de 1985 de Danny Hillis [45] destinada a su uso en Connection Machine , donde se llamaba "xapping/reduction" [46] y dependía del hardware especial de esa máquina para acelerar tanto el mapeo como la reducción. . El dialecto utilizado finalmente para Connection Machine, el StarLisp de 1986 , tenía paralelo *mapy reduce!!, [47] que a su vez se basó en el Common Lisp de 1984 , que no tenía paralelo mapy reduceestaba integrado. [48] El enfoque en forma de árbol que el La arquitectura de hipercubo que utiliza Connection Machine para ejecutarse reduceen el tiempo [49] es efectivamente la misma que el enfoque mencionado en el documento de Google como trabajo anterior. [3] :  11

En 2010, Google obtuvo lo que se describe como una patente sobre MapReduce. La patente, presentada en 2004, puede cubrir el uso de MapReduce por parte de software de código abierto como Hadoop , CouchDB y otros. En Ars Technica , un editor reconoció el papel de Google en la popularización del concepto MapReduce, pero cuestionó si la patente era válida o novedosa. [50] [51] En 2013, como parte de su "Compromiso abierto de no afirmación de patentes (OPN)", Google se comprometió a utilizar la patente únicamente de forma defensiva. [52] [53] Se espera que la patente expire el 23 de diciembre de 2026. [54]

Marco de programación restringido

Las tareas de MapReduce deben escribirse como programas de flujo de datos acíclicos, es decir, un asignador sin estado seguido de un reductor sin estado, que son ejecutados por un programador de trabajos por lotes. Este paradigma dificulta las consultas repetidas de conjuntos de datos e impone limitaciones que se sienten en campos como el procesamiento de gráficos [55] donde los algoritmos iterativos que revisan un único conjunto de trabajo varias veces son la norma, así como en presencia de datos basados ​​en disco . con alta latencia , incluso el campo del aprendizaje automático donde se requieren múltiples pases a través de los datos, aunque los algoritmos pueden tolerar el acceso en serie a los datos en cada paso. [56]

Ver también

Implementaciones de MapReduce

Referencias

  1. ^ "Tutorial de MapReduce". Apache Hadoop . Consultado el 3 de julio de 2019 .
  2. ^ "Google destaca el funcionamiento interno del centro de datos". cnet.com . 30 de mayo de 2008. Archivado desde el original el 19 de octubre de 2013 . Consultado el 31 de mayo de 2008 .
  3. ^ ab "MapReduce: procesamiento de datos simplificado en grandes clústeres" (PDF) . googleusercontent.com .
  4. ^ Wickham, Hadley (2011). "La estrategia dividir-aplicar-combinar para el análisis de datos". Revista de software estadístico . 40 : 1–29. doi : 10.18637/jss.v040.i01 .
  5. ^ "Nuestra abstracción está inspirada en el mapa y reduce las primitivas presentes en Lisp y muchos otros lenguajes funcionales". -"MapReduce: procesamiento de datos simplificado en grandes clusters", por Jeffrey Dean y Sanjay Ghemawat; de investigación de Google
  6. ^ Lämmel, R. (2008). "Modelo de programación Map Reduce de Google : revisado". Ciencia de la programación informática . 70 : 1–30. doi :10.1016/j.scico.2007.07.001.
  7. ^ http://www.mcs.anl.gov/research/projects/mpi/mpi-standard/mpi-report-2.0/mpi2-report.htm Estándar MPI 2
  8. ^ "MPI Reduce y Allreduce · Tutorial de MPI". mpitutorial.com .
  9. ^ "Realización de rangos paralelos con MPI · Tutorial de MPI". mpitutorial.com .
  10. ^ "MongoDB: terrible rendimiento de MapReduce". Desbordamiento de pila. 16 de octubre de 2010. La implementación de MapReduce en MongoDB aparentemente tiene poco que ver con la reducción de mapas. Porque, por lo que leí, es de un solo subproceso, mientras que map-reduce está destinado a usarse en forma muy paralela en un clúster. ... MongoDB MapReduce tiene un solo subproceso en un solo servidor...
  11. ^ abc Ullman, JD (2012). "Diseñar buenos algoritmos MapReduce" . XRDS: Crossroads, la revista ACM para estudiantes . 19 : 30–34. doi :10.1145/2331042.2331053. S2CID  26498063.
  12. ^ Sverdlik, Yevgeniy (25 de junio de 2014). "Google vuelca MapReduce en favor de un nuevo sistema de análisis a hiperescala". Conocimiento del centro de datos . Consultado el 25 de octubre de 2015 ."Realmente ya no utilizamos MapReduce" [Urs Hölzle, vicepresidente senior de infraestructura técnica de Google]
  13. ^ Harris, Derrick (27 de marzo de 2014). "Apache Mahout, el proyecto de aprendizaje automático original de Hadoop, pasa de MapReduce". Gigaom . Consultado el 24 de septiembre de 2015 . Apache Mahout [...] se está uniendo al éxodo lejos de MapReduce.
  14. ^ Czajkowski, Grzegorz; Marián Dvorský; Jerry Zhao; Michael Conley (7 de septiembre de 2011). "Clasificación de petabytes con MapReduce: el próximo episodio" . Consultado el 7 de abril de 2014 .
  15. ^ "Tutorial de MapReduce".
  16. ^ "Apache/Hadoop-mapreduce". GitHub . 31 de agosto de 2021.
  17. ^ "Ejemplo: contar las apariciones de palabras". Investigación de Google . Consultado el 18 de septiembre de 2013 .
  18. ^ Fegaras, Leónidas (2017). "Un álgebra para el análisis distribuido de Big Data". Revista de programación funcional . 28 . doi :10.1017/S0956796817000193. S2CID  44629767.
  19. ^ Lin, Jimmy (29 de abril de 2013). "¡Monoidify! Monoides como principio de diseño para algoritmos MapReduce eficientes". arXiv : 1304.7544 [cs.DC].
  20. ^ "Álgebra abstracta para Scala".
  21. ^ "Codificación de mapa reducido como monoide con plegado a la izquierda". 5 de septiembre de 2016.
  22. ^ ab Senger, Hermes; Gil-Costa, Verónica; Arantes, Luciana; Marcondes, César AC; Marín, Mauricio; Sato, Liria M.; da Silva, Fabricio AB (1 de enero de 2015). "Análisis de escalabilidad y costos de BSP para operaciones de MapReduce". Concurrencia y Computación: Práctica y Experiencia . 28 (8): 2503–2527. doi :10.1002/cpe.3628. hdl : 10533/147670 . ISSN  1532-0634. S2CID  33645927.
  23. ^ Berlińska, Joanna; Drozdowski, Maciej (1 de diciembre de 2010). "Programación de cálculos divisibles de MapReduce". Revista de Computación Paralela y Distribuida . 71 (3): 450–459. doi :10.1016/j.jpdc.2010.12.004.
  24. ^ Bosagh Zadeh, Reza; Carlsson, Gunnar (2013). "Dimensión cuadrada de matriz independiente utilizando MapReduce" (PDF) . Universidad Stanford . arXiv : 1304.1467 . Código Bib : 2013arXiv1304.1467B . Consultado el 12 de julio de 2014 .
  25. ^ Ng, Andrew Y.; Bradski, Gary; Chu, Cheng-Tao; Olukotun, Kunle; Kim, Sang Kyun; Lin, Yi-An; Yu, YuanYuan (2006). "Map-Reduce para aprendizaje automático en multinúcleo". NIPS 2006.
  26. ^ Guardabosques, C.; Raghuraman, R.; Penmetsa, A.; Bradski, G.; Kozyrakis, C. (2007). "Evaluación de MapReduce para sistemas multinúcleo y multiprocesador". 2007 IEEE 13º Simposio Internacional sobre Arquitectura de Computadoras de Alto Rendimiento . pag. 13. CiteSeerX 10.1.1.220.8210 . doi :10.1109/HPCA.2007.346181. ISBN  978-1-4244-0804-7. S2CID  12563671.
  27. ^ Él, B.; Colmillo, W.; Luo, Q.; Govindaraju, NK; Wang, T. (2008). "Mars: un marco MapReduce en procesadores gráficos" (PDF) . Actas de la 17ª conferencia internacional sobre arquitecturas paralelas y técnicas de compilación - PACT '08 . pag. 260. doi :10.1145/1454115.1454152. ISBN 9781605582825. S2CID  207169888.
  28. ^ Chen, R.; Chen, H.; Zang, B. (2010). "Tiled-MapReduce: optimización del uso de recursos de aplicaciones de datos paralelos en multinúcleo con mosaico". Actas de la 19ª conferencia internacional sobre arquitecturas paralelas y técnicas de compilación - PACT '10 . pag. 523. doi : 10.1145/1854273.1854337. ISBN 9781450301787. S2CID  2082196.
  29. ^ Tang, B.; Moca, M.; Caballero, S.; Él, H.; Fedak, G. (2010). "Hacia MapReduce para la computación Grid de escritorio" (PDF) . 2010 Conferencia Internacional sobre P2P, Paralelo, Grid, Cloud e Internet Computing . pag. 193. CiteSeerX 10.1.1.671.2763 . doi :10.1109/3PGCIC.2010.33. ISBN  978-1-4244-8538-3. S2CID  15044391.
  30. ^ Luo, Y.; Guo, Z.; Sol, Y.; Plalé, B .; Qiu, J.; Li, W. (2011). "Un marco jerárquico para la ejecución de MapReduce entre dominios" (PDF) . Actas del segundo taller internacional sobre métodos computacionales emergentes para las ciencias de la vida (ECMLS '11) . CiteSeerX 10.1.1.364.9898 . doi :10.1145/1996023.1996026. ISBN  978-1-4503-0702-4. S2CID  15179363.
  31. ^ Lin, H.; Mamá, X.; Archuleta, J.; Feng, WC; Gardner, M.; Zhang, Z. (2010). "MOON: MapReduce sobre entornos oportunistas" (PDF) . Actas del 19º Simposio internacional ACM sobre informática distribuida de alto rendimiento - HPDC '10 . pag. 95. doi :10.1145/1851476.1851489. ISBN 9781605589428. S2CID  2351790.
  32. ^ Marozzo, F.; Talía, D.; Trunfio, P. (2012). "P2P-MapReduce: procesamiento de datos paralelo en entornos dinámicos de nube". Revista de Ciencias de la Computación y de Sistemas . 78 (5): 1382-1402. doi : 10.1016/j.jcss.2011.12.021 .
  33. ^ Dou, A.; Kalogeraki, V.; Gunópulos, D.; Mielikainen, T.; Tuulos, VH (2010). "Misco: un marco MapReduce para sistemas móviles". Actas de la Tercera Conferencia Internacional sobre Tecnologías PErvasivas Relacionadas con Entornos de Asistencia - PETRA '10 . pag. 1. doi :10.1145/1839294.1839332. ISBN 9781450300711. S2CID  14517696.
  34. ^ Wang, Yandong; Goldstone, Robin; Yu, Weikuan; Wang, Teng (mayo de 2014). "Caracterización y optimización de MapReduce residente en memoria en sistemas HPC". 2014 IEEE 28º Simposio Internacional de Procesamiento Distribuido y Paralelo . IEEE. págs. 799–808. doi :10.1109/IPDPS.2014.87. ISBN 978-1-4799-3800-1. S2CID  11157612.
  35. ^ "Cómo funciona Google". baselinemag.com. 7 de julio de 2006. En octubre, Google ejecutaba alrededor de 3.000 trabajos informáticos por día a través de MapReduce, lo que representa miles de días-máquina, según una presentación de Dean. Entre otras cosas, estas rutinas por lotes analizan las páginas web más recientes y actualizan los índices de Google.
  36. ^ Cámaras, Craig; Raniwala, Ashish; Perry, Frances; Adams, Esteban; Henry, Robert R.; Bradshaw, Robert; Weizenbaum, Nathan (1 de enero de 2010). "CanalJava". Actas de la 31ª Conferencia ACM SIGPLAN sobre diseño e implementación de lenguajes de programación (PDF) . págs. 363–375. doi :10.1145/1806596.1806638. ISBN 9781450300193. S2CID  14888571. Archivado desde el original (PDF) el 23 de septiembre de 2016 . Consultado el 4 de agosto de 2016 .
  37. ^ Peng, D. y Dabek, F. (octubre de 2010). Procesamiento incremental a gran escala mediante notificaciones y transacciones distribuidas. En OSDI (Vol. 10, págs. 1-15).
  38. ^ "Los expertos en bases de datos saltan al tiburón MapReduce".
  39. ^ ab David DeWitt ; Michael Stonebraker . "MapReduce: un gran paso atrás". craig-henderson.blogspot.com . Consultado el 27 de agosto de 2008 .
  40. ^ "Apache Hive - Índice de - Apache Software Foundation".
  41. ^ ab "HBase - Inicio de HBase - Apache Software Foundation".
  42. ^ "Bigtable: un sistema de almacenamiento distribuido para datos estructurados" (PDF) .
  43. ^ Greg Jorgensen. "Los expertos en bases de datos relacionales saltan al tiburón MapReduce". típicaprogrammer.com . Consultado el 11 de noviembre de 2009 .
  44. ^ Pavlo, Andrés; Paulson, Erik; Rasin, Alejandro; Abadi, Daniel J.; DeWitt, Deavid J.; Enloquecer, Samuel; Stonebraker, Michael. "Una comparación de enfoques para el análisis de datos a gran escala". Universidad de Brown . Consultado el 11 de enero de 2010 .
  45. ^ Hillis, W. Danny (1986). La máquina de conexión . Prensa del MIT . ISBN 0262081571.
  46. ^ "Resumen técnico de la máquina de conexión modelo CM-2" (PDF) . Corporación de Máquinas Pensantes . 1987-04-01 . Consultado el 21 de noviembre de 2022 .
  47. ^ "Suplemento del *Manual de referencia de Lisp" (PDF) . Corporación de Máquinas Pensantes . 1988-09-01 . Consultado el 21 de noviembre de 2022 .
  48. ^ "Folleto de arquitectura de Rediflow" (PDF) . Departamento de Ciencias de la Computación de la Universidad de Utah . 1986-04-05 . Consultado el 21 de noviembre de 2022 .
  49. ^ Ranka, Sanjay (1989). "2.6 Suma de datos". Algoritmos de hipercubo para procesamiento de imágenes y reconocimiento de patrones (PDF) . Universidad de Florida . Consultado el 8 de diciembre de 2022 .
  50. ^ Paul, Ryan (20 de enero de 2010). "Patente MapReduce de Google: ¿qué significa para Hadoop?". Ars Técnica . Consultado el 21 de marzo de 2021 .
  51. ^ "Patente de Estados Unidos: 7650331 - Sistema y método para el procesamiento eficiente de datos a gran escala". uspto.gov .
  52. ^ Nazer, Daniel (28 de marzo de 2013). "Google hace un compromiso abierto de no afirmación de patentes y propone nuevos modelos de licencia". Fundación Frontera Electrónica . Consultado el 21 de marzo de 2021 .
  53. ^ Rey, Raquel (2013). "Google amplía el compromiso de patente abierta a 79 más sobre gestión de centros de datos". ZDNet . Consultado el 21 de marzo de 2021 .
  54. ^ "Sistema y método para el procesamiento eficiente de datos a gran escala". Búsqueda de patentes en Google. 18 de junio de 2004 . Consultado el 21 de marzo de 2021 .
  55. ^ Gupta, Upa; Fegaras, Leónidas (6 de octubre de 2013). "Análisis de gráficos basado en mapas en MapReduce" (PDF) . Actas: Conferencia internacional IEEE 2013 sobre Big Data . Conferencia Internacional IEEE 2013 sobre Big Data. Santa Clara, California : IEEE . págs. 24-30.
  56. ^ Zaharia, Matei; Chowdhury, Mosharaf; Franklin, Michael; Shenker, Scott; Stoica, Ion (junio de 2010). Spark: Computación en clústeres con conjuntos de trabajo (PDF) . Nube caliente 2010.