Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
kj:mapreduce [24.08.2017 12:15]
kj vytvořeno
kj:mapreduce [18.09.2017 15:50] (aktuální)
kj
Řádek 4: Řádek 4:
   * MAP   * MAP
       * vstupní data ve formátu <KEY1, VALUE1> konvertuje na <​KEY2,​VALUE2>​       * vstupní data ve formátu <KEY1, VALUE1> konvertuje na <​KEY2,​VALUE2>​
 +      * často nás KEY1 nezajímá - může být offset souboru
   * REDUCE   * REDUCE
       * vstupní data ve formátu <KEY2, LIST(VALUE2)>​ konvertuje na <​KEY3,​VALUE3>​       * vstupní data ve formátu <KEY2, LIST(VALUE2)>​ konvertuje na <​KEY3,​VALUE3>​
Řádek 11: Řádek 12:
  
 Mapper Mapper
-  * Vstupní ​údaje mapuje na hodnoty typu klíč – hodnota +  * vstupní ​údaje mapuje na hodnoty typu klíč – hodnota 
-  * Vstupem ​je formálně také klíč – hodnota +  * vstupem ​je formálně také klíč – hodnota 
-  * Ale často nás klíč vůbec nezajímá! Je to třeba offset souboru +  * ale často nás klíč vůbec nezajímá! Je to třeba offset souboru 
-  * Klíč se může libovolně opakovat, hodnota může být různá +  * klíč se může libovolně opakovat, hodnota může být různá
-  * Data jsou na konci setříděna podle klíče (zpravidla, ne vždy)+
   * Typicky probíhá v mnoha paralelních jobech   * Typicky probíhá v mnoha paralelních jobech
       * Každý soubor, resp. split je zpracován samostatným mapperem       * Každý soubor, resp. split je zpracován samostatným mapperem
Řádek 21: Řádek 21:
  
 Shuffle & Sort Shuffle & Sort
-  * Vstupem ​jsou vygenerované soubory z mapperů +  * vstupem ​jsou vygenerované soubory z mapperů 
-  * Všechna data se stejným klíčem slije na jeden node +  * všechna data se stejným klíčem slije na jeden node 
-      * Tj. musí data načíst z jednotlivých nodů (disková operace) +      * tj. musí data načíst z jednotlivých nodů (disková operace) 
-      * Ale čte je jen z lokálních disků, nikoli z HDFS +      * ale čte je jen z lokálních disků, nikoli z HDFS 
-      * A pak musí data přenést (síť) +  * setřídí data podle klíče (merge) 
-  * Setřídí data podle klíče (merge) +  * optimalizace ​– malá data pošle rovnou do reduceru, velká merguje na lokálním disku 
-  * Optimalizace ​– malá data pošle rovnou do reduceru, velká merguje +  * typicky ​nejnáročnější operace
-na lokálním disku +
-  * Typicky ​nejnáročnější operace+
  
 Reduce Reduce
-  * Čte produkovaná pomocí Shuffle & Sort +  * čte produkovaná ​data pomocí Shuffle & Sort 
-  * „Redukuje“ list hodnot čtených z výstupy Shuffle & Sort +  * všechny dvojice klíč/​hodnota se stejným klíčem jdou do stejného reduceru 
-  * Zpravidla ​je reducerů (řádově) méně než mapperů +  * „redukuje“ list hodnot čtených z výstupy Shuffle & Sort 
-  * Počet lze definovat, default je 1 +  * zpravidla ​je reducerů (řádově) méně než mapperů 
-  * Každý reducer generuje 1 soubor do HDFS +  * počet lze definovat, default je 1 
-  * Výstup ​se nijak nesortuje+  * každý reducer generuje 1 soubor do HDFS 
 +  * výstup ​se nijak nesortuje
  
 Combiner Combiner
   * sníží zátěž Shuffle&​Sort části   * sníží zátěž Shuffle&​Sort části
-  * Volitelná ​část zpracování mapperu, provádí reduce na straně mapperu +  * volitelná ​část zpracování mapperu, provádí reduce na straně mapperu 
-  * Stejné ​rozhraní jako Reducer +  * stejné ​rozhraní jako Reducer 
-  * Proč použít combiner +  * používáme, protože Shuffle&​Sort je nejnáročnější operace, ​tohle jí uleví
-      * data jsou načtena v paměti, ušetří se IO operace ​– čtení +
-      * často je výstup menší než vstupušetří se IO operace – zápis (a následné čtení)+
  
 Partitioner Partitioner
Řádek 52: Řádek 49:
       * podle hodnoty       * podle hodnoty
   * MapReduce zajišťuje,​ že jedna partition je zpracována jedním reducerem   * MapReduce zajišťuje,​ že jedna partition je zpracována jedním reducerem
-  * Vlastní ​partitioner lze použít např. v případech,​ kdy+  * vlastní ​partitioner lze použít např. v případech,​ kdy
       * chci znát nějaké specifické rozdělení (např. věkové kategorie)       * chci znát nějaké specifické rozdělení (např. věkové kategorie)
       * mám velmi nevyvážené klíče (jeden klíč se vyskytuje abnormálně často)       * mám velmi nevyvážené klíče (jeden klíč se vyskytuje abnormálně často)
 +  * klíče jsou z shuffle&​sort poslány do partitioneru,​ který rozhoduje, do kterého reduceru půjde
 +  * Partitioner je funkce, která hashuje klíč a vezme modulo tohoto hashe a počtu reduceru, aby zjistil, který reducer dostane daný pár klíč-hodnota. jelikož hash jednoho klíče bude pořád stejný, všechny páry klíč-hodnota se stejným klíčem budou poslány do stejného reduceru
  
  
Řádek 60: Řádek 59:
   * vhodné úlohy ​   * vhodné úlohy ​
       * počet slov v textu, četnost slov, reporting – načítání řady dílčích výsledků (prodeje), podle klienta, produktu nebo lokality, řazení dat (sortování),​ filtrování dat, validace       * počet slov v textu, četnost slov, reporting – načítání řady dílčích výsledků (prodeje), podle klienta, produktu nebo lokality, řazení dat (sortování),​ filtrování dat, validace
 +      * umožňující paralelizaci,​ při práci se skutečně velkými daty (PB), při práci s výpočetně náročnými úlohami, kde se spíše data načítají než zapisují, když není čas kritický, stačí dávkové zpracování
   * nevhodné úlohy   * nevhodné úlohy
       * průměr, medián - lze přeformulovat       * průměr, medián - lze přeformulovat
 +      * nelze paralelizovat,​ je-li vyžadována okamžitá reakce, když je úkol „malý“
 +  * musí splňovat 3 podmínky
 +      * asociativita - neovlivníme pořadí vykonávaných operací
 +      * komutativita - mapper/​shuffle může změnit pořadí dat -> lze použít combiner
 +      * existence nulového prvku - node, který nemá výstup/​nezpracovává data, neovlivní výsledek
  
- 
- 
-Kdy použít MapReduce 
-› Tam, kde úloha umožňuje paralelizaci 
-– a lze ji převést na úlohu vhodnou pro MapReduce 
-› Při práci se skutečně velkými daty (petabajty) 
-– tak velká data se v paměti nedají uchovávat/​zpracovat 
-› Při práci s výpočetně náročnými úlohami, kde se spíše data 
-načítají než zapisují 
-› Když není čas kritický 
-› Stačí dávkové zpracování 
-› Když není dostatek paměti v clusteru 
- 
-Kdy není vhodný MapReduce 
-› Tam, kde úlohu nelze paralelizovat a převést na MapReduce 
-kompatibilní  
-› Je-li vyžadována okamžitá reakce 
-– i pro jednoduché úlohy trvá inicializace velmi dlouho 
-› Když je úkol „malý“ 
kj/mapreduce.1503569724.txt.gz · Poslední úprava: 24.08.2017 12:15 autor: kj