Hadoop MapReduce Bli med og telle med eksempel

Hva er Bli med i Mapreduce?

Mapreduce Bli med operasjon brukes til å kombinere to store datasett. Imidlertid innebærer denne prosessen å skrive mye kode for å utføre selve join-operasjonen. Å slå sammen to datasett begynner med å sammenligne størrelsen på hvert datasett. Hvis ett datasett er mindre sammenlignet med det andre datasettet, distribueres mindre datasett til hver datanode i klyngen.

Når en sammenføyning i MapReduce er distribuert, bruker enten Mapper eller Reducer det mindre datasettet for å utføre et oppslag for samsvarende poster fra det store datasettet og deretter kombinere disse postene for å danne utdataposter.

Typer bli med

Avhengig av stedet der den faktiske sammenføyningen utføres, klassifiseres sammenføyninger i Hadoop i-

1. Sammenføyning på kartsiden – Når sammenføyningen utføres av kartleggeren, kalles den sammenføyning på kartsiden. I denne typen utføres sammenføyningen før data faktisk forbrukes av kartfunksjonen. Det er obligatorisk at input til hvert kart er i form av en partisjon og er i sortert rekkefølge. Dessuten må det være like mange partisjoner og det må sorteres etter sammenføyningsnøkkelen.

2. Reduser sammenføyning på siden – Når sammenføyningen utføres av reduksjonsanordningen, kalles det skjøting på reduseringssiden. Det er ingen nødvendighet i denne sammenføyningen å ha et datasett i en strukturert form (eller partisjonert).

Her avgir kartsidebehandlingen sammenføyningsnøkkel og tilsvarende tupler av begge tabellene. Som en effekt av denne behandlingen, faller alle tuplene med samme sammenføyningsnøkkel inn i den samme reduseringen som deretter kobler sammen postene med samme sammenføyningsnøkkel.

En samlet prosessflyt av sammenføyninger i Hadoop er avbildet i diagrammet nedenfor.

Typer sammenføyninger i Hadoop MapReduce
Typer sammenføyninger i Hadoop MapReduce

Slik kobler du sammen to datasett: MapReduce Eksempel

Det er to sett med data i to forskjellige filer (vist nedenfor). Key Dept_ID er vanlig i begge filene. Målet er å bruke MapReduce Join til å kombinere disse filene

Eksempel på MapReduce
1 File
Eksempel på MapReduce
2 File

Inngang: Inndatasettet er en txt-fil, DeptName.txt og DepStrength.txt

Last ned inndatafiler herfra

Sørg for at du har Hadoop installert. Før du starter med den faktiske prosessen med MapReduce Join-eksemplet, endre bruker til 'hduser' (id brukt mens Hadoop-konfigurasjonen, du kan bytte til bruker-ID-en som ble brukt under Hadoop-konfigurasjonen).

su - hduser_

Eksempel på MapReduce

Trinn 1) Kopier zip-filen til stedet du ønsker

Eksempel på MapReduce

Trinn 2) Pakk ut zip-filen

sudo tar -xvf MapReduceJoin.tar.gz

Eksempel på MapReduce

Trinn 3) Gå til katalogen MapReduceJoin/

cd MapReduceJoin/

Eksempel på MapReduce

Trinn 4) Start Hadoop

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

Eksempel på MapReduce

Trinn 5) DeptStrength.txt og DeptName.txt er inndatafilene som brukes for dette MapReduce Join-eksempelprogrammet.

Disse filene må kopieres til HDFS ved å bruke kommandoen nedenfor

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

Eksempel på MapReduce

Trinn 6) Kjør programmet ved å bruke kommandoen nedenfor-

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

Eksempel på MapReduce

Eksempel på MapReduce

Trinn 7) Etter kjøring vil utdatafilen (kalt 'del-00000') lagres i katalogen /output_mapreducejoin på HDFS

Resultatene kan sees ved hjelp av kommandolinjegrensesnittet

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

Eksempel på MapReduce

Resultatene kan også sees via et nettgrensesnitt som-

Eksempel på MapReduce

Velg nå "Bla gjennom filsystemet" og naviger opp til /output_mapreducejoin

Eksempel på MapReduce

Åpen del-r-00000

Eksempel på MapReduce

Resultatene vises

Eksempel på MapReduce

NOTAT: Vær oppmerksom på at før du kjører dette programmet for neste gang, må du slette utdatakatalogen /output_mapreducejoin

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

Alternativet er å bruke et annet navn for utdatakatalogen.

Hva er Counter i MapReduce?

A Teller i MapReduce er en mekanisme som brukes til å samle inn og måle statistisk informasjon om MapReduce-jobber og hendelser. Tellere holder oversikt over ulike jobbstatistikker i MapReduce som antall operasjoner som har skjedd og fremdriften av operasjonen. Tellere brukes for problemdiagnose i MapReduce.

Hadoop-tellere ligner på å sette en loggmelding i koden for et kart eller redusere. Denne informasjonen kan være nyttig for diagnostisering av et problem i MapReduce jobbbehandling.

Vanligvis er disse tellerne i Hadoop definert i et program (kart eller reduser) og økes under utførelse når en bestemt hendelse eller tilstand (spesifikk for den telleren) inntreffer. En veldig god applikasjon av Hadoop-tellere er å spore gyldige og ugyldige poster fra et input-datasett.

Typer MapReduce-tellere

Det er i utgangspunktet 2 typer MapReduce tellere

  1. Hadoop innebygde tellere:Det er noen innebygde Hadoop-tellere som eksisterer per jobb. Nedenfor er innebygde tellergrupper-
    • MapReduce Task Counters – Samler oppgavespesifikk informasjon (f.eks. antall inndataposter) i løpet av utførelsestiden.
    • Filsystemtellere – Samler informasjon som antall byte lest eller skrevet av en oppgave
    • FileInputFormat-tellere – Samler informasjon om et antall byte lest gjennom FileInputFormat
    • FileOutputFormat-tellere – Samler informasjon om et antall byte skrevet gjennom FileOutputFormat
    • Jobbtellere – Disse tellerne brukes av JobTracker. Statistikk samlet inn av dem inkluderer for eksempel antall oppgaver som er lansert for en jobb.
  2. Brukerdefinerte tellere

I tillegg til innebygde tellere, kan en bruker definere sine egne tellere ved å bruke lignende funksjoner levert av programmerings språk. For eksempel i Java 'enum' brukes til å definere brukerdefinerte tellere.

Eksempel på tellere

Et eksempel på MapClass med tellere for å telle antall manglende og ugyldige verdier. Inndatafil som brukes i denne opplæringen Vårt inndatadatasett er en CSV-fil, SalgJan2009.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"));
        }
    }
}

Kodebiten ovenfor viser et eksempelimplementering av tellere i Hadoop Map Reduce.

Her Salgstellere er en teller definert ved hjelp av 'enum'. Det brukes til å telle MANGLER og UGYLDIG legge inn poster.

I kodebiten, if 'land' feltet har null lengde, så mangler verdien og dermed tilsvarende teller Salgstellere.MANGLER er økt.

Neste, hvis "salg" feltet starter med a " da anses posten som Ugyldig. Dette indikeres med økende teller Salgetellere.Ugyldig.