MapReduce
Objetivos Comprender la necesidad de un sistema de archivos distribuido. Comprender la infraestructura sobre la cual se implementa MapReduce. Escribir procesamiento de datos usando la abstraccion MapReduce.
Motivation: Large Scale Data Processing  Many tasks: Process lots of data to produce other data  Want to use hundreds or thousands of CPUs  ... but this needs to be easy  MapReduce provides:  Automatic parallelization and distribution  Fault-tolerance  I/O scheduling  Status and monitoring
Programming model  Input & Output: each a set of key/value pairs  Programmer specifies two functions:   map (in_key, in_value) ->  list(out_key, intermediate_value)     reduce(out_key, list(intermediate_value)) -> list(out_value)     Combines all intermediate values for a particular key  Produces a set of merged output values (usually just one)  Inspired by similar primitives in LISP and other languages
Consideraciones en la Infraestructura
Sistema de Archivos Distribuido Permiten representar datos que estan repartidos en un cluster de servidores como una sola entidad logica.
Sistemas de Archivos Distribuidos GFS (Google File System) gfs://pandora/box/ HDFS (Hadoop Distributed File System) hdfs://pandora/box/
MapReduce Permite procesar los datos que estan en el cluster de manera paralela aprovechando el sistema de archivos distribuido. Cada servidor del cluster trata de procesar la parte de los datos que posee localmente. Existen dos fases principales en el proceso: Mapeo y Reduccion.
Mapeo El metodo MAP recibe como entrada un par (clave, valor) y su salida es uno o varios pares (clave-i, valor-i). 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).
Reduccion El metodo REDUCE recibe como entrada un par (clave, lista de valores) y la salida es un par (clave, valor). 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)
Ejemplo Mapper class CountWordMapper extends Mapper{ void Map(id_archivo, texto) { string []palabras = texto.split(” ”); for( i = 0; i < palabras.length; ++ i) { Output(palabras[ i ], 1); } } }
Ejemplo Reducer class WordCountReducer extends Reducer { void Reduce(palabra, listaOcurrencias) { long total = 0; for (int i = 0; i < listaOcurrencias.size(); ++i) { total + = listaOcurrencias.get(i); } Output(palabra, total); } }
Implementaciones de MapReduce Apache Hadoop Para distribuir tareas entre los servidores de un cluster   QT Concurrent Para distribuir tareas entre multiples procesadores.
A mapper with QT Concurrent   QMap<QString, int> map(const QString &file) {      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; }
A Reducer with QT Concurrent void reduce(QMap<QString, int> &result,                        const QMap<QString, int> &w) {      QMapIterator<QString, int> i(w);     while (i.hasNext()) {         i.next();         result[i.key()] += i.value();     } }
        QStringList files = findFiles(&quot;/source-code&quot;,                                                 QStringList() << &quot;*.cpp&quot; << &quot;*.h&quot;); QMap<QString, int> total = mappedReduced( files,                                                                               map,                                                                               reduce); A MapReduce call with QT Concurrent
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/ 

MapReduce

  • 1.
  • 2.
    Objetivos Comprender lanecesidad de un sistema de archivos distribuido. Comprender la infraestructura sobre la cual se implementa MapReduce. Escribir procesamiento de datos usando la abstraccion MapReduce.
  • 3.
    Motivation: Large ScaleData Processing Many tasks: Process lots of data to produce other data Want to use hundreds or thousands of CPUs ... but this needs to be easy MapReduce provides: Automatic parallelization and distribution Fault-tolerance I/O scheduling Status and monitoring
  • 4.
    Programming model Input & Output: each a set of key/value pairs Programmer specifies two functions:   map (in_key, in_value) ->  list(out_key, intermediate_value)   reduce(out_key, list(intermediate_value)) -> list(out_value)   Combines all intermediate values for a particular key Produces a set of merged output values (usually just one) Inspired by similar primitives in LISP and other languages
  • 5.
    Consideraciones en laInfraestructura
  • 6.
    Sistema de ArchivosDistribuido Permiten representar datos que estan repartidos en un cluster de servidores como una sola entidad logica.
  • 7.
    Sistemas de ArchivosDistribuidos GFS (Google File System) gfs://pandora/box/ HDFS (Hadoop Distributed File System) hdfs://pandora/box/
  • 8.
    MapReduce Permite procesarlos datos que estan en el cluster de manera paralela aprovechando el sistema de archivos distribuido. Cada servidor del cluster trata de procesar la parte de los datos que posee localmente. Existen dos fases principales en el proceso: Mapeo y Reduccion.
  • 9.
    Mapeo El metodoMAP recibe como entrada un par (clave, valor) y su salida es uno o varios pares (clave-i, valor-i). 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).
  • 10.
    Reduccion El metodoREDUCE recibe como entrada un par (clave, lista de valores) y la salida es un par (clave, valor). 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)
  • 11.
    Ejemplo Mapper classCountWordMapper extends Mapper{ void Map(id_archivo, texto) { string []palabras = texto.split(” ”); for( i = 0; i < palabras.length; ++ i) { Output(palabras[ i ], 1); } } }
  • 12.
    Ejemplo Reducer classWordCountReducer extends Reducer { void Reduce(palabra, listaOcurrencias) { long total = 0; for (int i = 0; i < listaOcurrencias.size(); ++i) { total + = listaOcurrencias.get(i); } Output(palabra, total); } }
  • 13.
    Implementaciones de MapReduceApache Hadoop Para distribuir tareas entre los servidores de un cluster   QT Concurrent Para distribuir tareas entre multiples procesadores.
  • 14.
    A mapper withQT Concurrent   QMap<QString, int> map(const QString &file) {     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; }
  • 15.
    A Reducer withQT Concurrent void reduce(QMap<QString, int> &result,                       const QMap<QString, int> &w) {     QMapIterator<QString, int> i(w);     while (i.hasNext()) {         i.next();         result[i.key()] += i.value();     } }
  • 16.
           QStringList files = findFiles(&quot;/source-code&quot;,                                                QStringList() << &quot;*.cpp&quot; << &quot;*.h&quot;); QMap<QString, int> total = mappedReduced( files,                                                                              map,                                                                              reduce); A MapReduce call with QT Concurrent
  • 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/