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.
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
Inngang: Inndatasettet er en txt-fil, DeptName.txt og DepStrength.txt
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_
Trinn 1) Kopier zip-filen til stedet du ønsker
Trinn 2) Pakk ut zip-filen
sudo tar -xvf MapReduceJoin.tar.gz
Trinn 3) Gå til katalogen MapReduceJoin/
cd MapReduceJoin/
Trinn 4) Start Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
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 /
Trinn 6) Kjør programmet ved å bruke kommandoen nedenfor-
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
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
Resultatene kan også sees via et nettgrensesnitt som-
Velg nå "Bla gjennom filsystemet" og naviger opp til /output_mapreducejoin
Åpen del-r-00000
Resultatene vises
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
- 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.
- 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.