MapReduce Python -eksempel

MapReduce Python -eksempel
Mange ganger, mens vi arbeider med data, møter vi en stor mengde data. Det er mange metoder for å håndtere denne saken. Men mange tilnærminger er ikke i stand til å håndtere situasjonen. Så vi bruker kartredusering for slike situasjoner. En "MapReduce" er et rammeverk og en programmeringsmodell i Hadoop -arkitekturen, brukt til å behandle en stor mengde data i Hadoop -filsystemer.

“MapReduce” er en av de tredje komponentene i Hadoop. Dette rammeverket er effektivt for behandling av store data parallelt med de andre oppgavene. Det grunnleggende formålet med "MapReduce" er å kartlegge hver jobb kollektivt i grupper, og da vil dette redusere den til like oppgaver for å redusere klyngedannelsen av prosessene. "MapReduce" -oppgaven er delt i to faser.

  • Kartfase
  • Reduser fasen

Kart Reduser konsept og arkitektur

Inngangsdataene distribueres til små biter for behandling av data gjennom forskjellige arbeidere. Hver liten del er kartlagt til en mellomliggende situasjon/stat. At mellomdata blir deretter samlet sammen, og deretter oppstår partisjonsprosessen som er basert på en nøkkelverdi for å holde alt relatert materiale med hverandre. Så fører denne partisjonering av data til det resulterende reduserte settet. La oss vurdere diagrammet nedenfor.

Deler av arkitektur

  • Klient: Det er den som er ansvarlig for å ta jobben for å "mapreduce" for behandlingsfunksjonen. Det kan være en mulighet for flere klienter som sender jobber kontinuerlig for behandlingen til "MapReduce" Manager.
  • Jobb: Det er den faktiske oppgaven/arbeidet som klienten ønsker å gjøre som inneholder mange mindre oppgaver som klienten ønsker for utførelsen.
  • Hadoop MapReduce Master: Funksjonen til denne mesteren er å dele opp jobben i mindre jobbdeler.
  • Jobbdeler: Underjobbene oppnådd fra hovedjobbfunksjonen. Den resulterende verdien av alle jobbdelene danner samlet en endelig produksjon.
  • Inndata: Dataene som blir introdusert for kartreduksjonen for behandling av data.
  • Utgangsdata: Inneholder de begrensede ordene i et resultat.

Jobbdelene som er hentet fra jobben blir deretter overført til kartet og reduserer oppgavene. Disse to oppgavene har programmer og algoritmer som er avhengige av brukerens krav. Inngangsdataene brukes og legges inn i kartoppgaven. Kartoppgave vil deretter generere det mellomliggende nøkkelverdiparet som vil fungere som en inngang for reduseringsfasen. I reduksjonsfasen, etter å ha utført reduksjonsprosessen, lagrer de endelige resultatene i HDFS. Nå beveger deg mot eksemplet på kartredusering, blir koden i eksemplet forklart med både fasene separat og deres utgang også.

Code of Python MapReduce

Hadoop Streaming API brukes til å passere data mellom kartet og redusere koden gjennom stdin og stout. For å lese inndata og skrive ut utdataene, “Sys.stdin ”brukes. Andre prosedyrer håndteres gjennom Hadoop Streaming selv.

Kartfase

Hovedbruken av kartfasen er å kartlegge inngangsdataene i form av nøklerpar. Nøkkelverdien vi brukte kan fungere som ID er en viss adresse, og verdien inneholder den faktiske verdien som holdes. Denne kartfasen vil generere en mellomverdi med nøkkelen som utgang. For å redusere funksjonen brukes utgangen på kartet som input. La oss vurdere koden for kartfunksjonen. Denne funksjonen er også kjent som Mapper.py.

Du bør opprette en fil og lagre koden i den filen. Jeg.E/Home/AQSA/Mapper.py. Kartskriptet er ikke i stand til å beregne en mellomverdi av totale ord som oppstår flere ganger. I stedet vil det gi de delene av dataene til og med ordene gjentar multipler ganger i inndataene. Vi vil la funksjonen redusere antall ord ved å beregne summen av deres forekomst. En ting som bør huskes, har filen utførelsestillatelse (CHMOD+X/HOME/AQSA/MAPPER.py). Når du beveger oss mot koden, vil det første trinnet være import av SYS -modulen. Inngangen vil bli tatt ved å bruke en for loop gjennom stdin.

For linje i sys.stdin:

