Hadoop Streaming: Skrivning af et Hadoop MapReduce-program i Python



Dette blogindlæg på Hadoop Streaming er en trinvis vejledning til at lære at skrive et Hadoop MapReduce-program i Python til at behandle store mængder Big Data.

Mængden af ​​digitale data, der genereres hver dag, vokser eksponentielt med fremkomsten af ​​Digital Media, Internet of Things blandt andre udviklinger. Dette scenario har givet anledning til udfordringer med at skabe næste generations værktøjer og teknologier til at gemme og manipulere disse data. Det er her Hadoop Streaming kommer ind! Nedenfor er en graf, der viser væksten i data, der genereres årligt i verden fra 2013. IDC estimerer, at mængden af ​​data, der oprettes årligt, vil nå 180 Zettabyte i 2025!

data-by-2025-hadoop-streaming





Kilde: IDC

IBM oplyser, at der hver dag oprettes næsten 2,5 milliarder byte data, hvor 90 procent af verdens data er oprettet i de sidste to år! Det er en udfordrende opgave at gemme en så stor mængde data. Hadoop kan håndtere store mængder strukturerede og ustrukturerede data mere effektivt end det traditionelle enterprise Data Warehouse. Det gemmer disse enorme datasæt på tværs af distribuerede klynger af computere. Hadoop Streaming bruger MapReduce framework, som kan bruges til at skrive applikationer til at behandle enorme mængder data.



Da MapReduce-rammen er baseret på Java, undrer du dig måske over, hvordan en udvikler kan arbejde på det, hvis han / hun ikke har erfaring med Java. Nå, udviklere kan skrive mapper / Reducer-applikationer ved hjælp af deres foretrukne sprog og uden at have meget kendskab til Java ved hjælp af Hadoop-streaming snarere end at skifte til nye værktøjer eller teknologier som Pig and Hive.

Hvad er Hadoop Streaming?

Hadoop Streaming er et værktøj, der følger med Hadoop-distributionen. Det kan bruges til at udføre programmer til analyse af big data. Hadoop-streaming kan udføres ved hjælp af sprog som Python, Java, PHP, Scala, Perl, UNIX og mange flere. Hjælpeprogrammet giver os mulighed for at oprette og køre Map / Reduce-job med enhver eksekverbar eller script som kortlægger og / eller reducer. For eksempel:

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



-indtast myInputDirs

-output myOutputDir

passere værdi i java

-mappe / skraldespand / kat

-reducer / bin / wc

Parametre Beskrivelse:

Python MapReduce-kode:

mapper.py #! / usr / bin / python import sys #Word Count Eksempel # input kommer fra standardindgang STDIN for linje i sys.stdin: line = line.strip () # fjern ledende og efterfølgende mellemrum ord = line.split ( ) #del linjen i ord og vender tilbage som en liste for ord i ord: # skriv resultaterne til standardoutput STDOUT udskriv '% s% s'% (ord, 1) # Indsend ordet

reducer.py

#! / usr / bin / python importerer sys fra operatørimport itemgetter # ved hjælp af en ordbog til at kortlægge ord til deres antal. () word, count = line.split ('', 1) try: count = int (count) undtagen ValueError: fortsæt 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øb:

  1. Opret en fil med følgende indhold, og navngiv den word.txt.

Katmus løvehjorte Tigerløve Elefant løvehjorte

  1. Kopier mapper.py- og reducer.py-scripts til den samme mappe, hvor ovenstående fil findes.

  1. Åbn terminal, og find bibliotekets fil. Kommando: ls: for at liste alle filer i kataloget cd: for at ændre katalog / mappe

  1. Se indholdet af filen.
    Kommando: kat filnavn

> indholdet af mapper.py

kommando: cat mapper.py

> Indholdet af reducer.py

kommando: kat reducer.py

Vi kan køre mapper og reducer på lokale filer (f.eks. Word.txt). For at køre kortet og reducere på Hadoop Distributed File System (HDFS) har vi brug for Hadoop Streaming-krukke. Så før vi kører scripts på HDFS, lad os køre dem lokalt for at sikre, at de fungerer fint.

> Kør kortlæggeren

kommando: kat word.txt | python mapper.py

> Kør reducer.py

kommando: kat word.txt | python mapper.py | sorter -k1,1 | python reducer.py

Vi kan se, at kortlæggeren og reduceringssystemet fungerer som forventet, så vi står ikke over for yderligere problemer.

Kører Python-kode på Hadoop

Før vi kører MapReduce-opgaven på Hadoop, skal du kopiere lokale data (word.txt) til HDFS

> eksempel: hdfs dfs -indtast kilde_katalog hadoop_destination_directory

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

Kopier stien til jar-filen

Stien til Hadoop Streaming jar baseret på versionen af ​​krukken er:

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

Så find Hadoop Streaming-jar på din terminal, og kopier stien.

kommando:

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

Kør MapReduce-jobbet

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 -input / bruger / edureka / word-output / bruger / edureka / Wordcount

Hadoop giver en grundlæggende webgrænseflade til statistik og information. Når Hadoop-klyngen kører, skal du åbne http: // localhost: 50070 i browseren. Her er skærmbilledet af Hadoop-webgrænsefladen.

Gennemse nu filsystemet og find den genererede wordcount-fil for at se output. Nedenfor er skærmbilledet.

Vi kan se output på terminalen ved hjælp af denne kommando

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

Du har nu lært, hvordan man udfører et MapReduce-program skrevet i Python ved hjælp af Hadoop Streaming!

Edureka har et live og instruktørledet kursus om Big Data & Hadoop, der er co-oprettet af branchepraktikere.

Har du et spørgsmål til os? Nævn det i kommentarfeltet, så vender vi tilbage til dig.