Ce este MapReduce în Hadoop? ArchiTextură și diagramă

⚡ Rezumat inteligent

MapReduce este modelul de programare Hadoop care transformă un set mare de date într-un rezultat mic prin rularea unei funcții map peste fiecare divizare a intrării și apoi a unei funcții reduce peste valorile intermediare grupate.

  • 🔘 Patru faze: Fiecare job rulează ca divizare, hartăping, amestecând și reducând, cu perechi cheie-valoare care curg între fiecare etapă.
  • ☑️ Exemplu lucrat: Trei rânduri de text devin câte șapte cuvinte, arătând exact la ce contribuie fiecare fază.
  • Dimensionare divizată: O singură sarcină de mapare rulează per divizare de intrare, iar dimensiunea divizării se potrivește în mod normal cu dimensiunea blocului HDFS.
  • 🧪 Date intermediare: Rezultatul hărții este scris pe discul local în loc de HDFS, deoarece replicarea datelor de unică folosință este o risipă.
  • 🛠️ Coordonare: Un serviciuTracker programează lucrul și sarcinileTracKerii raportează progresul prin semnale periodice ale bătăilor inimii.
  • ⚠️ Notă privind versiunea: YARN a înlocuit acea pereche cu un ResourceManager, NodeManagers și un ApplicationMaster per job din Hadoop 2.x.

Arhitectura MapReduce în Hadoop explicată cu un exemplu

Ce este MapReduce în Hadoop?

MapReduce este un cadru software și un model de programare utilizat pentru procesarea unor cantități uriașe de date. Programele MapReduce funcționează în două faze, și anume Map și Reduce. Sarcinile Map se ocupă de divizarea și mapareaping de date în timp ce sarcinile de reducere amestecă și reduc datele.

Hadoop este capabil să ruleze programe MapReduce scrise în diverse limbaje: Java, Ruby, Python și C++Programele MapReduce sunt de natură paralelă, așadar sunt foarte utile pentru efectuarea de analize de date la scară largă utilizând mai multe mașini din cluster.

Intrarea pentru fiecare fază este reprezentată de perechi cheie-valoare. În plus, fiecare programator trebuie să specifice două funcții: o funcție map și o funcție reduce.

MapReduce Architectura în Big Data explicată cu Exemplu

Întregul proces trece prin patru faze de execuție, și anume: divizarea, mapareaping, amestecare și reducere.

Acum, în acest tutorial MapReduce, haideți să înțelegem acest lucru cu un exemplu MapReduce.

Să luăm în considerare faptul că avem următoarele date de intrare pentru MapReduce în Datele mari program:

Welcome to Hadoop Class
Hadoop is good
Hadoop is bad

Diagrama de mai jos tracParcurge acele trei linii prin fiecare fază, de la diviziunile de intrare din stânga până la numărul final de cuvinte din dreapta.

Diagrama arhitecturii MapReduce tractrei linii de intrare prin divizare, mapareping, amestecând și reducând

Rezultatul final al sarcinii MapReduce este

Rău 1
Clasă 1
bine 1
Hadoop 3
is 2
la 1
Welcome 1

Datele trec prin următoarele faze ale MapReduce în Big Data.

Divizări de intrare

O intrare într-un job MapReduce în Big Data este împărțită în porțiuni de dimensiune fixă ​​numite diviziuni de intrare. O divizare de intrare este o porțiune din intrare care este consumată de o singură hartă.

Hartăping

Aceasta este prima fază în execuția unui program MapReduce. În această fază, datele din fiecare divizare sunt transmise către o hartă.ping funcție pentru a produce valori de ieșire. În exemplul nostru, sarcina hărțiiping faza este de a număra numărul de apariții ale fiecărui cuvânt din diviziunile de intrare (mai multe detalii despre diviziunile de intrare sunt date mai jos) și de a pregăti o listă sub forma .

cârmeală

