Streaming Hadoop: Scrierea unui program Hadoop MapReduce în Python



Această postare de pe Hadoop Streaming este un ghid pas cu pas pentru a învăța să scrieți un program Hadoop MapReduce în Python pentru a procesa cantități mari de Big Data.

Cantitatea de date digitale generate în fiecare zi crește exponențial odată cu apariția Digital Media, Internet of Things, printre alte evoluții. Acest scenariu a dat naștere provocărilor în crearea de instrumente și tehnologii de nouă generație pentru stocarea și manipularea acestor date. Aici intervine Hadoop Streaming! Mai jos este prezentat un grafic care descrie creșterea datelor generate anual în lume din 2013. IDC estimează că cantitatea de date create anual va ajunge la 180 Zettabytes în 2025!

data-by-2025-hadoop-streaming





Sursa: IDC

IBM afirmă că, în fiecare zi, sunt create aproape 2,5 quintilioane de octeți de date, cu 90% din datele lumii create în ultimii doi ani! Este o sarcină dificilă stocarea unei cantități atât de mari de date. Hadoop poate gestiona volume mari de date structurate și nestructurate mai eficient decât întreprinderea tradițională Data Warehouse. Stochează aceste seturi enorme de date în clustere distribuite de computere. Hadoop Streaming utilizează cadrul MapReduce care poate fi utilizat pentru a scrie aplicații pentru a procesa cantități mari de date.



Deoarece framework-ul MapReduce se bazează pe Java, s-ar putea să vă întrebați cum poate lucra un dezvoltator dacă nu are experiență în Java. Ei bine, dezvoltatorii pot scrie aplicația Mapper / Reducer folosind limbajul preferat și fără a avea prea multe cunoștințe despre Java, folosind Streaming Hadoop mai degrabă decât să treacă la noi instrumente sau tehnologii precum Pig and Hive.

Ce este Hadoop Streaming?

Hadoop Streaming este un utilitar care vine odată cu distribuția Hadoop. Poate fi folosit pentru a executa programe pentru analiza datelor mari. Streaming-ul Hadoop poate fi realizat folosind limbaje precum Python, Java, PHP, Scala, Perl, UNIX și multe altele. Utilitarul ne permite să creăm și să rulăm Hărți / Reducere joburi cu orice executabil sau script ca maper și / sau reductor. De exemplu:

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



-input myInputDirs

-output myOutputDir

-folder / bin / cat

-reducer / bin / wc

Parametri Descriere:

Codul Python MapReduce:

mapper.py #! / usr / bin / python import sys # Exemplu de numărare cuvinte # intrare provine din intrarea standard STDIN pentru linia din sys.stdin: line = line.strip () #remove whitespaces whitespace = line.split ( ) # desparte linia în cuvinte și revine ca o listă pentru cuvânt în cuvinte: #scrie rezultatele la ieșirea standard STDOUT tipărește '% s% s'% (cuvânt, 1)

reducer.py

#! / usr / bin / python import sys din operator import itemgetter # folosind un dicționar pentru a asocia cuvintele la numărul lor current_word = None current_count = 0 word = None # input provine de la STDIN pentru linia din sys.stdin: line = line.strip () word, count = line.split ('', 1) try: count = int (count) cu excepția ValueError: continuați dacă 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)

Alerga:

  1. Creați un fișier cu următorul conținut și denumiți-l word.txt.

Pisică șoarecă leu căprioară Leu tigru Elefant căprioară leu

  1. Copiați scripturile mapper.py și reducer.py în același folder în care există fișierul de mai sus.

  1. Deschideți terminalul și localizați directorul fișierului Comandă: ls: pentru a lista toate fișierele din directorcd: pentru a schimba directorul / folderul

  1. Consultați conținutul fișierului.
    Comandă: cat nume de fișier

> conținutul mapper.py

comanda: cat mapper.py

> Conținutul reducer.py

comanda: cat reducer.py

aruncând dublu la int java

Putem rula maper și reductor pe fișiere locale (ex: word.txt). Pentru a rula harta și a reduce sistemul de fișiere distribuite Hadoop (HDFS), avem nevoie de Hadoop Streaming jar. Așadar, înainte de a rula scripturile pe HDFS, să le rulăm local pentru a ne asigura că funcționează bine.

> Rulați mapperul

comanda: cuvânt de pisică.txt | python mapper.py

> Rulați reducer.py

comanda: cuvânt de pisică.txt | python mapper.py | sortare -k1,1 | python reducer.py

conversie tip c ++

Putem vedea că cartograful și reductorul funcționează așa cum era de așteptat, astfel încât să nu ne mai confruntăm cu alte probleme.

Rularea Codul Python pe Hadoop

Înainte de a rula sarcina MapReduce pe Hadoop, copiați datele locale (word.txt) în HDFS

> exemplu: hdfs dfs -put source_directory hadoop_destination_directory

comanda: hdfs dfs -put /home/edureka/MapReduce/word.txt / user / edureka

Copiați calea fișierului jar

Calea jarului Hadoop Streaming bazat pe versiunea jarului este:

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

Așadar, localizați borcanul Hadoop Streaming pe terminal și copiați calea.

comanda:

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

Rulați jobul MapReduce

comanda:

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 oferă o interfață web de bază pentru statistici și informații. Când clusterul Hadoop rulează, deschideți http: // localhost: 50070 în browser. Iată captura de ecran a interfeței web Hadoop.

Acum răsfoiți sistemul de fișiere și localizați fișierul cu numărul de cuvinte generat pentru a vedea rezultatul. Mai jos este captura de ecran.

Putem vedea ieșirea pe terminal folosind această comandă

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

Acum ați învățat cum să executați un program MapReduce scris în Python folosind Hadoop Streaming!

Edureka are un curs live și condus de instructori despre Big Data & Hadoop, co-creat de practicieni din industrie.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom răspunde.