MapReduce: diferència entre les revisions

Contingut suprimit Contingut afegit
m neteja i estandardització de codi
m Robot treu puntuació penjada després de referències
Línia 52:
Cada crida a la funció ''Reduce()'' normalment produeix un parell de valors de clau o un retorn buit, encara que una crida pot retornar més d'una parella de clau-valor. Els retorns de totes les crides es recullen com a llista de resultats desitjada.
 
Així doncs, el ''framework'' de ''MapReduce'' transforma una llista de parelles (clau, valor) en una altra llista de parelles (clau, valor).<ref>{{Cite web|url=https://github.com/apache/hadoop-mapreduce/blob/307cb5b316e10defdbbc228d8cdcdb627191ea15/src/java/org/apache/hadoop/mapreduce/Reducer.java#L148|title=Apache/Hadoop-mapreduce|website=[[GitHub]]|date=31 August 2021}}</ref>. Aquest comportament és diferent de la combinació típica de programació funcional i mapa de reducció, que accepta una llista de valors arbitraris i retorna un únic valor que combina tots els valors retornats pel mapa.
 
És [[Condició necessària i suficient|necessari però no suficient]] tenir implementacions del mapa i reduir abstraccions per implementar ''MapReduce''. Les implementacions distribuïdes de ''MapReduce'' requereixen un mitjà per connectar els processos que realitzen les fases ''Map'' i ''Reduce''. Aquest pot ser un sistema de fitxers distribuït. Hi ha altres opcions possibles, com ara la transmissió directa dels mappers als reductors, o que els processadors de mapeig ofereixin els seus resultats als reductors que els consulten.
Línia 113:
No es garanteix que els programes MapReduce siguin ràpids. El principal avantatge d'aquest model de programació és explotar l'operació shuffle optimitzada de la plataforma, i només haver d'escriure les parts Map i Reduce del programa. No obstant això, en la pràctica, l'autor d'un MapReduce ha de tenir en compte el shuffle, ja que la quantitat de dades escrites per la funció Map pot tenir un gran impacte en el rendiment i l'escalabilitat.<ref name=":0">{{Cite journal|title = BSP cost and scalability analysis for MapReduce operations|journal = Concurrency and Computation: Practice and Experience|date = 2015-01-01|issn = 1532-0634|pages = 2503–2527|doi = 10.1002/cpe.3628|first1 = Hermes|last1 = Senger|first2 = Veronica|last2 = Gil-Costa|first3 = Luciana|last3 = Arantes|first4 = Cesar A. C.|last4 = Marcondes|first5 = Mauricio|last5 = Marín|first6 = Liria M.|last6 = Sato|first7 = Fabrício A.B.|last7 = da Silva|volume=28|issue = 8|hdl = 10533/147670|s2cid = 33645927|hdl-access = free}}</ref>
 
La majoria d'implementacions de l'algorisme de MapReduce, requereixen escriure a memòria totes les comunicaciones, és per això que el cost de comunicació sovint domina al cost de computació.<ref name="ullman">{{Cite journal | doi = 10.1145/2331042.2331053 | title = Designing good MapReduce algorithms| journal = XRDS: Crossroads, the ACM Magazine for Students| volume = 19| pages = 30–34| year = 2012| last1 = Ullman | first1 = J. D. | s2cid = 26498063| author-link1 = Jeffrey Ullman| url = http://xrds.acm.org/article.cfm?aid=2331053 |url-access=subscription}}</ref><ref name=":0"/>. Per l'autor de l'algorisme és essencial equilibrar els dos costos.
 
Per tal de calcular el rendiment de MapReduce, cal tenir en compte la complexitat del mapping, el shuffle, l'ordenació (agrupació per la clau) i el reduce. La quantitat de dades produïdes en l'etapa de la funció de map, és un paràmetre clau que ens indicarà on es trobarà la major part del cost computacional (map o reduce). La reducció inclou l'ordenació que té una complexitat no lineal. Per tant, les divisions en grups petits de les dades redueixen el temps de classificació, però fins a un límit, ja que un gran nombre de reductors pot ser poc pràctic.<ref>{{Cite journal|title = Scheduling divisible MapReduce computations|last1 = Berlińska|first1 = Joanna|date = 2010-12-01|journal = Journal of Parallel and Distributed Computing|doi = 10.1016/j.jpdc.2010.12.004|last2 = Drozdowski|first2 = Maciej|volume=71|issue = 3|pages=450–459}}</ref>
Línia 129:
 
== Usos ==
Per norma general, s'utilitza MapReduce en aquells problemes de [[Computació concurrent]] entre els quals es 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).<ref name="FG">Jeffrey Dean, Sanjay Ghemawat, (2008), ''MapReduce: simplified data processing on large clusters'', Communications of the ACM - 50th anniversary issue: 1958 - 2008, Volume 51 Issue 1, January 2008
Pages 107-113 </ref>. 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 ==