Hadoop MapReduce Bli med og telle med eksempel
⚡ Smart oppsummering
MapReduce-koblinger kombinerer to store datasett på en delt nøkkel, enten inne i mapperen eller inne i reduksjonsverktøyet, mens MapReduce-tellere samler inn statistikk om jobben slik at dårlige poster kan måles i stedet for å gjettes.
Hva er Join i MapReduce?
MapReduce Join-operasjonen brukes til å kombinere to store datasett. Denne prosessen innebærer imidlertid å skrive mye kode for å utføre selve sammenkoblingsoperasjonen. Sammenkobling av to datasett starter med å sammenligne størrelsen på hvert datasett. Hvis ett datasett er mindre sammenlignet med det andre datasettet, distribueres det mindre datasettet til hver datanode i klyngen.
Når man først blir med MapReduce er distribuert, bruker enten Mapper eller Reducer det mindre datasettet til å utføre et oppslag etter samsvarende poster fra det store datasettet, og kombinerer deretter disse postene for å danne utdataposter.
Typer bli med
Avhengig av stedet der den faktiske sammenføyningen utføres, klassifiseres sammenføyninger i Hadoop i to typer.
- Kartsidekobling — Når sammenføyningen utføres av mapperen, kalles det en kartside-sammenføyning. I denne typen utføres sammenføyningen før data faktisk forbrukes av kartfunksjonen. Det er obligatorisk at inputen til hvert kart er i form av en partisjon og er i sortert rekkefølge. Det må også være et likt antall partisjoner, og det må sorteres etter sammenføyningsnøkkelen.
- Reduser sidekobling — Når sammenføyningen utføres av reduseringsfunksjonen, kalles det en reduseringssidesammenføyning. Det er ikke nødvendig i denne sammenføyningen å ha et datasett i en strukturert form (eller partisjonert). Her sender kartsidebehandling ut sammenføyningsnøkkelen og de tilsvarende tuplene for begge tabellene. Som en effekt av denne behandlingen faller alle tuplene med samme sammenføyningsnøkkel inn i samme reduseringsfunksjon, som deretter sammenføyer postene med samme sammenføyningsnøkkel.
En samlet prosessflyt av sammenføyninger i Hadoop er avbildet i diagrammet nedenfor.

Når de to variantene er klare, går neste avsnitt gjennom en reduce-side join på to små avdelingsfiler.
Slik kobler du sammen to datasett: MapReduce Eksempel
Det er to datasett i to forskjellige filer (vist nedenfor). Nøkkelen Dept_ID er felles i begge filene. Målet er å bruke MapReduce Join til å kombinere disse filene.
Inngang: Inndatasettet er en txt-fil, DeptName.txt og DeptStrength.txt
Forsikre deg om at du har det Hadoop installert. Før du starter med den faktiske prosessen i MapReduce Join-eksemplet, endrer du brukeren til 'hduser' (ID-en som ble brukt under Hadoop-konfigurasjonen. Du kan bytte til bruker-ID-en som ble brukt under Hadoop-konfigurasjonen).
su - hduser_
Ledeteksten endres til Hadoop-kontoen, som vist nedenfor.
Trinn 1) Kopier zip-filen til stedet du ønsker
Trinn 2) Pakk ut zip-filen
sudo tar -xvf MapReduceJoin.tar.gz
Eksentracted-filnavn ruller forbi mens tar pakker ut arkivet.
Trinn 3) Gå til katalogen MapReduceJoin/
cd MapReduceJoin/
Trinn 4) Start Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Begge skriptene skriver ut daemonene de åpner.
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
Kommandoen gjentas først, og jobben rapporterer deretter fremdriften i konsollen.
Trinn 7) Etter utførelse lagres utdatafilen (med navnet 'part-00000') 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.
Sammenføyninger forteller deg hvordan dataene ser ut. Tellere, som dekkes senere, forteller deg hvordan jobben som produserte dem oppførte seg.
Hva er Counter i MapReduce?
En teller i MapReduce er en mekanisme som brukes til å samle inn og måle statistisk informasjon om MapReduce-jobber og -hendelser. Tellere holder track av ulike jobbstatistikker i MapReduce, som antall operasjoner som har blitt utført og fremdriften til operasjonen. Tellere brukes til 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 (tilordnes eller reduseres) og økes under utførelse når en bestemt hendelse eller betingelse (spesifikk for den telleren) oppstår. En veldig god anvendelse av Hadoop-tellere er å track gyldige og ugyldige poster fra et inputdatasett.
Typer MapReduce-tellere
Det finnes i utgangspunktet to typer MapReduce-tellere.
- Innebygde tellere i Hadoop: Det er noen innebygde Hadoop-tellere som eksisterer per jobb. Nedenfor er innebygde tellergrupper-
- MapReduce Task Counters — Samler inn oppgavespesifikk informasjon (f.eks. antall inndataposter) i løpet av utførelsestiden.
- Filsystemtellere — Samler inn 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 registrerer statistikk for hele jobben, for eksempel antall oppgaver som er startet for en jobb.
- Brukerdefinerte tellere: I tillegg til innebygde tellere kan en bruker definere sine egne tellere ved hjelp av lignende funksjoner som tilbys av programmeringsspråk. For eksempel, i Java, en 'enum' brukes til å definere brukerdefinerte tellere.
💡 Versjonsmerknad: jobbtellere ble vedlikeholdt av jobbenTracker under MRv1. På YARN tilhører den rollen MapReduce ApplicationMaster, så tellernavnene beholder sin status, men komponenten som rapporterer dem har endret seg.
En jobb kan ikke deklarere et ubegrenset antall tellere. mapreduce.job.counters.max innstillingen setter en standardgrense på 120 per jobb, og en jobb som deklarerer flere mislykkes med en LimitExceededException, så tellere er ment for en håndfull aggregerte signaler i stedet for tellinger per nøkkel.
Eksempel på tellere
Et eksempel på en MapClass med tellere for å telle antall manglende og ugyldige verdier. Inndatafil brukt i denne veiledningen Inndatasettet vårt er en CSV-fil, 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")); } } }
Kodestykket ovenfor viser et eksempel på implementering av tellere i Hadoop MapReduce.
Her Salgstellere er en teller definert ved hjelp av 'enum'. Den brukes til å telle MANGLENDE og UGYLDIGE inndataposter.
I kodebiten, hvis 'land'-feltet har lengde null, mangler verdien, og dermed økes den tilsvarende telleren SalesCounters.MISSING.
Neste, hvis 'salg'-feltet starter med et «, regnes posten som UGYLDIG. Dette indikeres ved å øke telleren SalesCounters.INVALID.
💡 API-merknad: utdraget ovenfor bruker originalen org.apache.hadoop.mapred API, hvor MapReduceBaseden Mapper grensesnitt, OutputCollector og Reporter vises separat. Gjeldende kode er skrevet mot org.apache.hadoop.mapreduce, hvor en enkelt Context erstatter samleren og rapportøren, og en teller økes med context.getCounter(SalesCounters.MISSING).increment(1)Tellerkonseptet er identisk i begge.











