viernes, 30 de mayo de 2014

Map/Reduce o como aprendí a dejar de preocuparme y amar Hadoop.

En esencia, Map/Reduce se basa en repartir el trabajo para calcular (Map) y juntar los resultados (Reduce).

En un trabajo repartido entre varios, el resultado de los cálculos de cada trabajador (Map) es parcial, por lo que luego es necesario juntar los resultados de todos los trabajadores (Reduce) para obtener el resultado final.



Supongamos que tenemos una montaña desordenada de 3000 pares de calcetines de diferentes marcas: CK, Zara, Abanderado,  UNO y NISU, y que los calcetines tienen diferentes diseños: A rayas, con topitos y lisos.

Como los trabajadores de nuevas tecnologías valemos tanto para un roto como para un descosido, nos encargan la tarea de contar cuántos calcetines de rayas tenemos de cada marca.

Ante una tarea tan larga y aburrida, se nos ocurre que, lo mejor es pedir ayuda a esos 2 amigos que te deben un favor de cuando les ayudaste con su maldita mudanza; así que ni corto ni perezoso divides la montaña en 3 cajas y les pides que se pongan a contar (Map) con los siguientes resultados:

                            Marca                                   Nº con Rallas
Caja 1                       CK                                          200     
                             Abanderado                                  80      
                             UNO                                         10      
                             NISU                                        30   
   
Caja 2                       CK                                          50      
                             Zara                                        600     
                             Abanderado                                  90      

Caja 3                       CK                                          70      
                             Abanderado                                  100  

Y ahora es cuestión de juntar las cuentas de todos (Reduce) cogiendo cada uno de los colegas un trozo de la lista para dividirnos también el trabajo de sumar: (Esto parece tonto con este ejemplo pero si entre los 3000 calcetines se encontrasen 200 marcas diferentes os aseguro que también pediríais ayuda a los colegas para esto)

CK                    200                             CK                    200
Abanderado            80        -->                Abanderado               80 
UNO                   10                              UNO                   10 
                                                                               
NISU                  30                             NISU                   30 
CK                    50        -->                  CK                     50 
Zara                  600                           Zara                   600 
                                                                               
Abanderado            90        -->              Abanderado                190 
CK                    70                             CK                     70 
Abanderado            100                                                    

Y repetimos la operación de reducción; notad que, en cada paso se amplía el número de elementos que se procesan en conjunto y por lo tanto se reduce el número de grupos.

CK                   200                  CK                   200
Abanderado           80      -->          Abanderado           80 
UNO                  10                   UNO                  10 
NISU                 30                   NISU                 30 
                                                                  
CK                   50                   CK                   120
Zara                 600     -->          Zara                 600
Abanderado           190                  Abanderado           190
CK                   70                                        

Y después de unos pasos más llegamos al resultado definitivo una vez que no se repiten marcas de ropa en la lista (están todas "reducidas"):

CK                   320                  CK                   320
Abanderado           80                   Abanderado           270
UNO                  10        -->        UNO                  10 
NISU                 30                   NISU                 30 
Zara                 600                  Zara                 600
Abanderado           190                                        

Antes de acabar me gustaría remarcar ciertas propiedades de esta técnica para dejar tu armario maqueado:
  • El formato de entrada y salida de la función de Reducción tienen que coincidir. Esto debe ser así puesto que la salida se usa para volverla a procesar de nuevo con la misma función.
  • En caso de que se agreguen un montón de calcetines CK nuevos no es necesario recalcular los 3000 pares. Simplemente se volverían a Mapear y Reducir los calcetines de marca CK permitiendo que, una vez el trabajo gordo esté hecho, sea mucho menos costoso mantener los cálculos actualizados. 

No hay comentarios:

Publicar un comentario