Hadoop Streaming: Skriva ett Hadoop MapReduce-program i Python



Det här blogginlägget på Hadoop Streaming är en steg-för-steg-guide för att lära dig att skriva ett Hadoop MapReduce-program i Python för att bearbeta enorma mängder Big Data.

Mängden digital data som genereras varje dag växer exponentiellt med tillkomsten av Digital Media, Internet of Things bland andra utvecklingar. Detta scenario har gett upphov till utmaningar när det gäller att skapa nästa generations verktyg och tekniker för att lagra och manipulera dessa data. Det är här Hadoop Streaming kommer in! Nedan följer en graf som visar tillväxten av data som genereras årligen i världen från 2013. IDC uppskattar att mängden data som skapas årligen kommer att nå 180 Zettabyte år 2025!

data-by-2025-hadoop-streaming





Källa: IDC

IBM säger att varje dag skapas nästan 2,5 miljoner byte data, med 90 procent av världens data som skapats under de senaste två åren! Det är en utmanande uppgift att lagra en så stor mängd data. Hadoop kan hantera stora volymer strukturerad och ostrukturerad data mer effektivt än det traditionella företagets datalager. Den lagrar dessa enorma datamängder över distribuerade kluster av datorer. Hadoop Streaming använder MapReduce-ramverk som kan användas för att skriva applikationer för att bearbeta enorma mängder data.



Eftersom MapReduce-ramverket är baserat på Java kanske du undrar hur en utvecklare kan arbeta med det om han / hon inte har erfarenhet av Java. Tja, utvecklare kan skriva mapper / Reducer-applikationer med deras föredragna språk och utan att ha mycket kunskap om Java, med Hadoop Streaming snarare än att byta till nya verktyg eller tekniker som Pig and Hive.

Vad är Hadoop Streaming?

Hadoop Streaming är ett verktyg som levereras med Hadoop-distributionen. Den kan användas för att köra program för stora dataanalyser. Hadoop-streaming kan utföras med språk som Python, Java, PHP, Scala, Perl, UNIX och många fler. Verktyget låter oss skapa och köra Map / Reduce-jobb med alla körbara eller skript som mappare och / eller reducerare. Till exempel:

nyckelordsdriven ram i selen

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



-input myInputDirs

-output myOutputDir

-mapp / papperskorg / katt

-reducer / bin / wc

Parametrar Beskrivning:

Python MapReduce-kod:

mapper.py #! / usr / bin / python import sys # Word Count Exempel # input kommer från standardinmatning STDIN för rad i sys.stdin: line = line.strip () # ta bort ledande och efterföljande blanksteg ord = line.split ( ) #splitt raden i ord och återgår som en lista för ord i ord: # skriv resultaten till standardutgång STDOUT skriv ut '% s% s'% (ord, 1) #Skicka ordet

reducer.py

#! / usr / bin / python importerar sys från operatörens importobjekt # med hjälp av en ordlista för att mappa ord till deras räkningar. () word, count = line.split ('', 1) try: count = int (count) utom ValueError: fortsätt om 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)

Springa:

  1. Skapa en fil med följande innehåll och ge den namnet word.txt.

Kattmus lejon rådjur Tiger lejon elefant lejon rådjur

  1. Kopiera mapper.py- och reducer.py-skript till samma mapp där ovanstående fil finns.

  1. Öppna terminalen och leta upp katalogen för filen. Kommando: ls: för att lista alla filer i katalogen cd: för att ändra katalog / mapp

  1. Se innehållet i filen.
    Kommando: katt filnamn

> innehåll i mapper.py

kommando: cat mapper.py

> Innehåll i reducer.py

kommando: katt reducer.py

Vi kan köra mapper och reducerare på lokala filer (ex: word.txt). För att kunna köra kartan och minska på Hadoop Distributed File System (HDFS) behöver vi Hadoop Streaming-burk. Så innan vi kör skript på HDFS, låt oss köra dem lokalt för att säkerställa att de fungerar bra.

> Kör kartläggaren

kommando: katt word.txt | python mapper.py

> Kör reducer.py

kommando: katt word.txt | python mapper.py | sortera -k1,1 | python reducer.py

Vi kan se att kartläggaren och reduceraren fungerar som förväntat så vi kommer inte att möta några ytterligare problem.

Kör Python-kod på Hadoop

Innan vi kör MapReduce-uppgiften på Hadoop, kopiera lokal data (word.txt) till HDFS

> exempel: hdfs dfs -inmata källkatalog hadoop_destination_directory

kommando: hdfs dfs -put /home/edureka/MapReduce/word.txt / användare / edureka

Kopiera sökvägen till jar-filen

Banan för Hadoop Streaming-burk baserad på versionen av burken är:

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

Så leta upp Hadoop Streaming-burken på din terminal och kopiera sökvägen.

ställa in klassbana i Linux

kommando:

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

Kör jobbet MapReduce

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 / hem / edureka / reducer.py -reducer reducer.py -input / user / edureka / word -output / user / edureka / Wordcount

Hadoop tillhandahåller ett grundläggande webbgränssnitt för statistik och information. När Hadoop-klustret körs öppnar du http: // localhost: 50070 i webbläsaren. Här är skärmdumpen av Hadoop-webbgränssnittet.

Bläddra nu i filsystemet och leta reda på den genererade wordcount-filen för att se utdata. Nedan är skärmdumpen.

Vi kan se utdata på terminalen med detta kommando

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

Du har nu lärt dig hur du kör ett MapReduce-program skrivet i Python med Hadoop Streaming!

Edureka har en levande och instruktörsledd kurs om Big Data & Hadoop, skapad av branschutövare.

Har du en fråga till oss? Vänligen nämna det i kommentarfältet så återkommer vi till dig.