MapReduce

1,994 views

Published on

MapReduce talk

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,994
On SlideShare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
47
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

MapReduce

  1. 1. MapReduce
  2. 2. Objetivos <ul><ul><li>Comprender la necesidad de un sistema de archivos distribuido. </li></ul></ul><ul><ul><li>Comprender la infraestructura sobre la cual se implementa MapReduce. </li></ul></ul><ul><ul><li>Escribir procesamiento de datos usando la abstraccion MapReduce. </li></ul></ul>
  3. 3. <ul><li>Motivation: Large Scale Data Processing </li></ul><ul><li>Many tasks: Process lots of data to produce other data </li></ul><ul><li>Want to use hundreds or thousands of CPUs </li></ul><ul><ul><li>... but this needs to be easy </li></ul></ul><ul><li>MapReduce provides: </li></ul><ul><ul><li>Automatic parallelization and distribution </li></ul></ul><ul><ul><li>Fault-tolerance </li></ul></ul><ul><ul><li>I/O scheduling </li></ul></ul><ul><ul><li>Status and monitoring </li></ul></ul>
  4. 4. <ul><li>Programming model </li></ul><ul><li>Input & Output: each a set of key/value pairs </li></ul><ul><li>Programmer specifies two functions: </li></ul><ul><li>  </li></ul><ul><li>map (in_key, in_value) ->  </li></ul><ul><li>list(out_key, intermediate_value) </li></ul><ul><li>  </li></ul><ul><li>reduce(out_key, list(intermediate_value)) -> list(out_value) </li></ul><ul><li>  </li></ul><ul><ul><li>Combines all intermediate values for a particular key </li></ul></ul><ul><ul><li>Produces a set of merged output values (usually just one) </li></ul></ul><ul><li>Inspired by similar primitives in LISP and other languages </li></ul>
  5. 5. Consideraciones en la Infraestructura
  6. 6. Sistema de Archivos Distribuido <ul><ul><li>Permiten representar datos que estan repartidos en un cluster de servidores como una sola entidad logica. </li></ul></ul>
  7. 7. Sistemas de Archivos Distribuidos <ul><ul><li>GFS (Google File System) gfs://pandora/box/ </li></ul></ul><ul><ul><li>HDFS (Hadoop Distributed File System) hdfs://pandora/box/ </li></ul></ul>
  8. 8. MapReduce <ul><ul><li>Permite procesar los datos que estan en el cluster de manera paralela aprovechando el sistema de archivos distribuido. </li></ul></ul><ul><ul><li>Cada servidor del cluster trata de procesar la parte de los datos que posee localmente. </li></ul></ul><ul><ul><li>Existen dos fases principales en el proceso: Mapeo y Reduccion. </li></ul></ul>
  9. 9. Mapeo <ul><ul><li>El metodo MAP recibe como entrada un par (clave, valor) y su salida es uno o varios pares (clave-i, valor-i). </li></ul></ul><ul><ul><li>Si se tiene un conjunto de archivos de texto que se desea procesar, los pares clave valor de entrada podrian ser (nombre de archivo, datos del archivo). </li></ul></ul>
  10. 10. Reduccion <ul><ul><li>El metodo REDUCE recibe como entrada un par (clave, lista de valores) y la salida es un par (clave, valor). </li></ul></ul><ul><ul><li>La entrada para un REDUCE que cuenta el numero de ocurrencias de cada palabra para un texto seria (palabra, listado con cada una de las cantidades de veces que aparecio esa palabra para cada resultado de salida del mapper) </li></ul></ul>
  11. 11. Ejemplo Mapper <ul><li>class CountWordMapper extends Mapper{ </li></ul><ul><ul><li>void Map(id_archivo, texto) { </li></ul></ul><ul><ul><li>string []palabras = texto.split(” ”); </li></ul></ul><ul><ul><li>for( i = 0; i < palabras.length; ++ i) { </li></ul></ul><ul><ul><ul><li>Output(palabras[ i ], 1); </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul>
  12. 12. Ejemplo Reducer <ul><li>class WordCountReducer extends Reducer { </li></ul><ul><ul><li>void Reduce(palabra, listaOcurrencias) { </li></ul></ul><ul><ul><li>long total = 0; </li></ul></ul><ul><ul><ul><li>for (int i = 0; i < listaOcurrencias.size(); ++i) { </li></ul></ul></ul><ul><ul><ul><ul><li>total + = listaOcurrencias.get(i); </li></ul></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>Output(palabra, total); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>
  13. 13. Implementaciones de MapReduce <ul><ul><li>Apache Hadoop Para distribuir tareas entre los servidores de un cluster   </li></ul></ul><ul><ul><li>QT Concurrent Para distribuir tareas entre multiples procesadores. </li></ul></ul>
  14. 14. A mapper with QT Concurrent <ul><li>  QMap<QString, int> map(const QString &file) { </li></ul><ul><li>    QFile f(file);     f.open(QIODevice::ReadOnly);     QTextStream textStream(&f);     QMap<QString, int> wordCount;     while (textStream.atEnd() == false)         foreach (QString word, textStream.readLine().split(&quot; &quot;))             wordCount[word] += 1;     return wordCount; } </li></ul>
  15. 15. A Reducer with QT Concurrent <ul><li>void reduce(QMap<QString, int> &result,  </li></ul><ul><li>                     const QMap<QString, int> &w) { </li></ul><ul><li>    QMapIterator<QString, int> i(w);     while (i.hasNext()) {         i.next();         result[i.key()] += i.value();     } } </li></ul>
  16. 16. <ul><li>  </li></ul><ul><li>  </li></ul><ul><li>  </li></ul><ul><li>  QStringList files = findFiles(&quot;/source-code&quot;,  </li></ul><ul><li>                                              QStringList() << &quot;*.cpp&quot; << &quot;*.h&quot;); </li></ul><ul><li>QMap<QString, int> total = mappedReduced( files,  </li></ul><ul><li>                                                                            map,  </li></ul><ul><li>                                                                            reduce); </li></ul>A MapReduce call with QT Concurrent
  17. 17. Fuentes MapReduce: Simplified Data Processing on Large Clusters http://labs.google.com/papers/mapreduce.html MapReduce in QT Concurrent http://labs.trolltech.com/blogs/2007/04/26/ mapreduce-in-qt-concurrent/   Apache Hadoop  http://hadoop.apache.org/core/ 

×