Streamování Hadoop: Psaní programu Hadoop MapReduce v Pythonu



Tento příspěvek na blogu o streamování Hadoop je podrobným průvodcem, jak se naučit psát program Hadoop MapReduce v Pythonu pro zpracování obrovského množství velkých dat.

Množství digitálních dat generovaných každý den exponenciálně roste s příchodem digitálních médií, internetu věcí mezi další vývoj. Tento scénář dal vzniknout výzvám při vytváření nástrojů a technologií nové generace pro ukládání a manipulaci s těmito daty. To je místo, kde přichází Hadoop Streaming! Níže je uveden graf, který zachycuje růst ročně generovaných dat ve světě od roku 2013. IDC odhaduje, že množství ročně vytvářených dat dosáhne v roce 2025 180 Zettabytů!

data-by-2025-hadoop-streaming





Zdroj: IDC

IBM uvádí, že každý den se vytvoří téměř 2,5 kvintilionu bajtů dat, přičemž 90 procent světových dat se vytvořilo za poslední dva roky! Je to náročný úkol ukládat takové obrovské množství dat. Hadoop dokáže zpracovat velké objemy strukturovaných a nestrukturovaných dat efektivněji než tradiční podnikový datový sklad. Ukládá tyto obrovské datové sady napříč distribuovanými klastry počítačů. Streamování Hadoop využívá rámec MapReduce, který lze použít k psaní aplikací pro zpracování obrovského množství dat.



Vzhledem k tomu, že rámec MapReduce je založen na Javě, možná vás zajímá, jak na ní může vývojář pracovat, pokud nemá zkušenosti s Javou. Vývojáři mohou psát aplikace mapovač / reduktor pomocí svého preferovaného jazyka a bez znalosti jazyka Java pomocí Streamování Hadoop místo přechodu na nové nástroje nebo technologie, jako je Pig and Hive.

Co je Hadoop Streaming?

Hadoop Streaming je nástroj dodávaný s distribucí Hadoop. Lze jej použít k provádění programů pro analýzu velkých dat. Streamování Hadoop lze provádět pomocí jazyků jako Python, Java, PHP, Scala, Perl, UNIX a mnoho dalších. Nástroj nám umožňuje vytvářet a spouštět úlohy Map / Reduce s libovolným spustitelným programem nebo skriptem jako mapovač a / nebo reduktor. Například:

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



-input myInputDirs

-výstup myOutputDir

-složka / koš / kat

-redukce / zásobník / wc

Popis parametrů:

Kód Python MapReduce:

mapper.py #! / usr / bin / python import sys #Word Count Příklad # vstup pochází ze standardního vstupu STDIN pro řádek v sys.stdin: line = line.strip () #remove a trailing whitespaces words = line.split ( ) # rozdělit řádek na slova a vrátit se jako seznam slov ve slovech: # zapsat výsledky na standardní výstup STDOUT print '% s% s'% (word, 1) #Emit the word

reducer.py

#! / usr / bin / python import sys z operátoru import itemgetter # pomocí slovníku k mapování slov na jejich počty current_word = žádný current_count = 0 word = žádný # vstup pochází z STDIN pro řádek v sys.stdin: line = line.strip () word, count = line.split ('', 1) try: count = int (count) except ValueError: continue if 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)

najít největší prvek v poli java

Běh:

  1. Vytvořte soubor s následujícím obsahem a pojmenujte ho word.txt.

Kočičí myš lev jelen Tygr lev Slon lev jelen

  1. Zkopírujte skripty mapper.py a reducer.py do stejné složky, kde existuje výše uvedený soubor.

  1. Otevřete terminál a vyhledejte adresář souboru. Příkaz: ls: seznam všech souborů v adresáři cd: změna adresáře / složky

  1. Podívejte se na obsah souboru.
    Příkaz: kat název souboru

> obsah mapper.py

příkaz: cat mapper.py

> Obsah reducer.py

příkaz: kat reducer.py

Můžeme spustit mapovač a redukci na místní soubory (např. Word.txt). Abychom mohli spustit Mapu a redukovat ji na Hadoop Distributed File System (HDFS), potřebujeme Streamovací nádoba Hadoop. Než tedy spustíme skripty na HDFS, spustíme je lokálně, abychom se ujistili, že fungují dobře.

> Spusťte mapovač

příkaz: kočičí word.txt | python mapper.py

> Spustit reducer.py

příkaz: kočičí word.txt | python mapper.py | třídit -k1,1 | python reducer.py

Vidíme, že mapovač a redukce fungují podle očekávání, takže již nebudeme čelit dalším problémům.

Spuštění Pythonský kód na Hadoopu

vysvětlete rozdíl mezi proměnlivými a neměnnými objekty.

Před spuštěním úlohy MapReduce na Hadoopu zkopírujte místní data (word.txt) do HDFS

> příklad: hdfs dfs -put zdrojový_adresář hadoop_destination_directory

příkaz: hdfs dfs -put /home/edureka/MapReduce/word.txt / uživatel / edureka

Zkopírujte cestu souboru jar

Cesta nádoby Hadoop Streaming založená na verzi nádoby je:

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

Vyhledejte tedy na terminálu nádobu Hadoop Streaming a cestu zkopírujte.

příkaz:

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

Spusťte úlohu MapReduce

příkaz:

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

rozdíl mezi přetížením a přepsáním v jazyce C ++

Hadoop poskytuje základní webové rozhraní pro statistiky a informace. Když běží cluster Hadoop, otevřete v prohlížeči http: // localhost: 50070. Zde je snímek obrazovky webového rozhraní Hadoop.

Nyní procházejte souborový systém a vyhledejte vygenerovaný soubor wordcount, abyste viděli výstup. Níže je snímek obrazovky.

Pomocí tohoto příkazu můžeme vidět výstup na terminálu

příkaz: hadoop fs -cat / user / edureka / Wordcount / part-00000

Nyní jste se naučili, jak spustit program MapReduce napsaný v Pythonu pomocí Hadoop Streaming!

Edureka má živý a instruktorský kurz Big Data & Hadoop, který společně vytvořili odborníci z oboru.

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme.