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.

Tipuri de รฎmbinฤƒri รฎn Hadoop MapReduce
Tipuri de รฎmbinฤƒri รฎn Hadoop MapReduce

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

Exemplu MapReduce
fiลŸier 1
Exemplu MapReduce
fiลŸier 2

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_

Exemplu MapReduce

Pas 1) Copiaศ›i fiศ™ierul zip รฎn locaศ›ia doritฤƒ

Exemplu MapReduce

Pas 2) Decomprimaศ›i fiศ™ierul Zip

sudo tar -xvf MapReduceJoin.tar.gz

Exemplu MapReduce

Pas 3) Accesaศ›i directorul MapReduceJoin/

cd MapReduceJoin/

Exemplu MapReduce

Pas 4) Porniศ›i Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Exemplu MapReduce

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 /

Exemplu MapReduce

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

Exemplu MapReduce

Exemplu MapReduce

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

Exemplu MapReduce

Rezultatele pot fi vฤƒzute ศ™i printr-o interfaศ›ฤƒ web ca-

Exemplu MapReduce

Acum selectaศ›i โ€žRฤƒsfoieศ™te sistemul de fiศ™iereโ€ ศ™i navigaศ›i pรขnฤƒ la /output_mapreducejoin

Exemplu MapReduce

Operatii Deschise piesa-r-00000

Exemplu MapReduce

Rezultatele sunt afiศ™ate

Exemplu MapReduce

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

  1. 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.
  2. 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.

Rezumaศ›i aceastฤƒ postare cu: