MapReduce
A MapReduce a Google által bevezetett elosztott számítási modell, amelyet nagyon nagy, akár több petabájtos [1] adathalmazok párhuzamos számításaira használnak számítógép- fürtökben .
Áttekintés
A MapReduce egy keretrendszer elosztott feladatok bizonyos halmazainak kiszámítására, nagyszámú számítógép (úgynevezett "csomópont") segítségével, amelyek egy fürtöt alkotnak .
A MapReduce munkája két lépésből áll: Map és Reduce, amelyek az azonos nevű magasabb rendű függvények, a map és a redukció után kapták a nevét .
A Térkép lépés előfeldolgozza a bemeneti adatokat. Ehhez az egyik számítógép (amelyet főcsomópontnak - főcsomópontnak neveznek) fogadja a feladat bemeneti adatait, azokat részekre bontja és átadja más számítógépeknek (worker node - worker node) előfeldolgozásra.
A redukciós lépésben az előfeldolgozott adatok csökkennek. A fő csomópont válaszokat kap a dolgozó csomópontoktól, és ezek alapján eredményt generál - megoldást az eredetileg megfogalmazott problémára.
A MapReduce előnye, hogy lehetővé teszi az előfeldolgozási és redukciós műveletek elosztott módon történő végrehajtását. Az előfeldolgozási műveletek egymástól függetlenül működnek, és párhuzamosan is végrehajthatók (bár a gyakorlatban ennek a bemeneti forrás és/vagy a felhasznált processzorok száma korlátozza). Hasonlóképpen, több dolgozó csomópont is végezhet összegzést – ehhez csak az szükséges, hogy az összes előfeldolgozási eredményt egy adott kulcsértékkel egyszerre egy worker csomópont dolgozza fel. Bár ez a folyamat kevésbé hatékony, mint a több szekvenciális algoritmus, a MapReduce alkalmazható nagy mennyiségű adatra, amelyet számos szerver képes feldolgozni. Például a MapReduce néhány óra alatt egy petabájtnyi adat rendezésére használható. A párhuzamosság némi helyreállítást is biztosít a részleges szerverhibákból: ha egy előfeldolgozási vagy redukciós műveletet végrehajtó worker csomópont meghibásodik, akkor a munkája átvihető egy másik worker csomópontra (feltéve, hogy a végrehajtandó művelet bemeneti adatai rendelkezésre állnak).
A keretrendszer nagymértékben a funkcionális programozásban széles körben használt térkép- és redukciós függvényeken alapul [ 2 ] , bár a keretrendszer tényleges szemantikája eltér a prototípusétól [3] .
Példa
A MapReduce segítségével írt alkalmazás kanonikus példája az a folyamat, amely megszámolja, hányszor fordulnak elő különböző szavak egy dokumentumkészletben:
// A munkavégző csomópontok által a Leképezés lépésben használt függvény
// kulcs-érték párok feldolgozásához a bemeneti adatfolyam
void map -ból ( Karakterlánc neve , Karakterlánc dokumentum ) :
// Bemeneti adatok:
// név - dokumentum neve // dokumentum - dokumentum tartalma minden egyes szóhoz a dokumentumban :
EmitIntermediate ( szó , "1" );
// A worker csomópontok által a Reduce lépésben használt függvény
// a leképezési lépésben kapott kulcs-érték párok feldolgozásához
void redukció ( Iterator partialCounts ) :
// Bemeneti adatok:
// partialCounts - a csoportosított köztes eredmények listája. A partialCounts bejegyzéseinek száma // a szükséges érték int result = 0 ;
minden v - re partialCounts - ban :
eredmény += parseInt ( v );
Emit ( AsString ( eredmény ));
Ebben a kódban a Térkép lépésben minden dokumentumot szavakra bont, és párokat ad vissza, ahol a kulcs maga a szó, az érték pedig "1". Ha ugyanaz a szó többször előfordul egy dokumentumban, akkor ennek a dokumentumnak az előzetes feldolgozása eredményeként ezekből a párokból annyi lesz, ahányszor ez a szó előfordul. A generált párokat további feldolgozásra küldi, a rendszer kulcsonként csoportosítja (jelen esetben a kulcs maga a szó), és szétosztja több processzor között. A csoportban azonos kulcsú objektumok halmazai a redukciós függvény bemenetére jutnak, amely feldolgozza az adatfolyamot, csökkentve annak mennyiségét. Ebben a példában a redukciós függvény egyszerűen összeadja egy adott szó előfordulásait a teljes folyamon, és az eredményt - csak egy összeget - továbbküldi kimenetként.
Jegyzetek
- ↑ A Google reflektorfénybe állítja az adatközpont belső működését | Tech news blog - CNET News.com (downlink) . Letöltve: 2008. szeptember 27. Az eredetiből archiválva : 2013. október 19..
- ↑ "Absztrakciónkat a térkép ihlette, és csökkenti a Lispben és sok más funkcionális nyelvben előforduló primitíveket." - "MapReduce: Simplified Data Processing on Large Clusters" archiválva : 2017. december 11. a Wayback Machine -nél , Jeffrey Dean és Sanjay Ghemawat; a Google Labs szolgáltatásból
- ↑ „A Google MapReduce programozási modellje – újralátogatva” archiválva 2015. április 23-án a Wayback Machine -nél – Ralph Lemmel , a Microsoft cikke