Ce este Join in Mapreduce?
Operațiunea Mapreduce Join este utilizată pentru a combina două seturi de date mari. Cu toate acestea, acest proces implică scrierea multor coduri pentru a efectua operațiunea reală de asociere. Alăturarea a două seturi de date începe prin compararea dimensiunii fiecărui set de date. Dacă un set de date este mai mic în comparație cu celălalt set de date, atunci setul de date mai mic este distribuit la fiecare nod de date din cluster.
Odată ce unirea în MapReduce este distribuită, fie Mapper, fie Reducer folosește setul de date mai mic pentru a efectua o căutare pentru înregistrările potrivite din setul de date mare și apoi combina acele înregistrări pentru a forma înregistrări de ieșire.
În acest tutorial, veți învăța-
- Ce este Alăturați-vă la MapReduce?
- Tipuri de Alăturare
- Cum să uniți două seturi de date: Exemplu MapReduce
- Ce este Counter în MapReduce?
- Tipuri de contoare MapReduce
- Exemple de contoare
Tipuri de Alăturare
În funcție de locul în care se efectuează unirea efectivă, unirile în Hadoop sunt clasificate în-
1. Asociere pe hartă - Când asocierea este realizată de mapator, se numește asociere pe hartă. În acest tip, unirea se realizează înainte ca datele să fie consumate efectiv de funcția hartă. Este obligatoriu ca intrarea la fiecare hartă să fie sub forma unei partiții și să fie în ordine sortată. De asemenea, trebuie să existe un număr egal de partiții și trebuie să fie sortat după cheia de asociere.
2. Îmbinare laterală redusă - Când îmbinarea este realizată de reductor, aceasta se numește îmbinare laterală redusă. Nu este necesar ca această îmbinare să aibă un set de date într-o formă structurată (sau partiționată).
Aici, procesarea laterală a hărții emite cheia de îmbinare și tuplurile corespunzătoare ale ambelor tabele. Ca efect al acestei procesări, toate tuplurile cu aceeași cheie de asociere cad în același reductor care apoi alătură înregistrările cu aceeași cheie de asociere.
Un flux global de proces de îmbinări în Hadoop este descris în diagrama de mai jos.
Cum să uniți două seturi de date: Exemplu MapReduce
Există două seturi de date în două fișiere diferite (prezentate mai jos). Key Dept_ID este comun în ambele fișiere. Scopul este de a folosi MapReduce Join pentru a combina aceste fișiere
Intrare: setul de date de intrare este un fișier txt, DeptName.txt și DepStrength.txt
Descărcați fișierele de intrare de aici
Asigurați-vă că ați instalat Hadoop. Înainte de a începe cu exemplul de proces MapReduce Join, schimbați utilizatorul în „hduser” (id utilizat în timpul configurației Hadoop, puteți comuta la user-ul utilizat în timpul configurării dvs. Hadoop).
su - hduser_
Pasul 1) Copiați fișierul zip în locația dorită
Pasul 2) Decomprimați fișierul Zip
sudo tar -xvf MapReduceJoin.tar.gz
Pasul 3) Accesați directorul MapReduceJoin /
cd MapReduceJoin/
Pasul 4) Porniți Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Pasul 5) DeptStrength.txt și DeptName.txt sunt fișierele de intrare utilizate pentru acest program de exemplu MapReduce Join.
Acest fișier trebuie copiat în HDFS folosind comanda de mai jos-
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Pasul 6) Rulați programul folosind comanda de mai jos-
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Pasul 7) După executare, fișierul de ieșire (denumit „parte-00000”) va fi stocat în directorul / output_mapreducejoin pe HDFS
Rezultatele pot fi văzute folosind interfața liniei de comandă
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Rezultatele pot fi văzute și printr-o interfață web
Acum selectați „Răsfoiți sistemul de fișiere” și navigați până la / output_mapreducejoin
Deschideți partea-r-00000
Rezultatele sunt afișate
NOTĂ: Vă rugăm să rețineți că, înainte de a rula acest program pentru data viitoare, va trebui să ștergeți directorul de ieșire / output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Alternativa este să utilizați un nume diferit pentru directorul de ieșire.
Ce este Counter în MapReduce?
Un Contor în MapReduce este un mecanism utilizat pentru colectarea și măsurarea informațiilor statistice despre joburile și evenimentele MapReduce. Contoare țin evidența diferitelor statistici de locuri de muncă în MapReduce, cum ar fi numărul de operațiuni și progresul operației. Contoare sunt utilizate pentru diagnosticarea problemelor în MapReduce.
Contoare Hadoop sunt similare cu introducerea unui mesaj jurnal în cod pentru o hartă sau reducere. Aceste informații ar putea fi utile pentru diagnosticarea unei probleme în procesarea lucrărilor MapReduce.
De obicei, aceste contoare din Hadoop sunt definite într-un program (mapare sau reducere) și sunt incrementate în timpul execuției atunci când apare un anumit eveniment sau condiție (specifică contorului respectiv). O aplicație foarte bună a contoarelor Hadoop este de a urmări înregistrările valide și nevalide dintr-un set de date de intrare.
Tipuri de contoare MapReduce
Există practic 2 tipuri de contoare MapReduce
- Contoare încorporate Hadoop: Există câteva contoare încorporate Hadoop care există pentru fiecare lucrare. Mai jos sunt grupuri de contoare încorporate-
- MapReduce Task Counters - Colectează informații specifice sarcinii (de exemplu, numărul de înregistrări de intrare) în timpul executării sale.
- FileSystem Counters - Colectează informații precum numărul de octeți citiți sau scrise de o sarcină
- FileInputFormat Counters - Colectează informații despre un număr de octeți citiți prin FileInputFormat
- FileOutputFormat Counters - Colectează informații despre un număr de octeți scrise prin FileOutputFormat
- Contoare de locuri de muncă - Aceste contoare sunt utilizate de JobTracker. Statisticile colectate de aceștia includ, de exemplu, numărul de sarcini lansate pentru un loc de muncă.
- Contoare definite de utilizator
În plus față de contoare încorporate, un utilizator își poate defini propriile contoare utilizând funcționalități similare oferite de limbaje de programare. De exemplu, în Java „enum” sunt utilizate pentru a defini contoare definite de utilizator.
Exemple de contoare
Un exemplu MapClass cu Contoare pentru a număra numărul de valori lipsă și nevalide. Fișier de date de intrare utilizat în acest tutorial Setul nostru de date de intrare este un fișier CSV, SalesJan2009.csv
public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString sales = fields[8];if (country.length() == 0) {reporter.incrCounter(SalesCounters.MISSING, 1);} else if (sales.startsWith("\"")) {reporter.incrCounter(SalesCounters.INVALID, 1);} else {output.collect(new Text(country), new Text(sales + ",1"));}}}
Fragmentul de cod de mai sus arată un exemplu de implementare a contoarelor în Hadoop Map Reduce.
Aici, SalesCounters este un contor definit folosind „enum” . Este folosit pentru a număra înregistrările de intrare MISSING și INVALID .
În fragmentul de cod, dacă câmpul „țară” are o lungime zero, atunci valoarea acestuia lipsește și, prin urmare, contorul corespunzător SalesCounters.MISSING este incrementat.
Apoi, dacă câmpul „vânzări” începe cu „ atunci înregistrarea este considerată INVALID. Acest lucru este indicat prin incrementarea contorului SalesCounters.INVALID.