Această fază consumă ieșirea hărțiiping fază. Sarcina sa este de a consolida înregistrările relevante de pe Hartăping ieșire de fază. În exemplul nostru, aceleași cuvinte sunt grupate împreună cu frecvența lor corespunzătoare.

Reduce

În această fază, valorile de ieșire din faza de amestecare sunt agregate. Această fază combină valorile din faza de amestecare și returnează o singură valoare de ieșire. Pe scurt, această fază rezumă setul complet de date.

În exemplul nostru, această fază agregă valorile din faza de Amestecare, adică calculează numărul total de apariții ale fiecărui cuvânt.

MapReduce Architectură explicată în detaliu

Punctele de mai jos explică modul în care divizările, task-urile de mapare și task-urile de reducere sunt plasate și stocate în cluster.

  • Pentru fiecare divizare se creează o sarcină de mapare, care apoi execută funcția de mapare pentru fiecare înregistrare din divizare.
  • Este întotdeauna benefic să existe mai multe divizări, deoarece timpul necesar procesării unei divizări este mic în comparație cu timpul necesar procesării întregii intrări. Când divizările sunt mai mici, procesarea este mai bine echilibrată din punct de vedere al încărcării, deoarece divizările sunt procesate în paralel.
  • Totuși, nu este de dorit să existe diviziuni prea mici. Când diviziunile sunt prea mici, costurile suplimentare de gestionare a diviziunilor și de creare a sarcinilor de mapare încep să domine timpul total de execuție a jobului.
  • Pentru majoritatea lucrărilor, este mai bine ca dimensiunea împărțită să fie egală cu dimensiunea unui HDFS bloc, care implicit are 128 MB de la Hadoop 2.x încolo (în Hadoop 1.x avea 64 MB) și este controlat de dfs.blocksize proprietate.
  • Executarea sarcinilor de mapare are ca rezultat scrierea ieșirii pe un disc local pe nodul respectiv și nu în HDFS.
  • Motivul alegerii discului local în locul HDFS este de a evita replicarea care are loc în timpul unei operațiuni de stocare HDFS.
  • Ieșirea hărții este o ieșire intermediară care este procesată prin reducerea sarcinilor pentru a produce rezultatul final.
  • Odată ce lucrarea este finalizată, rezultatul hărții poate fi aruncat. Deci, stocarea în HDFS cu replicare devine exagerată.
  • În cazul eșecului nodului, înainte ca rezultatul hărții să fie consumat de sarcina de reducere, Hadoop rulează din nou sarcina hărții pe alt nod și recreează rezultatul hărții.
  • Sarcinile de reducere nu funcționează pe baza conceptului de localitate a datelor. O ieșire a fiecărei sarcini de mapare este transmisă sarcinii de reducere. Ieșirea hărții este transferată către mașina pe care rulează sarcina de reducere.
  • Pe această mașină, rezultatul este îmbinat și apoi trecut la funcția de reducere definită de utilizator.
  • Spre deosebire de ieșirea map, ieșirea reduce este stocată în HDFS (prima replică este stocată pe nodul local, iar celelalte replici sunt stocate pe noduri off-rack). Așadar, scrierea ieșirii reduce consumă lățime de bandă a rețelei, dar numai atât cât consumă o conductă de scriere HDFS normală.

Cum lucrează MapReduce organizează?

În acest tutorial MapReduce, vom învăța cum funcționează MapReduce.

Hadoop împarte jobul în sarcini. Există două tipuri de sarcini:

  1. Sarcini de hartă (Divizări și Hartă)ping)
  2. Reduceți sarcinile (Amestecare, Reducere)

Întregul proces de execuție, adică execuția ambelor sarcini Map și Reduce, este controlat de două tipuri de entități numite:

  1. Loc de muncaTracker: acționează ca un maestru și este responsabil pentru execuția completă a unei sarcini trimise.
  2. Sarcină multiplăTrackers: se comportă ca niște sclavi, fiecare dintre ei îndeplinind o parte din treabă.

