Hadoop MapReduce Join & Counter cu Exemplu
Ce este Join in Mapreduce?
Mapreduce Join operaศia este utilizatฤ pentru a combina douฤ seturi mari de date. Cu toate acestea, acest proces implicฤ scrierea multor coduri pentru a efectua operaศia realฤ de conectare. Unirea a douฤ seturi de date รฎncepe prin a compara dimensiunea 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 fiecฤrui nod de date din cluster.
Odatฤ ce o รฎmbinare รฎn MapReduce este distribuitฤ, fie Mapper, fie Reducer utilizeazฤ setul de date mai mic pentru a efectua o cฤutare a รฎnregistrฤrilor potrivite din setul de date mare ศi apoi combina acele รฎnregistrฤri pentru a forma รฎnregistrฤri de ieศire.
Tipuri de alฤturare
รn funcศie de locul รฎn care se realizeazฤ รฎmbinarea realฤ, รฎmbinฤrile รฎn Hadoop sunt clasificate รฎn-
1. รmbinare pe hartฤ โ Atunci cรขnd รฎmbinarea este efectuatฤ de mapator, se numeศte รฎmbinarea pe hartฤ. รn acest tip, รฎmbinarea este efectuatฤ รฎnainte ca datele sฤ fie efectiv consumate de funcศia map. Este obligatoriu ca intrarea รฎn 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 sortate dupฤ cheia de unire.
2. รmbinare lateralฤ redusฤ โ Atunci cรขnd รฎmbinarea este realizatฤ de reductor, se numeศte รฎmbinare de reducere. Nu este nevoie ca aceastฤ unire sฤ aibฤ un set de date รฎntr-o formฤ structuratฤ (sau partiศionat).
Aici, procesarea lateralฤ a hฤrศii emite cheia de unire ศi tuplurile corespunzฤtoare ale ambelor tabele. Ca efect al acestei procesฤri, toate tuplurile cu aceeaศi cheie de unire cad รฎn acelaศi reductor care apoi uneศte รฎnregistrฤrile cu aceeaศi cheie de unire.
Un flux general al procesului de รฎmbinฤri รฎn Hadoop este descris รฎn diagrama de mai jos.

