V tomto blogu vám ukážu, jak spustit program MapReduce. MapReduce je jednou ze základních částí Apache Hadoop, je to zpracovatelská vrstva Apache Hadoop. Než vám tedy ukážu, jak spustit program MapReduce, dovolte mi stručně vysvětlit MapReduce.
MapReduce je systém pro paralelní zpracování velkých datových souborů. MapReduce redukuje data na výsledky a vytváří souhrn dat. Program mapreduce má dvě části – mapovač a redukci. Poté, co mapper dokončí svou práci, spustí se pouze redukce.
Mapovač: Mapuje vstupní páry klíč/hodnota na sadu mezilehlých párů klíč/hodnota.
Redukce: Redukuje sadu mezilehlých hodnot, které sdílejí klíč, na menší sadu hodnot.
V podstatě v programu wordcount mapreduce poskytujeme vstupní soubor(y) - libovolný textový soubor, jako vstup. Když se program mapreduce spustí, níže jsou procesy, kterými prochází:
Rozdělení: Rozdělí každý řádek ve vstupním souboru na slova.
Mapování: Tvoří pár klíč-hodnota, kde slovo je klíč a 1 je hodnota přiřazená každému klíči.
Náhodné přehrávání: Společné páry klíč-hodnota se seskupí.
Snížení: Hodnoty podobných klíčů se sečtou.
Spuštění programu MapReduce
Program MapReduce je napsán v Javě. A většinou vývojáři používají k programování Eclipse IDE. V tomto blogu vám tedy ukážu, jak exportovat program mapreduce do jar souboru z Eclipse IDE a spustit jej na clusteru Hadoop.
Můj program MapReduce je v mém Eclipse IDE.
Nyní, abychom spustili tento program MapReduce na hadoop clusteru, exportujeme projekt jako soubor jar. Vyberte možnost Soubor v eclipse ide a klikněte na Exportovat. V možnosti Java vyberte soubor Jar a klikněte na Další.
Vyberte projekt Wordcount a zadejte cestu a název souboru jar, ponechám si jej wordcount.jar, dvakrát klikněte na Další.
Nyní klikněte na Procházet a vyberte hlavní třídu a nakonec klikněte na Dokončit, abyste vytvořili soubor jar. V případě, že se zobrazí varování, jak je uvedeno níže, klikněte na OK.
Zkontrolujte, zda je váš cluster Hadoop aktivní nebo ne.
Příkaz: jps
hadoop@hadoop-VirtualBox:~$ jps
3008 NodeManager
3924 Jps
2885 ResourceManager
2505 DataNode
3082 JobHistoryServer
2716 SecondaryNameNode
2383 NameNode
hadoop@hadoop-VirtualBox:~$
Máme náš vstupní soubor na HDFS pro program počítání slov.
hadoop@hadoop-VirtualBox:~$ hdfs dfs -put input /
hadoop@hadoop-VirtualBox:~$ hdfs dfs -cat /input
This is my first mapreduce test
This is wordcount program
hadoop@hadoop-VirtualBox:~$
Nyní spusťte soubor wordcount.jar pomocí níže uvedeného příkazu.
Poznámka: Protože jsme vybrali hlavní třídu při exportu wordcount.jar , není třeba hlavní třídu v příkazu zmiňovat.
Příkaz: hadoop jar wordcount.jar /input /output
hadoop@hadoop-VirtualBox:~$ hadoop jar wordcount.jar /input /output
16/11/27 22:52:20 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:
8032
16/11/27 22:52:22 WARN mapreduce.JobResourceUploader: Hadoop command-line option
parsing not performed. Implement the Tool interface and execute your application
with ToolRunner to remedy this.
16/11/27 22:52:27 INFO input.FileInputFormat: Total input paths to process : 1
16/11/27 22:52:28 INFO mapreduce.JobSubmitter: number of splits:1
16/11/27 22:52:29 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_14802
67251741_0001
16/11/27 22:52:32 INFO impl.YarnClientImpl: Submitted application application_14802
67251741_0001
16/11/27 22:52:33 INFO mapreduce.Job: The url to track the job: http://hadoop-Virtu
alBox:8088/proxy/application_1480267251741_0001/
16/11/27 22:52:33 INFO mapreduce.Job: Running job: job_1480267251741_0001
16/11/27 22:53:20 INFO mapreduce.Job: Job job_1480267251741_0001 running in uber mo
de : false
16/11/27 22:53:20 INFO mapreduce.Job: map 0% reduce 0%
16/11/27 22:53:45 INFO mapreduce.Job: map 100% reduce 0%
16/11/27 22:54:13 INFO mapreduce.Job: map 100% reduce 100%
16/11/27 22:54:15 INFO mapreduce.Job: Job job_1480267251741_0001 completed
successfully
16/11/27 22:54:16 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=124
FILE: Number of bytes written=237911
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=150
HDFS: Number of bytes written=66
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Data-local map tasks=1
Total time spent by all maps in occupied slots (ms)=21062
Total time spent by all reduces in occupied slots (ms)=25271
Total time spent by all map tasks (ms)=21062
Total time spent by all reduce tasks (ms)=25271
Total vcore-milliseconds taken by all map tasks=21062
Total vcore-milliseconds taken by all reduce tasks=25271
Total megabyte-milliseconds taken by all map tasks=21567488
Total megabyte-milliseconds taken by all reduce tasks=25877504
Map-Reduce Framework
Map input records=2
Map output records=10
Map output bytes=98
Map output materialized bytes=124
Input split bytes=92
Combine input records=0
Combine output records=0
Reduce input groups=8
Reduce shuffle bytes=124
Reduce input records=10
Reduce output records=8
Spilled Records=20
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=564
CPU time spent (ms)=4300
Physical memory (bytes) snapshot=330784768
Virtual memory (bytes) snapshot=3804205056
Total committed heap usage (bytes)=211812352
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=58
File Output Format Counters
Bytes Written=66
hadoop@hadoop-VirtualBox:~$
Po úspěšném spuštění programu přejděte do HDFS a zkontrolujte soubor součásti ve výstupním adresáři.
Níže je výstup programu wordcount.
hadoop@hadoop-VirtualBox:~$ hdfs dfs -cat /output/part-r-00000
This 2
first 1
is 2
mapreduce 1
my 1
program 1
test 1
wordcount 1
hadoop@hadoop-VirtualBox:~$
Závěr
Tento příklad je v Javě, program MapReduce můžete napsat i v pythonu. Úspěšně jsme spustili program Hadoop MapReduce na Hadoop Cluster na Ubuntu 16.04. Kroky ke spuštění programu Mapreduce v jiných prostředích Linuxu zůstávají stejné. Ujistěte se, že před spuštěním programu by měl být váš cluster Hadoop spuštěn a také váš vstupní soubor by měl být přítomen v HDFS.