MapReduce: diferència entre les revisions

Contingut suprimit Contingut afegit
usos
m neteja i estandardització de codi
Línia 10:
 
Hi ha[[Biblioteca_informàtica | llibreries de funcions]] MapReduce per a molts [[llenguatge de programació |llenguatges de programació]], amb diversos nivells d'optimització. Una de les més populars és la d'Apache Hadoop. El nom MapReduce inicialment feia referència a la tecnologia privativa de [[Google]], però fa temps que s'utilitza com a terme genèric.
 
== Logical view ==
No tots els processos poden ser abordats des del ''framework'' MapReduce. Concretament, són abordables només aquells que es poden disgregar en les operacions de ''map()'' i de ''reduce()'' i això és important a l'hora de poder triar aquest ''framework'' per resoldre un problema.
 
Les funcions Map() i ''Reduce()'' de ''MapReduce'' estan definides ambdues respecte a dades estructurades en tuples de tipus (clau, valor).
 
=== Funció Map() ===
Linha 34 ⟶ 35:
 
=== Exemples ===
 
==== Recompte de paraules ====
L'exemple canònic de ''MapReduce'' compta l'aparició de cada paraula en un conjunt de documents
Línia 42:
'''for each''' word w '''in''' document:
emit (w, 1)
 
'''function''' reduce(String word, Iterator partialCounts):
''// word: a word''
Línia 50:
sum += pc
emit (word, sum)
Aquí, cada document es divideix en paraules, i cada paraula es compta amb la funció ''map()'' utilitzant la paraula com a clau de resultat. El ''framework'' agrupa tots els parells amb la mateixa clau i els introdueix a la mateixa crida per reduir. Per tant, aquesta funció només necessita sumar tots els seus valors d'entrada per trobar les aparences totals d'aquesta paraula.
 
== Dataflow ==
L'arquitectura de MapReduce s'adhereix al principi [[Principi open/closed|open/closed]], en el qual el codi es divideix en entitats "tancades" no modificables i entitats "obertes" extensibles. L'entitat no modificable del MapReduce es troba a l'ordenació. Per la seva part, les entitats extensibles són:
Linha 64 ⟶ 65:
El lector d'<nowiki/>''inputs'' divideix l'<nowiki/>''input'' perquè el framework assigni cadascuna d'aquestes divisions a una funció ''Map'' diferent. El lector d'''inputs'' llegeix les dades de memòria i genera parelles clau/valor.
 
Per exemplificar, el lector d'''inputs'', llegeix un directori on es troben arxius de text i retorna cada línia en forma de [[Registre (estructura de dades)|registre]].
 
=== Funció ''Map'' ===
Linha 107 ⟶ 108:
== Usos ==
Per norma general, s'utilitza MapReduce en aquells problemes de [[Computació concurrent]] entre els quals s'hi troben involucrats grans datasets que han de ser processats per una gran quantitat de computadores (nodes), als que ens referim de forma col·lectiva com a [[Clúster|clústers]] (sempre que tots els nodes es trobin a la mateixa xarxa d'àrea local i utilitzin el mateix hardware), o a [[Graella de càlcul|graelles de càlcul]] (si els nodes es comporten de forma distribuïda al llarg de zones geogràfiques o administratives extenses, i que generalment posseeixen un hardware més heterogeni). El processament paral·lel es pot donar tant amb l'ús de dades emmagatzemades tant en [[Sistema de fitxers|sistemes de fitxers]] (no estructurats) o en una [[Base de dades|database]] (estructurats). Per aquesta raó s'usa en aplicacions que posseeixen dades a gran escala, tals com les aplicacions paral·leles, la [[indexació web]], [[Mineria de dades|data mining]] i la simulació científica.
 
 
 
== Referències ==