Hadoop Streaming: Skrive et Hadoop MapReduce-program i Python



Dette blogginnlegget på Hadoop Streaming er en trinnvis guide for å lære å skrive et Hadoop MapReduce-program i Python for å behandle store mengder Big Data.

Mengden digitale data som genereres hver dag, vokser eksponentielt med fremveksten av Digital Media, Internet of Things, blant andre utviklinger. Dette scenariet har gitt utfordringer i å lage neste generasjons verktøy og teknologier for å lagre og manipulere disse dataene. Dette er hvor Hadoop Streaming kommer inn! Nedenfor er en graf som viser veksten av data generert årlig i verden fra 2013. IDC anslår at datamengden som opprettes årlig vil nå 180 Zettabyte i 2025!

data-by-2025-hadoop-streaming





Kilde: IDC

IBM oppgir at hver dag opprettes nesten 2,5 milliarder byte data, med 90 prosent av verdens data opprettet de siste to årene! Det er en utfordrende oppgave å lagre en så omfattende mengde data. Hadoop kan håndtere store mengder strukturerte og ustrukturerte data mer effektivt enn det tradisjonelle enterprise Data Warehouse. Den lagrer disse enorme datasettene over distribuerte klynger av datamaskiner. Hadoop Streaming bruker MapReduce-rammeverk som kan brukes til å skrive applikasjoner for å behandle enorme datamengder.



Siden MapReduce-rammeverket er basert på Java, lurer du kanskje på hvordan en utvikler kan jobbe med det hvis han / hun ikke har erfaring med Java. Vel, utviklere kan skrive kartlegger / reduksjonsapplikasjon ved hjelp av deres foretrukne språk og uten å ha mye kunnskap om Java Hadoop Streaming i stedet for å bytte til nye verktøy eller teknologier som Pig and Hive.

Hva er Hadoop Streaming?

Hadoop Streaming er et verktøy som følger med Hadoop-distribusjonen. Den kan brukes til å utføre programmer for stor dataanalyse. Hadoop-streaming kan utføres ved hjelp av språk som Python, Java, PHP, Scala, Perl, UNIX og mange flere. Verktøyet lar oss opprette og kjøre Map / Reduce-jobber med hvilken som helst kjørbar eller skript som kartlegger og / eller redusering. For eksempel:

$ HADOOP_HOME / bin / hadoop jar $ HADOOP_HOME / hadoop-streaming.jar



salgsutviklerveiledning for nybegynnere

-inntast myInputDirs

-output myOutputDir

-mapper /bin/cat

-reduksjon / søppel / wc

Parameter Beskrivelse:

Python MapReduce-kode:

mapper.py #! / usr / bin / python import sys #Word Count Eksempel # input kommer fra standardinngang STDIN for linje i sys.stdin: line = line.strip () # fjern ledende og etterfølgende mellomrom ord = line.split ( ) #splitt linjen i ord og returnerer som en liste for ord i ord: # skriv resultatene til standard utgang STDOUT skriv ut '% s% s'% (ord, 1) #Send ordet

redusering.py

#! / usr / bin / python import sys fra operatørimport itemgetter # ved hjelp av en ordbok for å kartlegge ord til deres tellinger () word, count = line.split ('', 1) try: count = int (count) unntatt ValueError: fortsett hvis current_word == word: current_count + = count else: if current_word: print '% s% s'% (current_word, current_count) current_count = count current_word = word if current_word == word: print '% s% s'% (current_word, current_count)

Løpe:

  1. Opprett en fil med følgende innhold og gi den navnet word.txt.

Kattemus løve rådyr Tiger løve Elefant løve hjort

  1. Kopier mapper.py- og reducer.py-skriptene til samme mappe der filen ovenfor finnes.

  1. Åpne terminalen og finn katalogen til filen. Kommando: ls: for å liste alle filene i katalogen cd: for å endre katalog / mappe

  1. Se innholdet i filen.
    Kommando: katt filnavn

> innhold av mapper.py

kommando: cat mapper.py

> Innhold av reducer.py

kommando: katt redusering.py

Vi kan kjøre kartlegger og reduksjonsmiddel på lokale filer (f.eks: word.txt). For å kjøre kartet og redusere Hadoop Distributed File System (HDFS), trenger vi Hadoop Streaming-krukke. Så før vi kjører skriptene på HDFS, la oss kjøre dem lokalt for å sikre at de fungerer bra.

> Kjør kartleggeren

kommando: kattord.txt | python mapper.py

> Kjør reducer.py

kommando: kattord.txt | python mapper.py | sorter -k1,1 | python redusering.py

Vi kan se at kartleggeren og reduksjonsenheten fungerer som forventet, så vi vil ikke møte ytterligere problemer.

Kjører Python-kode på Hadoop

Før vi kjører MapReduce-oppgaven på Hadoop, kopier du lokale data (word.txt) til HDFS

> eksempel: hdfs dfs -put source_directory hadoop_destination_directory

hvordan du bruker tostring i java

kommando: hdfs dfs -put /home/edureka/MapReduce/word.txt / bruker / edureka

Kopier banen til jar-filen

Banen til Hadoop Streaming jar basert på versjonen av krukken er:

løft noe til en makt i java

/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar

Så finn Hadoop Streaming-glasset på terminalen og kopier banen.

kommando:

ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

Kjør MapReduce-jobben

kommando:

hadoop jar /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -fil /home/edureka/mapper.py -mapper mapper.py -fil / hjem / edureka / reducer.py -reducer reducer.py -inngang / bruker / edureka / word-output / bruker / edureka / Wordcount

Hadoop gir et grunnleggende nettgrensesnitt for statistikk og informasjon. Når Hadoop-klyngen kjører, åpner du http: // localhost: 50070 i nettleseren. Her er skjermbildet av Hadoop-nettgrensesnittet.

Bla gjennom filsystemet og finn den genererte wordcount-filen for å se utdataene. Nedenfor er skjermbildet.

Vi kan se utgangen på terminalen ved hjelp av denne kommandoen

kommando: hadoop fs -cat / user / edureka / Wordcount / part-00000

Du har nå lært å utføre et MapReduce-program skrevet i Python ved hjelp av Hadoop Streaming!

Edureka har et live og instruktørledet kurs om Big Data & Hadoop, co-laget av industriutøvere.

Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet, så kommer vi tilbake til deg.