Pentru fiecare job trimis spre execuție în sistem, există un Job.Tracker care se află pe NameNode și există mai multe task-uriTrackers care se află pe DataNodes.

Notă: IovTracker și TaskTracPerechea ker aparține MapReduce versiunea 1 (Hadoop 1.x). De la Hadoop 2.x încoace, YARN împarte aceste sarcini între un ResourceManager la nivel de cluster, un NodeManager pe fiecare nod și un ApplicationMaster per job, deși fazele de mapare, amestecare și reducere rămân neschimbate.

Diagrama de mai jos arată cum un job trimis este împărțit în sarcini și tracdistribuit în tot clusterul.

Diagramă care arată un job împărțit în sarcini de hartă și de reducere tracde către JobTracker și TaskTraccireașă

  • Un job este împărțit în mai multe sarcini care sunt apoi rulate pe mai multe noduri de date dintr-un cluster.
  • Este responsabilitatea postului tracker pentru a coordona activitatea prin programarea sarcinilor care să ruleze pe diferite noduri de date.
  • Executarea unei sarcini individuale este apoi asigurată de sarcina respectivă tracker, care se află pe fiecare nod de date care execută o parte a jobului.
  • Sarcina tracResponsabilitatea kerului este de a trimite raportul de progres la locul de muncă. tracker.
  • În plus, sarcina tracker trimite periodic un semnal de tip „puls” către JobTracker pentru a-l notifica cu privire la starea actuală a sistemului.
  • Astfel, slujba tracker păstrează track din progresul general al fiecărei sarcini. În cazul eșecului sarcinii, sarcina tracKer îl poate reprograma pentru o altă sarcină tracker.

Întrebări frecvente

YARN a făcut-o, începând cu Hadoop 2.x. Un ResourceManager la nivel de cluster se ocupă de programare, un NodeManager rulează pe fiecare nod și un ApplicationMaster per job. tracks își îndeplinește sarcinile. Fazele de hartă și reducere rămân neschimbate.

Modelele antrenate pe baza istoricului anterior al joburilor prezic timpul de execuție, recomandă dimensiuni de divizare și număr de reductoare și detectează din timp asimetria. De asemenea, acestea urmăresc valorile contorului, semnalând joburile neobișnuit de lente sau eșuate înainte de finalizarea unei execuții.

Copilot gestionează bine scheletajul: semnături de mapare și reducere, generice, importuri și apeluri de configurare a driverelor. Decizii privind schema, cum ar fi ce câmp este grupul.ping cheie, totuși este nevoie de un dezvoltator care cunoaște datele.

Un punct de plecare obișnuit este un număr puțin mai mic de sloturi de reducere disponibile, astfel încât fiecare reducător rulează într-o singură undă. Prea puține creează cozi lungi; prea multe produc multe fișiere de ieșire minuscule.

Un combinator este un mini-reductor opțional care rulează pe ieșirea hărții înainte de a traversa rețeaua. Reduce brusc traficul aleatoriu, dar poate fi utilizat doar atunci când operația de reducere este atât asociativă, cât și comutativă.

Spark păstrează rezultatele intermediare în memorie și exprimă un job ca un grafic orientat de etape, în timp ce MapReduce scrie ieșirea intermediară pe disc între faze. Spark este prin urmare mult mai rapid pentru munca iterativă.

Partiționarea decide care reductor primește fiecare cheie intermediară, hașând implicit cheia modulul numărului de reductori. O cheie personalizată este scrisă atunci când acel hash lasă un singur reductor supraîncărcat.

Hadoop creează o singură sarcină de mapare pentru fiecare divizare de intrare, iar o divizare este un interval de octeți, nu un fișier întreg. Un fișier mare produce mai multe diviziuni; multe fișiere mici produc sarcini de mapare minuscule și ineficiente.

Rezumați această postare cu: