我们将在这里描述在多节点集群中的Apache Hadoop中运行MapReduce Job的过程。 要在多节点群集中设置Apache Hadoop ,可以阅读设置Apache Hadoop多节点群集 。
为了进行设置,我们必须在每台计算机上使用以下配置Hadoop:
- 在所有节点的conf / mapred-site.xml中添加以下属性
<property>
<name>mapred.job.tracker</name>
<value>master:54311</value><description>The host and port that the MapReduce job tracker runs
at. If “local”, then jobs are run in-process as a single map
and reduce task.
</description>
</property><property>
<name>mapred.local.dir</name>
<value>${hadoop.tmp.dir}/mapred/local</value>
</property><property>
<name>mapred.map.tasks</name>
<value>20</value>
</property><property>
<name>mapred.reduce.tasks</name>
<value>2</value>
</property>
注意:最后三个是附加设置,因此我们可以忽略它们。
- 古腾堡项目
为了演示MapReduce,我们将使用WordCount示例作业,该作业读取文本文件并计算单词出现的频率。 输入是文本文件,输出是文本文件,其每一行包含一个单词和出现频率的计数,以制表符分隔。
从以下站点下载示例输入,所有电子文本均应采用纯文本us-ascii编码。
- 科学概要,卷。 1(共4个),作者:J。Arthur Thomson
- 达芬奇的笔记本
- 尤利西斯(James Joyce)
- 《孙子兵法》提高了6美分。 卑诗省孙子
- 亚瑟·柯南·道尔爵士的《福尔摩斯历险记》
- 魔鬼字典,安布罗斯·比尔斯(Ambrose Bierce)
- 大英百科全书,第11版,第4卷,第3部分
请谷歌搜索这些文本。 将每个电子书下载为纯文本UTF-8编码的文本文件,并将文件存储在所选的本地临时目录中,例如/ tmp / gutenberg。 使用以下命令检查文件:
$ ls -l /tmp/gutenberg/
- 接下来,我们在集群中启动dfs和mapred层
$ start-dfs.sh$ start-mapred.sh
通过发出以下命令jps进行检查,以检查数据节点,名称节点和任务跟踪器,作业跟踪器在所有节点中均正常运行。
- 接下来,我们将本地文件(这里是文本文件)复制到Hadoop HDFS
$ hadoop dfs -copyFromLocal /tmp/gutenberg /Users/hduser/gutenberg$ hadoop dfs -ls /Users/hduser
如果文件被成功复制,我们将看到类似以下内容–找到2个项目
drwxr-xr-x – hduser supergroup 0 2013-05-21 14:48 /Users/hduser/gutenberg
此外,我们检查文件系统在/ Users / hduser / gutenberg中的内容:
$ hadoop dfs -ls /Users/hduser/gutenberg
Found 7 items-rw-r--r-- 2 hduser supergroup 336705 2013-05-21 14:48 /Users/hduser/gutenberg/pg132.txt
-rw-r--r-- 2 hduser supergroup 581877 2013-05-21 14:48 /Users/hduser/gutenberg/pg1661.txt
-rw-r--r-- 2 hduser supergroup 1916261 2013-05-21 14:48 /Users/hduser/gutenberg/pg19699.txt
-rw-r--r-- 2 hduser supergroup 674570 2013-05-21 14:48 /Users/hduser/gutenberg/pg20417.txt
-rw-r--r-- 2 hduser supergroup 1540091 2013-05-21 14:48 /Users/hduser/gutenberg/pg4300.txt
-rw-r--r-- 2 hduser supergroup 447582 2013-05-21 14:48 /Users/hduser/gutenberg/pg5000.txt
-rw-r--r-- 2 hduser supergroup 384408 2013-05-21 14:48 /Users/hduser/gutenberg/pg972.txt
- 我们开始我们的MapReduce工作
让我们运行MapReduce WordCount示例:
$ hadoop jar hadoop-examples-1.0.4.jar wordcount /Users/hduser/gutenberg /Users/hduser/gutenberg-output
注意:假设您已经在HADOOP_HOME目录中。 如果没有,
$ hadoop jar ABSOLUTE/PATH/TO/HADOOP/DIR/hadoop-examples-1.0.4.jar wordcount /Users/hduser/gutenberg /Users/hduser/gutenberg-output
或者,如果您已经在/ usr / local / hadoop中安装了Hadoop,
hadoop jar /usr/local/hadoop/hadoop-examples-1.0.4.jar wordcount /Users/hduser/gutenberg /Users/hduser/gutenberg-output
输出如下:
13/05/22 13:12:13 INFO mapred.JobClient: map 0% reduce 0%
13/05/22 13:12:59 INFO mapred.JobClient: map 28% reduce 0%
13/05/22 13:13:05 INFO mapred.JobClient: map 57% reduce 0%
13/05/22 13:13:11 INFO mapred.JobClient: map 71% reduce 0%
13/05/22 13:13:20 INFO mapred.JobClient: map 85% reduce 0%
13/05/22 13:13:26 INFO mapred.JobClient: map 100% reduce 0%
13/05/22 13:13:43 INFO mapred.JobClient: map 100% reduce 50%
13/05/22 13:13:55 INFO mapred.JobClient: map 100% reduce 100%
13/05/22 13:13:59 INFO mapred.JobClient: map 85% reduce 100%
13/05/22 13:14:02 INFO mapred.JobClient: map 100% reduce 100%
13/05/22 13:14:07 INFO mapred.JobClient: Job complete: job_201305211616_0011
13/05/22 13:14:07 INFO mapred.JobClient: Counters: 26
13/05/22 13:14:07 INFO mapred.JobClient: Job Counters
13/05/22 13:14:07 INFO mapred.JobClient: Launched reduce tasks=3
13/05/22 13:14:07 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=118920
13/05/22 13:14:07 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0
13/05/22 13:14:07 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0
13/05/22 13:14:07 INFO mapred.JobClient: Launched map tasks=10
13/05/22 13:14:07 INFO mapred.JobClient: Data-local map tasks=10
13/05/22 13:14:07 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=54620
13/05/22 13:14:07 INFO mapred.JobClient: File Output Format Counters
13/05/22 13:14:07 INFO mapred.JobClient: Bytes Written=1267287
13/05/22 13:14:07 INFO mapred.JobClient: FileSystemCounters
13/05/22 13:14:07 INFO mapred.JobClient: FILE_BYTES_READ=4151123
13/05/22 13:14:07 INFO mapred.JobClient: HDFS_BYTES_READ=5882320
13/05/22 13:14:07 INFO mapred.JobClient: FILE_BYTES_WRITTEN=6937084
13/05/22 13:14:07 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=1267287
13/05/22 13:14:07 INFO mapred.JobClient: File Input Format Counters
13/05/22 13:14:07 INFO mapred.JobClient: Bytes Read=5881494
13/05/22 13:14:07 INFO mapred.JobClient: Map-Reduce Framework
13/05/22 13:14:07 INFO mapred.JobClient: Reduce input groups=114901
13/05/22 13:14:07 INFO mapred.JobClient: Map output materialized bytes=2597630
13/05/22 13:14:07 INFO mapred.JobClient: Combine output records=178795
13/05/22 13:14:07 INFO mapred.JobClient: Map input records=115251
13/05/22 13:14:07 INFO mapred.JobClient: Reduce shuffle bytes=1857123
13/05/22 13:14:07 INFO mapred.JobClient: Reduce output records=114901
13/05/22 13:14:07 INFO mapred.JobClient: Spilled Records=463427
13/05/22 13:14:07 INFO mapred.JobClient: Map output bytes=9821180
13/05/22 13:14:07 INFO mapred.JobClient: Total committed heap usage (bytes)=1567514624
13/05/22 13:14:07 INFO mapred.JobClient: Combine input records=1005554
13/05/22 13:14:07 INFO mapred.JobClient: Map output records=1005554
13/05/22 13:14:07 INFO mapred.JobClient: SPLIT_RAW_BYTES=826
13/05/22 13:14:07 INFO mapred.JobClient: Reduce input records=178795
- 检索作业结果
要直接从hadoop读取而不复制到本地文件系统,请执行以下操作:
$ hadoop dfs -cat /Users/hduser/gutenberg-output/part-r-00000
让我们将结果复制到本地文件系统中。
$ mkdir /tmp/gutenberg-output$ bin/hadoop dfs -getmerge /Users/hduser/gutenberg-output /tmp/gutenberg-output$ head /tmp/gutenberg-output/gutenberg-output
我们将得到如下输出:
"'Ample.' 1
"'Arthur!' 1
"'As 1
"'Because 1
"'But,' 1
"'Certainly,' 1
"'Come, 1
"'DEAR 1
"'Dear 2
"'Dearest 1
"'Don't 1
"'Fritz! 1
"'From 1
"'Have 1
"'Here 1
"'How 2
命令fs -getmerge将简单地串联在指定目录中找到的所有文件。 这意味着合并的文件可能(并且很可能不会)被排序。
资源:
- http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
- http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/
- http://hadoop.apache.org/docs/current/
翻译自: https://www.javacodegeeks.com/2013/06/running-map-reduce-job-in-apache-hadoop-multinode-cluster.html