Hadoop MapReduce Join & Counter s primjerom

โšก Pametni saลพetak

MapReduce spajanja kombiniraju dva velika skupa podataka na zajedniฤkom kljuฤu, bilo unutar mapera ili unutar reducera, dok MapReduce brojaฤi prikupljaju statistiku o poslu tako da se loลกi zapisi mogu mjeriti, a ne nagaฤ‘ati.

  • ๐Ÿ”˜ Osnove pridruลพivanja: Manji od dva skupa podataka distribuira se svakom podatkovnom ฤvoru i koristi se kao strana za pretraลพivanje.
  • โ˜‘๏ธ Spoj na strani karte: Zahtijeva da svaki ulaz bude particioniran, jednako podijeljen i sortiran prema kljuฤu spajanja prije pokretanja funkcije mapiranja.
  • โœ… Spoj na smanjenoj strani: Ne treba particioniranje, jer svaka n-torka koja dijeli kljuฤ spajanja zavrลกava u istom reduktoru.
  • ๐Ÿงช Obraฤ‘eni primjer: Datoteke DeptName.txt i DeptStrength.txt kopiraju se u HDFS i spajaju na Dept_ID pomoฤ‡u zapakirane JAR datoteke.
  • ๐Ÿ› ๏ธ Vrste brojaฤa: Pet ugraฤ‘enih grupa brojaฤa isporuฤuje se sa svakim poslom, a korisniฤki definirani brojaฤi deklarirani su kao Java nabrajanje.
  • โš ๏ธ Upotreba brojaฤa: Poveฤ‡anje brojaฤa za svaki nedostajuฤ‡i ili nevaลพeฤ‡i zapis pretvara probleme s kvalitetom podataka u broj u izvjeลกฤ‡u o poslu.

Vodiฤ za spajanje i brojanje u Hadoop MapReduceu s razraฤ‘enim primjerom

ล to je Join u MapReduceu?

Operacija spajanja MapReduce koristi se 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 zapoฤ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 na svaki podatkovni ฤvor u klasteru.

Nakon ลกto se pridruลพite MapReduce distribuira se, Mapper ili Reducer koristi manji skup podataka za pretraลพivanje odgovarajuฤ‡ih zapisa iz velikog skupa podataka, a zatim kombinira te zapise kako bi formirao izlazne zapise.

Vrste pridruลพivanja

Ovisno o mjestu gdje se stvarno spajanje izvodi, spajanja u Hadoopu se klasificiraju u dvije vrste.

  1. Spoj na strani karte โ€” Kada maper izvrลกi spajanje, to se naziva spajanje na strani mape. U ovoj vrsti, spajanje se izvodi prije nego ลกto funkcija mapiranja zapravo konzumira podatke. Obavezno je da ulaz u svaku mapu bude u obliku particije i da bude sortiran. Takoฤ‘er, mora postojati jednak broj particija i moraju biti sortirane prema kljuฤu spajanja.
  2. Spoj na smanjenoj strani โ€” Kada spajanje izvodi reduktor, to se naziva spajanje na strani redukcije. U ovom spajanju nije potrebno imati skup podataka u strukturiranom obliku (ili particioniranom). Ovdje, obrada na strani mape emitira kljuฤ spajanja i odgovarajuฤ‡e korte obje tablice. Kao rezultat ove obrade, svi kortezi 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.

Dijagram toka procesa koji usporeฤ‘uje spajanje na strani mape sa spajanjem na strani smanjenja u Hadoopu
Vrste spajanja u Hadoop MapReduce

Nakon ลกto su dvije varijante razjaลกnjene, sljedeฤ‡i odjeljak prolazi kroz spajanje na strani smanjenja na dvije male datoteke odjela.

Kako spojiti dva skupa podataka: primjer MapReduce

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

Prva ulazna datoteka s popisom ID-ova odjela uz nazive odjela

Datoteka 1
Druga ulazna datoteka s popisom ID-ova odjela uz vrijednosti snage odjela

Datoteka 2

Ulazni: Ulazni skup podataka je txt datoteka, NazivOdjela.txt i JaฤinaOdjela.txt

Preuzmite ulazne datoteke odavde

Osigurajte da imate Hadoop instalirano. Prije nego ลกto zapoฤnete s primjerom MapReduce Join-a, promijenite korisnika u 'hduser' (id koji se koristi tijekom konfiguracije Hadoop-a, moลพete se prebaciti na korisniฤki ID koji se koristi tijekom vaลกe konfiguracije Hadoop-a).

su - hduser_

Upit se mijenja na Hadoop raฤun, kao ลกto je prikazano u nastavku.

Terminal nakon prebacivanja na hduser raฤun pomoฤ‡u naredbe su

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

