Hadoop MapReduce Join & Counter s primjerom

Što je Join u Mapreduceu?

Mapreduce Pridružite se operacija se koristi za kombiniranje dva velika skupa podataka. Međutim, ovaj proces uključuje pisanje puno koda za izvođenje stvarne operacije spajanja. Spajanje dva skupa podataka počinje usporedbom veličine svakog skupa podataka. Ako je jedan skup podataka manji u usporedbi s drugim skupom podataka, tada se manji skup podataka distribuira svakom podatkovnom čvoru u klasteru.

Nakon što se pridruživanje u MapReduce distribuira, ili Mapper ili Reducer koriste manji skup podataka za traženje podudarnih zapisa iz velikog skupa podataka i zatim kombiniraju te zapise u obliku izlaznih zapisa.

Vrste pridruživanja

Ovisno o mjestu gdje se stvarno spajanje izvodi, spajanja u Hadoopu klasificiraju se na:

1. Spajanje na strani karte – Kada spajanje izvodi maper, to se naziva spajanje na strani karte. U ovoj vrsti, spajanje se izvodi prije nego što podaci budu stvarno potrošeni od strane funkcije karte. Obavezno je da unos svake karte bude u obliku particije i poredan. Također, mora postojati jednak broj particija i mora biti sortirano po ključu pridruživanja.

2. Spoj reducirane strane – Kada spajanje izvodi reduktor, to se naziva spajanje na strani redukcije. U ovom spajanju nema potrebe za skupom podataka u strukturiranom obliku (ili particioniranom).

Ovdje obrada strane karte emitira ključ spajanja i odgovarajuće torke obje tablice. Kao učinak ove obrade, sve torke s istim ključem spajanja padaju u isti reduktor koji zatim spaja zapise s istim ključem spajanja.

Cjelokupni tijek procesa spajanja u Hadoopu prikazan je na donjem dijagramu.

Vrste spajanja u Hadoop MapReduce
Vrste spajanja u Hadoop MapReduce

Kako spojiti dva skupa podataka: primjer MapReduce

Postoje dva skupa podataka u dvije različite datoteke (prikazano dolje). Key Dept_ID zajednički je u obje datoteke. Cilj je koristiti MapReduce Join za kombiniranje ovih datoteka

Primjer MapReduce
Datoteka 1
Primjer MapReduce
Datoteka 2

Ulazni: Ulazni skup podataka je txt datoteka, DeptName.txt & DepStrength.txt

Preuzmite ulazne datoteke odavde

Provjerite imate li instaliran Hadoop. Prije nego počnete sa stvarnim postupkom primjera MapReduce Join, promijenite korisnika u 'hduser' (id koji se koristi tijekom konfiguracije Hadoop-a, možete se prebaciti na ID korisnika koji se koristi tijekom vaše konfiguracije Hadoop-a).

su - hduser_

Primjer MapReduce

Korak 1) Kopirajte zip datoteku na mjesto po vašem izboru

Primjer MapReduce

Korak 2) Raspakujte Zip datoteku

sudo tar -xvf MapReduceJoin.tar.gz

Primjer MapReduce

Korak 3) Idite u direktorij MapReduceJoin/

cd MapReduceJoin/

Primjer MapReduce

Korak 4) Pokrenite Hadoop

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

Primjer MapReduce

Korak 5) DeptStrength.txt i DeptName.txt su ulazne datoteke koje se koriste za ovaj primjer programa MapReduce Join.

Ove datoteke potrebno je kopirati u HDFS pomoću naredbe u nastavku-

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /

Primjer MapReduce

Korak 6) Pokrenite program pomoću donje naredbe-

$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin

Primjer MapReduce

Primjer MapReduce

Korak 7) Nakon izvođenja, izlazna datoteka (nazvana 'part-00000') bit će pohranjena u direktoriju /output_mapreducejoin na HDFS-u

Rezultati se mogu vidjeti pomoću sučelja naredbenog retka

$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000

Primjer MapReduce

Rezultati se također mogu vidjeti putem web sučelja kao-

Primjer MapReduce

Sada odaberite "Pregledaj datotečni sustav" i idite do /output_mapreducejoin

Primjer MapReduce

Otvoren dio-r-00000

Primjer MapReduce

Prikazani su rezultati

Primjer MapReduce

NAPOMENA: Imajte na umu da ćete prije pokretanja ovog programa sljedeći put morati obrisati izlazni direktorij /output_mapreducejoin

$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin

Alternativa je korištenje drugog imena za izlazni direktorij.

Što je brojač u MapReduceu?

A Brojač u MapReduceu je mehanizam koji se koristi za prikupljanje i mjerenje statističkih informacija o MapReduce poslovima i događajima. Brojači prate različite statistike poslova u MapReduceu kao što su broj izvršenih operacija i napredak operacije. Brojači se koriste za dijagnozu problema u MapReduceu.

Hadoop brojači slični su stavljanju poruke dnevnika u kod za mapiranje ili smanjenje. Ove informacije mogu biti korisne za dijagnozu problema u obradi posla MapReduce.

Obično su ovi brojači u Hadoopu definirani u programu (map ili redukcija) i povećavaju se tijekom izvođenja kada se dogodi određeni događaj ili uvjet (specifičan za taj brojač). Vrlo dobra primjena Hadoop brojača je praćenje valjanih i nevažećih zapisa iz ulaznog skupa podataka.

Vrste MapReduce brojača

U osnovi postoje 2 vrste MapReduce brojači

  1. Hadoop ugrađeni brojači:Postoje neki ugrađeni Hadoop brojači koji postoje po poslu. Ispod su ugrađene grupe brojača-
    • Brojači zadataka MapReduce – Prikuplja informacije specifične za zadatak (npr. broj ulaznih zapisa) tijekom vremena njegovog izvršenja.
    • Brojači datotečnog sustava – Prikuplja informacije poput broja bajtova koje je zadatak pročitao ili napisao
    • Brojači FileInputFormat – Prikuplja podatke o broju bajtova koji se čitaju kroz FileInputFormat
    • Brojači FileOutputFormat – Prikuplja informacije o broju bajtova zapisanih kroz FileOutputFormat
    • Brojači poslova – Ove brojače koristi JobTracker. Statistika koju oni prikupljaju uključuje npr. broj zadataka pokrenutih za posao.
  2. Korisnički definirani brojači

Osim ugrađenih brojača, korisnik može definirati vlastite brojače koristeći slične funkcionalnosti koje nudi programski jezici, Na primjer, u Java 'enum' se koriste za definiranje korisnički definiranih brojača.

Primjer brojača

Primjer MapClass s brojačima za brojanje vrijednosti koje nedostaju i nevažećih vrijednosti. Datoteka ulaznih podataka korištena u ovom vodiču Naš skup ulaznih podataka je CSV datoteka, ProdajaSiječanj2009.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"));
        }
    }
}

Gornji isječak koda prikazuje primjer implementacije brojača u Hadoop Map Reduce.

Ovdje, Prodajni pultovi je brojač definiran korištenjem 'enum'. Služi za brojanje NEDOSTAJE i INVALIDNO ulazni zapisi.

U isječku koda, ako 'zemlja' polje ima duljinu nula, tada nedostaje njegova vrijednost, a time i odgovarajući brojač Prodajni pultovi.NEDOSTAJE se povećava.

Dalje, ako 'prodajni' polje počinje s a " tada se zapis smatra NEVAŽEĆIM. To je označeno inkrementirajućim brojačem SalesCounters.INVALID.