Video: The Third Industrial Revolution: A Radical New Sharing Economy 2024
Aplicația MapReduce procesează datele în diviziuni de intrare pe baza unei înregistrări record-by-record și că fiecare înregistrare este înțeleasă de MapReduce ca fiind o cheie / valoare pereche. După ce s-au calculat diviziunile de intrare, sarcinile cartografierului pot începe să le proceseze - adică imediat după ce facilitatea de planificare a Managerului de Resurse îi alocă resursele de procesare. (În Hadoop 1, JobTracker atribuie sarcini cartografiere anumitor sloturi de procesare.)
Sarcina cartografierului procesează propriile diviziuni într-o singură înregistrare într-un moment - în figură, această înregistrare singulară este reprezentată de perechea cheie / valoare. În cazul datelor despre zbor, atunci când se calculează diviziunile de intrare (utilizând metoda implicită de procesare a fișierelor pentru fișiere text), presupunerea este că fiecare rând din fișierul text este o singură înregistrare.
Pentru fiecare înregistrare, textul rândului în sine reprezintă valoarea, iar decalajul de octeți al fiecărui rând de la începutul împărțirii este considerat ca fiind cheia.
S-ar putea să te întrebi de ce nu se folosește numărul de rând în locul decalajului octet. Când considerați că un fișier text foarte mare este împărțit în mai multe blocuri de date individuale și este procesat ca multe diviziuni, numărul rândului este un concept riscant.
Numărul de linii din fiecare divizare variază, astfel încât este imposibil să se calculeze numărul de rânduri care precedă cel de procesat. Cu toate acestea, cu octetul offset, puteți fi precis, deoarece fiecare bloc are un număr fix de octeți.
Când o sarcină mapper procesează fiecare înregistrare, generează o pereche nouă de chei / valoare: Cheia și valoarea de aici pot fi complet diferite de perechea de intrare. Rezultatul sarcinii mapper este colecția completă a tuturor acestor perechi cheie / valoare.
Înainte ca fișierul final de ieșire pentru fiecare sarcină mapper să fie scris, ieșirea este împărțită pe baza cheii și sortată. Această partiționare înseamnă că toate valorile pentru fiecare cheie sunt grupate împreună.
În cazul unei aplicații de eșantionare destul de de bază, există doar un singur reductor, astfel încât toată ieșirea sarcinii mapper este scrisă într-un singur fișier. Dar în cazurile cu reductori multipli, fiecare sarcină mapper poate genera mai multe fișiere de ieșire, de asemenea.
Defalcarea acestor fișiere de ieșire se bazează pe cheia de partiționare. De exemplu, dacă există doar trei chei de partiționare distincte pentru iesire pentru sarcini de cartografiere și ați configurat trei reductori pentru această lucrare, vor exista trei fișiere de ieșire pentru cartografiere. În acest exemplu, dacă o anumită sarcină mapper procesează o divizare a intrării și generează ieșire cu două dintre cele trei chei, vor exista doar două fișiere de ieșire.
Întotdeauna comprimați fișierele de ieșire ale sarcinilor cartografiere. Cel mai mare beneficiu aici este câștigurile de performanță, deoarece scrierea de fișiere de ieșire mai mici minimizează costul inevitabil al transferării ieșirii cartografierului la nodurile în care reducătorii funcționează.
Partiționatorul implicit este mai mult decât adecvat în majoritatea situațiilor, dar uneori este posibil să doriți să particularizați modul în care datele sunt împărțite înainte ca acestea să fie procesate de reductoare. De exemplu, ați putea dori ca datele din seturile de rezultate să fie sortate după cheie și valorile lor - cunoscute ca sortare secundară .
Pentru a face acest lucru, aveți posibilitatea să înlocuiți partiționatorul implicit și să implementați propriul dvs.. Acest proces necesită însă o anumită atenție, pentru că veți dori să vă asigurați că numărul de înregistrări din fiecare partiție este uniform. (Dacă un reductor trebuie să prelucreze mult mai multe date decât ceilalți reductori, veți aștepta ca lucrarea dvs. MapReduce să se termine, în timp ce un reductor unic suprasolicitat se apleacă prin setul de date disproporționat de mare.)
Folosind fișiere intermediare dimensionate uniform poate beneficia mai mult de paralelismul disponibil în procesarea MapReduce.