Hadoop Streaming: een Hadoop MapReduce-programma schrijven in Python



Deze blogpost over Hadoop Streaming is een stapsgewijze handleiding om te leren hoe je een Hadoop MapReduce-programma in Python kunt schrijven om gigantische hoeveelheden Big Data te verwerken.

De hoeveelheid digitale data die elke dag wordt gegenereerd, groeit exponentieel met de komst van onder meer Digital Media, Internet of Things. Dit scenario heeft geleid tot uitdagingen bij het creëren van tools en technologieën van de volgende generatie om deze gegevens op te slaan en te manipuleren. Dit is waar Hadoop Streaming om de hoek komt kijken! Hieronder ziet u een grafiek die de groei weergeeft van de gegevens die vanaf 2013 jaarlijks in de wereld worden gegenereerd. IDC schat dat de hoeveelheid gegevens die jaarlijks wordt gecreëerd in 2025 180 Zettabytes zal bedragen!

data-by-2025-hadoop-streaming





Bron: IDC

hoe java-programma te compileren

IBM stelt dat er elke dag bijna 2,5 quintillion bytes aan data wordt gecreëerd, waarvan 90 procent van de data in de wereld in de afgelopen twee jaar! Het is een uitdagende taak om zo'n enorme hoeveelheid gegevens op te slaan. Hadoop kan grote hoeveelheden gestructureerde en ongestructureerde gegevens efficiënter verwerken dan het traditionele enterprise datawarehouse. Het slaat deze enorme gegevenssets op over gedistribueerde clusters van computers. Hadoop Streaming gebruikt het MapReduce-framework dat kan worden gebruikt om applicaties te schrijven om enorme hoeveelheden gegevens te verwerken.



Omdat het MapReduce-framework op Java is gebaseerd, vraagt ​​u zich misschien af ​​hoe een ontwikkelaar eraan kan werken als hij / zij geen ervaring heeft met Java. Welnu, ontwikkelaars kunnen een mapper / Reducer-applicatie schrijven in hun voorkeurstaal en zonder veel kennis van Java te hebben, met behulp van Hadoop-streaming in plaats van over te schakelen naar nieuwe tools of technologieën zoals Pig en Hive.

Wat is Hadoop-streaming?

Hadoop Streaming is een hulpprogramma dat bij de Hadoop-distributie wordt geleverd. Het kan worden gebruikt om programma's uit te voeren voor analyse van big data. Hadoop-streaming kan worden uitgevoerd met talen als Python, Java, PHP, Scala, Perl, UNIX en nog veel meer. Het hulpprogramma stelt ons in staat om Map / Reduce-taken te maken en uit te voeren met elk uitvoerbaar bestand of script als de mapper en / of het reducer. Bijvoorbeeld:

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



-input myInputDirs

-output myOutputDir

-map / bin / cat

-reducer / bak / wc

Parameters Beschrijving:

Python MapReduce-code:

mapper.py #! / usr / bin / python import sys #Woordtelling Voorbeeld # invoer komt van standaard invoer STDIN voor regel in sys.stdin: line = line.strip () #remove voorloop- en volgspaties woorden = line.split ( ) #splits de regel in woorden en retourneert als een lijst voor woord in woorden: #schrijf de resultaten naar standaarduitvoer STDOUT print '% s% s'% (woord, 1) #Voer het woord uit

reducer.py

#! / usr / bin / python import sys van operator import itemgetter # met behulp van een woordenboek om woorden toe te wijzen aan hun tellingen current_word = None current_count = 0 word = None # invoer komt van STDIN voor regel in sys.stdin: line = line.strip () word, count = line.split ('', 1) probeer: count = int (count) behalve ValueError: ga verder als current_word == word: current_count + = tel anders: if current_word: print '% s% s'% (current_word, current_count) current_count = tel current_word = woord if current_word == word: print '% s% s'% (current_word, current_count)

Rennen:

  1. Maak een bestand met de volgende inhoud en noem het word.txt.

Kat muis leeuw hert Tijger leeuw Olifant leeuw hert

  1. Kopieer de scripts mapper.py en reducer.py naar dezelfde map als het bovenstaande bestand.

  1. Open de terminal en zoek de directory van het bestand. Opdracht: ls: om alle bestanden in de directory weer te geven. Cd: om de directory / map te wijzigen

  1. Zie de inhoud van het bestand.
    Bevel: cat bestandsnaam

> inhoud van mapper.py

commando: cat mapper.py

> Inhoud van reducer.py

commando: cat reducer.py

We kunnen mapper en reducer uitvoeren op lokale bestanden (bijv: word.txt). Om de kaart uit te voeren en te verkleinen op het Hadoop Distributed File System (HDFS), hebben we het Hadoop Streaming-pot. Dus voordat we de scripts op HDFS uitvoeren, laten we ze lokaal uitvoeren om er zeker van te zijn dat ze goed werken.

> Voer de mapper uit

opdracht: kat word.txt | python mapper.py

> Voer reducer.py uit

opdracht: kat word.txt | python mapper.py | sorteren -k1,1 | python reducer.py

We kunnen zien dat de mapper en reducer werken zoals verwacht, dus we zullen geen verdere problemen ondervinden.

Het uitvoeren van het Python-code op Hadoop

Voordat we de MapReduce-taak op Hadoop uitvoeren, kopieert u lokale gegevens (word.txt) naar HDFS

> voorbeeld: hdfs dfs -put source_directory hadoop_destination_directory

opdracht: hdfs dfs -put /home/edureka/MapReduce/word.txt / gebruiker / edureka

Kopieer het pad van het jar-bestand

Het pad van Hadoop Streaming-jar op basis van de versie van de jar is:

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

Zoek dus de Hadoop Streaming-jar op uw terminal en kopieer het pad.

opdracht:

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

Voer de MapReduce-taak uit

opdracht:

hadoop jar /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -file /home/edureka/mapper.py -mapper mapper.py -file / home / edureka / reducer.py -reducer reducer.py -input / user / edureka / word -output / user / edureka / Wordcount

Hadoop biedt een eenvoudige webinterface voor statistieken en informatie. Wanneer het Hadoop-cluster wordt uitgevoerd, opent u http: // localhost: 50070 in de browser. Hier is de schermafbeelding van de Hadoop-webinterface.

Blader nu door het bestandssysteem en zoek het gegenereerde wordcount-bestand om de uitvoer te zien. Hieronder ziet u de screenshot.

Met deze opdracht kunnen we de uitvoer op de terminal zien

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

Je hebt nu geleerd hoe je een MapReduce-programma geschreven in Python uitvoert met Hadoop Streaming!

Edureka heeft een live en door een instructeur geleide cursus over Big Data & Hadoop, mede ontwikkeld door praktijkmensen uit de sector.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte en we nemen contact met u op.