MapReduce je programovací model a na něj navázaná implementace procesů a generování big data datových sad s paralelním distribuovaným algoritmem na klustru.

MapReduce program se skládá z mapovacích metod, které provádějí filtrování a řazení a reduce metod, které provádějí shrnující operace (jako například součet řádků, frekvence různých opakujících se znaků). MapReduce systém, často označovaný také jako infrastruktura nebo architektura, koordinuje zpracování tím, že řídí distribuované servery, které spouští různé úlohy paralelně, spravuje veškerou komunikaci a datové přenosy mezi různými částmi systému a zajišťuje konzistenci v případě selhání některého serveru.

Model je podskupinou strategie split-apply-combine pro datovou analýzu. Je inspirován funkcemi map a reduce, které jsou běžně používané ve funkcionálním programování. Jejich účel ve Frameworku MapReduce však není stejný jako v jejich původní podobě. Klíčovým přínosem MapReduce Frameworku nejsou samotné funkce map a reduce, ale škálovatelnost a tolerance k chybě, kterou dokáže zajistit pro různé aplikace optimalizací spuštění.

Jednovláknová implementace MapReduce obvykle nebude rychlejší, nežli tradiční implementace, k výraznému zlepšení dochází až v případě vícevláknových implementací za využití víceprocesorového hardware. Použití tohoto modelu je výhodné pouze když se zapojí optimalizovaná distribuovaná shuffle operace, která snižuje náklady na síťovou komunikaci, a vlastnosti odolnosti vůči chybám. Pro dobrý MapReduce algoritmus musí optimalizovat komunikační náklady.

MapReduce knihovny jsou psány v různých programovacích jazycích s různou úrovní optimalizace. Populární open-sourcovou implementací, která podporuje distribuované shuffle operace je Apache Hadoop.

Princip MapReduce

MapReduce pracuje s klusterem databázových nebo jiných serverů. Jeden ze serverů následně přijme požadavek od klienta. Tento uzel rozesílá Map funkci nebo řetězec funkcí ostatním uzlům patřícím do daného klustru. Ostatní uzly kód této funkce provedou a vrátí původnímu uzlu výsledky. Ty mohou být často i duplicitní, což je chtěná vlastnost, která má bránit ztrátě dat v případě výpadku. Původní uzel funkci může sám rovněž zpracovat.

Ve chvíli, kdy má pak dostatek výsledků od ostatních uzlů i sám od sebe, nebo v případě vypršení stanoveného časového limitu pro odpověď od ostatních uzlů provede původní uzel nad získanou množinou dat funkci reduce. Tato fáze odstraní duplicity a provede operace, které lze provádět jen v případě, že je množina kompletním výsledkem od všech uzlů. Na konci této fáze je následně možné vrátit klientovi výsledek.

Možná aplikace MapReduce

MapReduce lze použít na příklad při mapování frekvence přístupů na webové stránky. Mapovací funkce sesbírává log požadavků na stránky, kdy je výstupem dvojice URL a jedničky. Redukční funkce pak pro každý z klíčů sečte hodnoty a výstupem následně je kombinace URL a celkového počtu.

Výhody použití MapReduce

  • Vyhledávání na živých datech. MapReduce umožňuje vyhledávat na živých datech.
  • Efektivita propojování. MapReduce dokáže být velmi efektivní při propojování datových sad, na základě společného klíče (propojení může být protlačeno až do samotného úložiště klíčů).
  • Škálovatelnost. Při použití vícevláknových implementací dokáže MapReduce napomoci maximálně efektivnímu zpracování.
  • Tolerance k chybě. Pokud dojde k selhání některého ze serverů, nedochází ke ztrátě dat a vzniku inkonsistencí.

Nevýhody použití MapReduce

  • Rychlost. MapReduce může být pomalejší nežli jiné aplikace map-reduce vzorce.
  • Analytika. Úložiště založená na klíčové hodnotě obvykle nejsou příliš dobře optimalizovaná na použití analytických metod.