Preuzeta MapReduceJoin arhiva smjeลกtena u odabrani radni direktorij

Korak 2) Raspakujte Zip datoteku

sudo tar -xvf MapReduceJoin.tar.gz

Bivลกi/atracImena datoteka se pomiฤu dok tar raspakira arhivu.

Popis datoteka u konzoli, npr.tracpreuzeto iz MapReduceJoin.tar.gz

Korak 3) Idite u direktorij MapReduceJoin/

cd MapReduceJoin/

Shell prompt nakon promjene u direktorij MapReduceJoin

Korak 4) Pokrenite Hadoop

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

Oba skripta ispisuju demone koje pokreฤ‡u.

Poruke pri pokretanju iz skripti HDFS i YARN daemon

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

Ove datoteke je potrebno kopirati u HDFS pomoฤ‡u donje naredbe -

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

Obje ulazne tekstualne datoteke kopirane su u korijenski direktorij HDFS-a

Korak 6) Pokrenite program pomoฤ‡u donje naredbe-

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

Naredba se prvo ponavlja, a zatim zadatak izvjeลกtava o svom napretku na konzoli.

Pokretanje zapakirane jar datoteke MapReduceJoin pomoฤ‡u naredbenog retka

Izlaz konzole tracpraฤ‡enje napretka posla spajanja MapReduce

Korak 7) Nakon izvrลก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

Zapisi o pridruลพenim odjelima ispisani iz HDFS-a pomoฤ‡u naredbe cat

Rezultati se takoฤ‘er mogu vidjeti putem web suฤelja kao-

Poฤetna stranica Hadoop web suฤelja koja se koristi za pristup pregledniku datoteฤnog sustava

Sada odaberite 'Pregledaj datoteฤni sustav' i idite do /output_mapreducejoin

Pregledavanje prikaza HDFS datoteฤnog sustava do direktorija output_mapreducejoin

Otvori dio-r-00000

Odabir izlazne datoteke part-r-00000 unutar prikaza preglednika

Prikazani su rezultati

Naziv pridruลพenog odjela i redovi snage odjela prikazani u pregledniku

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.

Spojevi vam govore kako podaci izgledaju. Brojaฤi, o kojima ฤ‡e biti rijeฤi u nastavku, govore vam kako se ponaลกao posao koji ih je proizveo.

ล to je brojaฤ u MapReduceu?

Brojaฤ u MapReduceu je mehanizam koji se koristi za prikupljanje i mjerenje statistiฤkih informacija o MapReduce poslovima i dogaฤ‘ajima. Brojaฤi ฤuvaju track razliฤitih statistika poslova u MapReduceu, poput broja izvrลกenih operacija i napretka operacije. Brojaฤi se koriste za dijagnosticiranje 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 reduce) i poveฤ‡avaju se tijekom izvrลกavanja kada se dogodi odreฤ‘eni dogaฤ‘aj ili uvjet (specifiฤan za taj brojaฤ). Vrlo dobra primjena Hadoop brojaฤa je za track valjanih i nevaljanih zapisa iz ulaznog skupa podataka.

Vrste MapReduce brojaฤa

Postoje u osnovi 2 vrste MapReduce brojaฤa

  1. Ugraฤ‘eni brojaฤi u Hadoopu: Postoje neki ugraฤ‘eni Hadoop brojaฤi koji postoje po poslu. Ispod su ugraฤ‘ene grupe brojaฤa-
    • Brojaฤi zadataka MapReduce โ€” Prikuplja podatke specifiฤne za zadatak (npr. broj ulaznih zapisa) tijekom vremena njegovog izvrลกavanja.
    • Brojaฤi datoteฤnog sustava โ€” Prikuplja informacije poput broja bajtova koje je zadatak proฤitao ili napisao.
    • Brojaฤi FileInputFormat โ€” Prikuplja informacije o odreฤ‘enom broju bajtova proฤitanih putem FileInputFormat-a.
    • Brojaฤi FileOutputFormat โ€” Prikuplja informacije o odreฤ‘enom broju bajtova zapisanih putem FileOutputFormat-a.
    • Brojaฤi poslova โ€” Ovi brojaฤi biljeลพe statistiku cijelog posla, kao ลกto je broj zadataka pokrenutih za posao.
  2. Korisniฤki definirani brojaฤi: Uz ugraฤ‘ene brojaฤe, korisnik moลพe definirati vlastite brojaฤe koristeฤ‡i sliฤne funkcionalnosti koje pruลพaju programski jezici. Na primjer, u Java, 'enum' se koristi za definiranje korisniฤki definiranih brojaฤa.

