INTRODUCCION
En la actualidad se han implementado cientos de cálculos que procesan grandes cantidades
de datos, a pesar de que la mayoría de estos cálculos son conceptualmente sencillos.
Sin embargo, los datos de entrada suelen ser grandes y los cálculos deben distribuirse entre
cientos o miles de máquinas para finalizar en un tiempo razonable, el cual genera varias líneas
de código complejo.
La abstracción presentada está inspirada en el mapa y reducir primitivas presentes en Lisp y
muchos otros lenguajes funcionales, para los cálculos se aplicaba un mapa de operación a
cada "registro“ lógico en nuestra entrada para calcular un conjunto de pares clave, y luego
aplicar un reducir operación a todos los valores que compartían la misma clave.
Las principales contribuciones de este trabajo son una interfaz simple y poderosa que permite la
paralelización y distribución automáticas de cálculos a gran escala, que tiene un alto rendimiento en
grandes grupos de PC comerciales.
Modelo de programación
El usuario de la biblioteca de MapReduce expresa el calculo como dos funciones: Mapa y
Reducir.
Mapa, escrito por el usuario, toma un par de entrada y produce un conjunto de intermedio pares
clave/valor, agrupados para pasar a la función reducir.
La función Reducir, también escrita por el usuario, acepta una clave intermedia y un conjunto
de valores para esa clave, fusiona estos valores para formar un conjunto de valores pequeños.
Esto nos permite manejar listas de valores que son demasiado grandes para caber en la
memoria.
Ejemplo:
Considere el problema de contar el número de ocurrencias de cada palabra en una gran
colección de documentos. El usuario escribiría un código similar al siguiente pseudocódigo:
map(String key, String value):
// key: document name
// value: document contents
for each word w in value:
EmitIntermediate(w, "1");
reduce(String key, Iterator values):
// key: a word
// values: a list of counts
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
El mapa emite cada palabra más un conteo asociado de ocurrencias (solo '1' en este ejemplo
simple). El reducir la función suma todos los recuentos emitidos para una palabra en particular.
Además, el usuario escribe código para completar en un mapreduce los nombres de la entrada,
salida y parámetros de ajuste opcionales.
Tipos
Aunque el pseudocódigo anterior está escrito en términos de entradas y salidas de cadenas,
conceptualmente, las funciones map y reduce proporcionadas por el usuario tienen tipos
asociados:
Mapa (k1,v1) → lista (k2, v2)
Reducir (k2, lista (v2)) → lista (v2)
Es decir, las claves y valores de entrada se extraen de un dominio diferente al de las claves y
valores de salida. Además, las claves y los valores intermedios son del mismo dominio que las
claves y los valores de salida.
Más ejemplos:
Aquí hay algunos ejemplos simples de programas interesantes que pueden expresarse
fácilmente como cálculos de MapReduce:
Grep distribuido: La función mapa emite una línea si coincide con un patrón proporcionado. La
función de reducción copia los datos intermedios suministrados en la salida.
Recuento de frecuencia de acceso a URL: La función de mapa procesa registros de
solicitudes y salidas de páginas web. La función reduce suma todos los valores para la misma
URL y emite un 〈URL, recuento total〉.
Gráfico de enlace web inverso: Las salidas de la función de mapa 〈objetivo, fuente〉 pares para
cada enlace a un objetivo URL para la página llamada fuente. La función de reducción
concatena la lista de todas las URL de origen asociadas con una URL de destino dada y emite el
par: 〈objetivo,lista(fuente)〉
Término-Vector por Host: Un vector de términos resume las palabras más importantes de un
documento como una lista de 〈palabra, frecuencia〉 pares.
La función mapa emite un 〈nombre de host, vector de término〉 par para cada documento de
entrada.
La función reduce suma todos los vectores desechando los términos poco frecuentes y luego
emite un último 〈nombre de host, vector de término〉 par.
Índice invertido: La función mapa analiza cada documento y emite una secuencia de 〈palabra,
identificación del documento〉 pares y la función reduce acepta todos los pares de una palabra
determinada, ordena los ID de documentos correspondientes y emite <palabra, lista(identificación
del documento)> par.
Clasificación distribuida: La función mapa extrae la clave de cada registro y emite una 〈clave,
registro〉 par. La función reduce emite todos los pares sin cambios.
Implementación
Son posibles muchas implementaciones diferentes de la interfaz MapReduce. La elección
correcta depende del entorno de trabajo:
1. Las máquinas suelen ser procesadores x86 de doble procesador que ejecutan Linux, con
2-4 GB de memoria por máquina.
2. Se utiliza hardware de red básico, normalmente 100 megabits/segundo o 1
gigabit/segundo a nivel de máquina.
3. Un clúster consta de cientos o miles de máquinas, que pueden presentar fallas comunes.
4. El almacenamiento lo proporcionan discos IDE económicos conectados directamente a las
máquinas individuales que utilizan un sistema de archivos distribuido para administrar los
datos.
5. Los usuarios envían trabajos a un sistema de programación. Cada trabajo consta de un
conjunto de tareas y el planificador lo asigna a un conjunto de máquinas disponibles dentro
de un clúster.
Descripción general de la ejecución
Las invocaciones de mapas se distribuyen en múltiples máquinas mediante la partición
automática de los datos de entrada en un conjunto de divisiones.
Las divisiones de entrada se pueden procesar en paralelo por diferentes máquinas. Reducir las
invocaciones se distribuyen particionando la clave intermedia espacio en R piezas utilizando una
función de partición, especificada por el usuario.
Cuando el programa de usuario llama a la función MapReduce ocurre la siguiente secuencia de
acciones que se muestra en la figura:
1. La biblioteca MapReduce en el programa de usuario primero divide los archivos de entrada
en M piezas de 16 megabytes a 64 megabytes (MB) por pieza, luego realiza copias del
programa en un grupo de máquinas.
2. Una de las copias del programa es especial: el maestro. El resto son trabajadores a los que
el maestro les asigna a cada uno una tarea de mapa o de reducción.
3. Un trabajador al que se le asigna la tarea de mapa lee el contenido de la división de entrada,
analiza los pares clave/valor de los datos y pasa cada par a la clave definida por el usuario,
que se almacenan en memoria.
4. Periódicamente, los pares almacenados en búfer se escriben en el disco local, se dividen en
R regiones por la función de Partición, se devuelven al maestro quien reenvía estas
ubicaciones a los trabajadores de reducción.
5. Cuando el maestro notifica a un trabajador de reducción sobre estas ubicaciones, utiliza
procedimientos remotos para leer los datos almacenados, después los ordena por las claves
intermedias para que se agrupen. Si la cantidad de datos intermedios es demasiado grande
para caber en la memoria, se utiliza una ordenación externa.
6. El trabajador de reducción itera sobre los datos intermedios ordenados y para cada clave
intermedia única, pasa la clave y el conjunto de valores intermedios al usuario Reducir función.
7. Cuando se hayan completado todas las tareas de asignación y reducción, el maestro activa
el programa de usuario, el cual vuelve al código de usuario.
Estructuras de datos maestros
El maestro es el conducto a través del cual se propaga la ubicación de las regiones de archivos
Intermedios desde las tareas de mapa a reducción, para las tareas de mapa Completadas
almacena las ubicaciones y tamaño de las R regiones de archivos intermedios se Actualiza
la ubicación después de cada tarea que se envía a reducción.
Tolerancia a fallas
Dado que la biblioteca de MapReduce usara cientos o miles de máquinas, también debe tolerar
las fallas sin problemas.
Fallo del trabajador
El maestro hace ping a cada trabajador periódicamente, si no recibe respuesta después de cierto
Tiempo se considera como fallido.
Después de que el trabajador complete una tarea de mapa o se encuentre en progreso de la tarea si
este es atendido por un trabajador fallido, vuelve a su estado inicial inactivo.
Las tareas de mapas completadas se vuelven a ejecutar en caso de falla porque su salida se
almacena en los discos locales de la máquina fallida. Si se atiende una tarea con mas de 2
trabajadores se notifican a los demás trabajadores para evaluar si se presentan fallas
Indicar su importancia y uso en el ambiente de “Cloud Computing”
Por lo general, las empresas prefieren ejecutar los clúster de mapreduce en recursos de nubes
públicas, privadas o híbridas antes que en hardware porque no solo se benefician de más
flexibilidad y disponibilidad.
Cuestionario:
1. ¿Cuáles son los principales competidores de MapReduce y cuáles son sus ventajas y
desventajas?
R. Entres sus competidores tenemos a mongoDB, apache spark, apache storm, lenguaje R,
Python. Las ventajas son: Fácil de programar, Escalabilidad, Alta tolerancia a fallas y Alto
rendimiento.
En cambio las desventajas son: No es adecuado para el cálculo en tiempo real, para la
informática en streaming, para el cálculo de DAG (gráfico dirigido):
2. ¿Cuál es el comportamiento de MapReduce cuando se necesita procesamiento en tiempo
real?
R. MapReduce puede no ser la opción más rápida para procesamiento en tiempo real ya que al
realizar procesos paralelos se tiene mayor retardo en el mismo cambio de función.
3. ¿Siempre es posible implementar una secuencia de funciones Map y Reduce para todas las
aplicaciones?
R. No siempre es muy fácil implementar todos y cada uno de los elementos en una secuencia de
funciones Map y Reduce en todos los casos aunque se tiene una alta tolerancia a fallas.
4. ¿Qué sucedió cuando los procesos intermedios necesitan comunicarse entre sí debido a que
los trabajos Map y Reduce se ejecutan de forma aislada?
R. Los procesos intermedios se ordenan para que los pares clave-valor sean contiguos (fase de
ordenación, sort fase), Si se ejecuta el modo distribuido estos necesitan ser primero copiados al
filesystem local en la fase de copia. Una vez que todos los datos están disponibles a nivel local
se adjuntan a una fase de adición, el archivo se fusiona (merge) de forma ordenado.
5. ¿Cuál es la diferencia para configurar y administrar un sistema independiente en comparación
con un sistema distribuido?
R. En un sistema distribuido se tienen Datos compartidos: Permite que distintos usuarios tengan
acceso a una base de datos. Dispositivos compartidos: Permite compartir un recurso costoso
entre distintos usuarios, como plotters o impresoras láser. Comunicación: Brinda la posibilidad
de comunicación de usuario a usuario Confiabilidad: Facilita la repartición de la carga de trabajo
entre las distintas computadoras con base en su funciones y capacidades, brindando una mayor
flexibilidad y confiabilidad al sistema.