Cum sฤ alฤturaศ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 utiliza 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ฤ aveศi Hadoop instalat. รnainte de a รฎncepe cu procesul real de exemplu MapReduce Join, schimbaศi utilizatorul รฎn โhduserโ (id-ul folosit รฎn timpul configuraศiei Hadoop, puteศi comuta la ID-ul de utilizator utilizat รฎn timpul configuraศiei Hadoop).
su - hduser_
Pas 1) Copiaศi fiศierul zip รฎn locaศia doritฤ
Pas 2) Decomprimaศi fiศierul Zip
sudo tar -xvf MapReduceJoin.tar.gz
Pas 3) Accesaศi directorul MapReduceJoin/
cd MapReduceJoin/
Pas 4) Porniศi Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Pas 5) DeptStrength.txt ศi DeptName.txt sunt fiศierele de intrare utilizate pentru acest program exemplu MapReduce Join.
Aceste fiศiere trebuie copiate รฎn HDFS folosind comanda de mai jos:
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Pas 6) Rulaศi programul folosind comanda de mai jos -
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Pas 7) Dupฤ execuศie, fiศierul de ieศire (numit โpart-00000โ) va fi stocat รฎn directorul /output_mapreducejoin pe HDFS
Rezultatele pot fi vฤzute folosind interfaศa de linie de comandฤ
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Rezultatele pot fi vฤzute ศi printr-o interfaศฤ web ca-
Acum selectaศi โRฤsfoieศte sistemul de fiศiereโ ศi navigaศi pรขnฤ la /output_mapreducejoin
Operatii Deschise piesa-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ฤ folosiศi un nume diferit pentru directorul de ieศire.
Ce este Counter รฎn MapReduce?
A Contor รฎn MapReduce este un mecanism utilizat pentru colectarea ศi mฤsurarea informaศiilor statistice despre joburile ศi evenimentele MapReduce. Contoarele menศin track din diverse statistici ale joburilor รฎn MapReduce, cum ar fi numฤrul de operaศiuni efectuate ศi progresul operaศiei. Contorii sunt utilizaศi pentru diagnosticarea problemelor รฎn MapReduce.
Contoarele Hadoop sunt similare cu introducerea unui mesaj de jurnal รฎn cod pentru o hartฤ sau reducere. Aceste informaศii ar putea fi utile pentru diagnosticarea unei probleme รฎn procesarea jobului MapReduce.
De obicei, aceste contoare รฎn Hadoop sunt definite รฎntr-un program (map sau reduce) ศi sunt incrementate รฎn timpul execuศiei atunci cรขnd apare un anumit eveniment sau o anumitฤ condiศie (specificฤ acelui contor). O aplicaศie foarte bunฤ a contoarelor Hadoop este de a track รฎnregistrฤri valide ศi nevalide dintr-un set de date de intrare.
Tipuri de contoare MapReduce
Existฤ practic 2 tipuri de MapReduce contoare
- Contoare Hadoop รฎncorporate:Existฤ cรขteva contoare Hadoop รฎncorporate care existฤ pentru fiecare job. Mai jos sunt grupuri de contoare รฎncorporate-
- Contoare de sarcini MapReduce โ Colecteazฤ informaศii specifice sarcinii (de exemplu, numฤrul de รฎnregistrฤri de intrare) รฎn timpul execuศiei acesteia.
- Contoare de sistem de fiศiere โ Colecteazฤ informaศii cum ar fi numฤrul de octeศi citiศi sau scrisi de o sarcinฤ
- Contoare FileInputFormat โ Colecteazฤ informaศii despre un numฤr de octeศi citiศi prin FileInputFormat
- Contoare FileOutputFormat โ Colecteazฤ informaศii dintr-un numฤr de octeศi scrise prin FileOutputFormat
- Contoare de locuri de muncฤ - Aceste contoare sunt folosite de JobTracker. Statisticile colectate de aceศtia includ, de exemplu, numฤrul de sarcini lansate pentru un job.
- Contoare definite de utilizator
รn plus faศฤ de contoarele รฎncorporate, un utilizator รฎศi poate defini propriile contoare folosind funcศionalitฤศi similare oferite de limbaje de programare. De exemplu, รฎn Java โenumโ sunt folosite pentru a defini contoare definite de utilizator.
Exemplu de contoare
Un exemplu de 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, VรขnzฤriJan2009.csv
public static class MapClass
extends MapReduceBase
implements Mapper<LongWritable, Text, Text, Text>
{
static enum SalesCounters { MISSING, INVALID };
public void map ( LongWritable key, Text value,
OutputCollector<Text, Text> output,
Reporter reporter) throws IOException
{
//Input string is split using ',' and stored in 'fields' array
String fields[] = value.toString().split(",", -20);
//Value at 4th index is country. It is stored in 'country' variable
String country = fields[4];
//Value at 8th index is sales data. It is stored in 'sales' variable
String 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, Contoare de vรขnzฤri este un contor definit folosind 'enum'. Este folosit pentru a numฤra LIPSฤ ศi INVALID รฎnregistrฤri de intrare.
รn fragmentul de cod, dacฤ 'ศarฤ' cรขmpul are lungime zero, atunci valoarea lui lipseศte ศi, prin urmare, contorul corespunzฤtor Contoare de vรขnzฤri.LIPSฤ este incrementat.
รn continuare, dacฤ 'vรขnzฤri' cรขmpul รฎncepe cu a atunci รฎnregistrarea este consideratฤ INVALIDฤ. Acest lucru este indicat prin creศterea contorului SalesCounters.INVALID.