๐Ÿ’ก Napomena o verziji: brojaฤe poslova odrลพavao je odjel za posaoTracker pod MRv1. Na YARN-u ta uloga pripada MapReduce ApplicationMasteru, tako da nazivi brojaฤa ostaju, ali se komponenta koja ih izvjeลกtava promijenila.

Posao ne moลพe deklarirati neograniฤen broj brojaฤa. mapreduce.job.counters.max postavka ograniฤava ukupan broj po zadatku na 120 prema zadanim postavkama, a zadatak koji deklarira viลกe ne uspijeva s LimitExceededException, pa su brojaฤi namijenjeni za nekolicinu agregiranih signala, a ne za brojanja po kljuฤu.

Primjer brojaฤa

Primjer MapClass s brojaฤima za brojanje nedostajuฤ‡ih i nevaลพeฤ‡ih vrijednosti. Ulazna datoteka koriลกtena u ovom vodiฤu Naลก skup ulaznih podataka je CSV datoteka, SalesJan2009.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 MapReduceu.

Ovdje, Prodajni pultovi je brojaฤ definiran pomoฤ‡u 'nabrajanje'. Koristi se za brojanje NEDOSTAJUฤ†IH i NEVAลฝEฤ†IH ulaznih zapisa.'

U isjeฤku koda, ako 'zemlja' ima nultu duljinu, tada mu nedostaje vrijednost i stoga se odgovarajuฤ‡i brojaฤ SalesCounters.MISSING poveฤ‡ava.

Zatim, ako 'prodajni' polje poฤinje s ", tada se zapis smatra NEVAลฝEฤ†IM. To je naznaฤeno poveฤ‡anjem brojaฤa SalesCounters.INVALID.

๐Ÿ’ก Napomena API-ja: Gornji isjeฤak koristi original org.apache.hadoop.mapred API, gdje MapReduceBase je Mapper suฤelje, OutputCollector i Reporter pojavljuju se odvojeno. Trenutni kod je napisan uz org.apache.hadoop.mapreduce, gdje je jedan Context zamjenjuje kolektora i izvjestitelja, a brojaฤ se poveฤ‡ava za context.getCounter(SalesCounters.MISSING).increment(1)Koncept brojaฤa je identiฤan u oba.

Pitanja i odgovori

Odaberite varijantu mapera kada je jedna strana dovoljno mala da se spremi u memoriju na svakom ฤvoru, jer u potpunosti preskaฤe mijeลกanje. Odaberite varijantu reducera kada su obje strane velike ili nesortirane i prihvatite dodatne mreลพne troลกkove.

Modeli uฤe iz povijesne povijesti poslova kako bi predvidjeli vrijeme izvoฤ‘enja, preporuฤili veliฤine podjele i broj reduktora te otkrili odstupanje od vrijednosti brojaฤa. Takoฤ‘er oznaฤavaju poslove ฤiji brojaฤi prolivenih zapisa ili neuspjelih zadataka odstupaju izvan normalnog opsega za taj cjevovod.

Copilot stvara uvjerljive kosture mappera i reducera, ali slobodno mijeลกa stari mapred paket s novijim mapreduce paketom u jednoj klasi, ลกto se neฤ‡e kompajlirati. Ispravite uvoze i potpise metoda prije nego ลกto povjerujete logici.

To je mehanizam koji ลกalje manju datoteku svakom ฤvoru prije poฤetka zadataka. Svaki maper zatim uฤitava tu kopiju u hash mapu i lokalno pretraลพuje podudaranja, ลกto omoguฤ‡uje spajanje na strani mapera.

Ispisuju se u saลพetku konzole kada se posao zavrลกi, prikazuju se u povijesti poslova i web stranicama upravitelja resursa te se mogu programski ฤitati iz objekta posla, tako da upravljaฤki program moลพe izvrลกiti assertaciju na njih i propustiti loลกe pokretanje.

Jedan objekt Context. Prenosi posao koji su OutputCollector i Reporter koristili za podjelu izmeฤ‘u sebe, pa se izlaz zapisuje i brojaฤi poveฤ‡avaju putem istog handlea koji se prosljeฤ‘uje metodi map.

Za veฤ‡inu novinarskih radova, br. A Pridruลพivanje HiveQL-u kompilira se u isti obrazac mijeลกanja i spajanja u nekoliko redaka. Rukom pisani poslovi se isplate kada logika spajanja ne odgovara SQL klauzuli.

Hadoop odbija pisati u izlazni direktorij koji veฤ‡ postoji, ลกto ลกtiti gotove rezultate od prepisivanja. Prvo rekurzivno izbriลกite direktorij ili proslijedite drugu izlaznu putanju pri sljedeฤ‡em pokretanju.

Saลพmite ovu objavu uz: