Video: Visita Técnica IberoPistacho - Finca Hermanos Jiménez -IberoPistacho 2024
După faza Map și înainte de începerea fazei Reduce este un proces de transfer, cunoscut sub numele de shuffle și sort . Aici, datele din sarcinile cartografiere sunt pregătite și mutate la nodurile unde vor fi executate sarcinile reductorului. Când sarcina cartografieră este finalizată, rezultatele sunt sortate după cheie, partiționate dacă există mai multe reductoare și apoi scrise pe disc.
Puteți vedea acest concept în figura următoare, care arată fluxul de procesare a datelor MapReduce și interacțiunea acestuia cu componentele fizice ale clusterului Hadoop. (O notă rapidă: datele din memorie sunt reprezentate de pătrate albe și datele stocate pe disc sunt reprezentate de pătrate gri.)
Pentru a accelera procesul global MapReduce, datele sunt mutate imediat la nodurile sarcinilor de reducere, pentru a evita o inundație de activitate a rețelei atunci când sarcina finală de cartografiere își încheie activitatea. Acest transfer se întâmplă în timp ce sarcina mapperului este în desfășurare, deoarece ieșirile pentru fiecare înregistrare - amintesc - sunt stocate în memoria unei sarcini de reducere de așteptare. (Puteți configura dacă acest lucru se întâmplă - sau nu se întâmplă - și, de asemenea, numărul de fire implicate.)
Țineți minte că, deși o sarcină de reducere ar putea avea cea mai mare parte a sarcinii cartografiere, procesul de reducere a sarcinii nu poate începe până când nu au terminat toate sarcinile cartografiere.
Pentru a evita scenariile în care performanța unei sarcini MapReduce este împiedicată de o sarcină de cartografiere care se desfășoară pe un nod sclav slab performant, cadrul MapReduce folosește un concept numit execuție speculativă .
În cazul în care anumite sarcini de cartografiere se execută mai lent decât ceea ce este considerat rezonabil, aplicația Master va genera sarcini duplicate (în Hadoop 1, JobTracker face acest lucru). Indiferent care sarcină se termină mai întâi - duplicatul sau originalul - rezultatele sale sunt stocate pe disc, iar cealaltă activitate este ucisă. Dacă vă monitorizați îndeaproape activitatea și vă întrebați de ce există mai multe sarcini de cartografiere care rulează decât vă așteptați, acesta este un motiv probabil.
Ieșirea din sarcinile cartografiere nu este scrisă la HDFS, ci mai degrabă la discul local pe nodul slave unde a fost executată sarcina mapper. Ca atare, nu este reprodusă peste clusterul Hadoop.
În afară de comprimarea ieșirii, puteți crește performanța prin rularea unei sarcini combiner. Această tactică simplă, prezentată aici, implică o reducere locală a producției pentru sarcini individuale de cartografiere.
În majoritatea cazurilor, nu este necesară o programare suplimentară, deoarece puteți spune sistemului să utilizeze funcția reductor. Dacă nu utilizați funcția reductor, trebuie să vă asigurați că ieșirea combinatorului este identică cu cea a funcției reductorului.
Depinde de cadrul MapReduce dacă funcția combiner trebuie executată o singură dată, de mai multe ori sau niciodată, deci este esențial ca codul combiner să se asigure că rezultatele finale nu sunt afectate de multiple run-uri. Rularea combinatorului poate aduce un beneficiu de performanță prin diminuarea cantității de date intermediare care altfel ar trebui să fie transferate prin rețea.
Aceasta reduce, de asemenea, cantitatea de procesare a sarcinilor de reducere care ar trebui să facă. Exista o sarcină suplimentară aici, deci este posibil ca orice câștig de performanță să fie neglijabil sau chiar să aibă ca rezultat o performanță mai generală mai slabă. Kilometrajul dvs. poate varia, deci testați-l cu atenție.
După ce toate rezultatele sarcinilor de cartografiere sunt copiate în nodurile sarcinilor de reducere, aceste fișiere sunt îmbinate și sortate.