Hadoop Streaming: Pagsulat ng Isang Hadoop MapReduce Program Sa Python



Ang post sa blog na ito sa Hadoop Streaming ay isang sunud-sunod na gabay upang malaman na sumulat ng isang programa ng Hadoop MapReduce sa Python upang maproseso ang mga nakakatawang halaga ng Big Data.

Ang dami ng digital na data na nabuo araw-araw ay lumalaki nang mabilis sa pagkakaroon ng Digital Media, Internet of Things bukod sa iba pang mga pagpapaunlad. Ang senaryong ito ay nagbigay ng mga hamon sa paglikha ng mga susunod na henerasyon na tool at teknolohiya upang maiimbak at manipulahin ang data na ito. Dito pumapasok ang Hadoop Streaming! Ibinigay sa ibaba ay isang grap na naglalarawan sa paglago ng data na taunang nabuo sa buong mundo mula noong 2013. Tinantya ng IDC na ang dami ng data na nilikha taun-taon ay aabot sa 180 Zettabytes sa 2025!

data-by-2025-hadoop-streaming





Pinagmulan: IDC

Sinasabi ng IBM na, araw-araw, halos 2.5 quintillion bytes ng data ang nilikha, na may 90 porsyento ng data sa mundo na nilikha sa huling dalawang taon! Isang hamon na gawain ang mag-imbak ng napakalawak na dami ng data. Maaaring hawakan ng Hadoop ang malalaking dami ng nakabalangkas at hindi istrakturang data nang mas mahusay kaysa sa tradisyunal na Data Warehouse. Iniimbak nito ang mga napakalaking hanay ng data sa ibinahagi na mga kumpol ng mga computer. Gumagamit ang Hadoop Streaming ng balangkas ng MapReduce na maaaring magamit upang magsulat ng mga application upang maproseso ang mga nakakatawang halaga ng data.



Dahil ang balangkas ng MapReduce ay batay sa Java, maaaring nagtataka ka kung paano gagana ang isang developer kung wala siyang karanasan sa Java. Kaya, ang mga developer ay maaaring sumulat ng application ng mapper / Reducer gamit ang kanilang ginustong wika at nang walang pagkakaroon ng maraming kaalaman sa Java, gamit Hadoop Streaming sa halip na lumipat sa mga bagong tool o teknolohiya tulad ng Pig at Hive.

Ano ang Hadoop Streaming?

Ang Hadoop Streaming ay isang utility na kasama ng pamamahagi ng Hadoop. Maaari itong magamit upang magpatupad ng mga programa para sa malaking pagtatasa ng data. Maaaring gawin ang streaming ng Hadoop gamit ang mga wika tulad ng Python, Java, PHP, Scala, Perl, UNIX, at marami pa. Pinapayagan kami ng utility na lumikha at magpatakbo ng mga trabaho sa Mapa / Bawasan ang anumang mga maipapatupad o script bilang mapper at / o reducer. Halimbawa:

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



-input ang akingInputDirs

-output myOutputDir

-fold / basura / pusa

-reducer / baseng / wc

Paglalarawan ng Parameter:

Python MapReduce Code:

mapper.py #! / usr / bin / python import sys #Word Count Halimbawa # input ay nagmula sa karaniwang input STDIN para sa linya sa sys.stdin: line = line.strip () #katanggal sa mga nangunguna at sumunod na mga puti na salita = line.split ( ) #split ang linya sa mga salita at bumalik bilang isang listahan para sa salita sa mga salita: #sulat ang mga resulta sa karaniwang output STDOUT i-print '% s% s'% (salita, 1) #Emit the word

reducer.py

#! / usr / bin / python import sys mula sa import ng itemgetter ng # gamit ang isang diksyunaryo upang mapa ang mga salita sa kanilang bilang na kasalukuyang_word = Wala sa kasalukuyang_count = 0 salita = Wala # na nagmula sa STDIN para sa linya sa sys.stdin: line = line.strip () salita, bilang = linya.split (', 1) subukan: count = int (count) maliban sa ValueError: magpatuloy kung kasalukuyang_word == salita: kasalukuyang_count + = bilangin pa: kung kasalukuyang_word: i-print '% s% s'% (current_word, current_count) current_count = count current_word = word if current_word == word: print '% s% s'% (current_word, current_count)

Patakbuhin:

  1. Lumikha ng isang file na may sumusunod na nilalaman at pangalanan itong word.txt.

Cat mouse lion leer Tiger lion Elephant lion usa

  1. Kopyahin ang mga script ng mapper.py at reducer.py sa parehong folder kung saan umiiral ang file sa itaas.

  1. Buksan ang terminal at hanapin ang direktoryo ng file. Command: ls: upang ilista ang lahat ng mga file sa direktoryo: upang baguhin ang direktoryo / folder

  1. Tingnan ang nilalaman ng file.
    Utos: pusa file_name

> nilalaman ng mapper.py

utos: cat mapper.py

> Nilalaman ng reducer.py

utos: pusa reducer.py

Maaari naming patakbuhin ang mapper at reducer sa mga lokal na file (hal: word.txt). Upang mapatakbo ang Mapa at mabawasan ang Hadoop Distraced File System (HDFS), kailangan namin ang Hadoop Streaming jar. Kaya bago natin patakbuhin ang mga script sa HDFS, patakbuhin natin ang mga ito nang lokal upang matiyak na gumagana ang mga ito.

> Patakbuhin ang mapper

utos: salita ng pusa.txt | python mapper.py

> Patakbuhin ang reducer.py

utos: salita ng pusa.txt | python mapper.py | pag-uuri -k1,1 | python reducer.py

Maaari naming makita na ang mapper at reducer ay gumagana tulad ng inaasahan kaya hindi na kami makakaharap sa anumang karagdagang mga isyu.

Pagpapatakbo ng Python Code sa Hadoop

Bago namin patakbuhin ang gawain ng MapReduce sa Hadoop, kopyahin ang lokal na data (word.txt) sa HDFS

> halimbawa: hdfs dfs -put source_directory hadoop_destination_directory

utos: hdfs dfs -put /home/edureka/MapReduce/word.txt / gumagamit / edureka

Kopyahin ang path ng file ng garapon

pagkakaiba sa pagitan ng pagkahagis at pagkahagis

Ang landas ng Hadoop Streaming jar batay sa bersyon ng garapon ay:

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

Kaya hanapin ang Hadoop Streaming jar sa iyong terminal at kopyahin ang landas.

utos:

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

Patakbuhin ang trabaho sa MapReduce

utos:

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 / salitang -output / user / edureka / Wordcount

Nagbibigay ang Hadoop ng isang pangunahing web interface para sa mga istatistika at impormasyon. Kapag ang Hadoop cluster ay tumatakbo bukas http: // localhost: 50070 sa browser. Narito ang screenshot ng Hadoop web interface.

Ngayon i-browse ang filesystem at hanapin ang wordcount file na nabuo upang makita ang output. Nasa ibaba ang screenshot.

Maaari naming makita ang output sa terminal gamit ang utos na ito

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

Nalaman mo na ngayon kung paano magpatupad ng isang programa ng MapReduce na nakasulat sa Python gamit ang Hadoop Streaming!

Ang Edureka ay mayroong live at pinangungunahan ng kurso sa Big Data & Hadoop, na nilikha ng mga nagsasanay ng industriya.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento at babalikan ka namin.