Denne funksjonen vil deretter lese linje for linje, strippe alle linjene og fjerne hvitespasene mellom dem gjennom stripefunksjonen. Tilsvarende deles hver linje i ord ved å bruke en delt funksjon. Begge funksjonene er erklært inne i for sløyfekroppen.

# linje = linje.stripe ()
# ord = linje.split () #!/usr/bin/env python
"" "Mapper.py "" "
Importer Sys
# Inngang kommer fra STDIN (Standard Input)
for linje i sys.stdin:
# Fjern ledende og etterfølgende hvitrom
linje = linje.stripe ()
# Del linjen i ord
ord = linje.dele()
# Øke tellere
for ord med ord:
# Skriv resultatene til stdout (standardutgang);
# Tab-delimitert; Det trivielle ordtellingen er 1
Print ('%s \ t%s'%(Word, 1))

Etter at alle funksjonene er utført, vil hvert ord bli skrevet ut en etter en.

Mellomverdiene gjennomgår to prosesser før du går inn i reduksjonsfasen. Disse to stadiene er blanding og sorteringsfase.

Shuffling -fase:

Hensikten med denne funksjonen er å knytte alle verdiene til en lignende nøkkel. Tenk for eksempel på et ord (ja, 1) som har skjedd 4 ganger i utgangsfilen. Så etter denne fasen vil utgangen bli vist som (ja, [1,1,1,1]).

Sorteringsfase:

Når blandingsprosessen er fullført, sendes utgangsverdiene til sorteringsfasen. I denne fasen sorteres alle nøklene og verdiene automatisk. I Hadoop krever ikke sorteringsprosessen noen sorteringsalgoritme, ettersom det er en automatisk prosess. Det er på grunn av det innebygde grensesnittet som heter 'WritableComparableInterface'.

Reduser fasen

Mellomverdiene blir deretter overført til reduseringsfunksjonen etter at de er sortert. Reduseringsfunksjonsgruppen Dataene avhengig av nøkkelverdiparet i henhold til reduksjonsalgoritmen som er brukt av programmereren.

Koden som vi vil implementere lagres i en fil av banen “/Home/AQSA/Reducer.py ”. Denne filen vil lese resultatene fra “Mapper.py ”-filen fra stdin. For det formålet, formatet til “Mapper.py ”-filen og inndata kommer fra mapperen.PY skal være den samme. Etter det tar denne funksjonen summen av forekomsten av hvert ord, og den endelige utgangen vises gjennom stdout.

#!/usr/bin/env python
"" "Reducer.py "" "
Importer Sys
current_word = ingen
current_count = 0
ord = ingen
for linje i sys.stdin:
linje = linje.stripe ()
# Analyse innspillet vi fikk fra mapper.py
ord, count = line.split ('\ t', 1)
prøve:
Count = int (Count)
unntatt ValueError:
Fortsette
Hvis Current_Word == Word:
current_count += count
ellers:
Hvis Current_Word:
# Skriv resultat til stdout
print ('%s \ t%s'%(current_word, current_count))
Current_Count = Count
Current_Word = Word
Hvis Current_Word == Word:
print ('%s \ t%s'%(current_word, current_count))

SYS -modulen importeres først. Da blir en variabel for telleprosessen erklært 0 som startverdien. Vi har tatt inngangsverdiene som bruker for loop, og linjene er atskilt akkurat som kartfunksjonen. For å dele ordene, bruker vi både ordene og tellevariablene.

# Tell, ord = linje.split ('\ t', 1)

I prøveorganet tildeles grevvariabelen verdien. If-uttalelsen brukes til å sjekke om det kommende ordet er det samme som lagret; tellevariabelen økes.

# Current_count += telling

Resulterende verdi

For å sjekke resultatene, gå til Terminalen til Linux. Her vil vi bruke en streng som kombinerer enkelt- og repeterende ord for å få allsidige resultater.

$ ECHO “Kart og redusere er effektive og effektive funksjoner, dann et kart reduserer rammeverket” | /Hjem/AQSA/Mapper.py | Sorter -K1,1 | /Hjem/AQSA/Reducer.py

Konklusjon

'MapReduce Python Eksempel' består av den grunnleggende funksjonaliteten og arkitekturen til kartredusering samlet og separat. Mellomverdidannelsen spiller en viktig rolle i dette formålet. For å få den begrensede verdien, når du vil administrere Big Data, må du bruke en "MapReduce" -funksjon i programmet. Å lese denne artikkelen vil være en kilde til fullstendig informasjon om "MapReduce" -funksjonen.