大数据科普系列(六) MapReduce概述
2019-11-06阅读 1312

MapReduce是Hadoop生态中的一个分布式计算框架。通过使用它,开发人员不必关心分布式计算底层怎么去实现,只需关心相应的业务逻辑,就可以轻松地编写应用程序,以可靠、容错的方式并行处理大型硬件集群上的大量数据集。

在科普它的原理之前,我们先来运行一个属于MR的hello world程序,那就是单词计数wordcount程序。

首先,我们在hdfs根目录创建一个文件夹in。

6-1.png

然后,我们往这个目录上传2个文本文件,其中的内容分别为:

Hello World Bye WorldHello Hadoop Goodbye Hadoop

6-2.png

现在,我们执行官方的wordcount程序:

hadoop jar   $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount  /in /out

/in 是输入目录,/out是计算结果存储目录,/out必须事先不存在。

查看运行结果:

6-3.png

如上,MR程序将file1和file2里单词出现的次数统计完毕,并将结果保存在了/out目录下的part-r-00000文件中。

下面,我们就来对整个过程做一个简单说明:

        1)首先,MR会将输入文件按预设值进行逻辑分片。在hadoop2.x这个值默认是128M,和HDFS物理切块的值大小一致,即一个文件块对应一个逻辑切片。当然,没到128M的小文件也会被分为一个切片。

        2)然后MR会针对每一个逻辑切片启动一个Map任务,每个任务处理的逻辑都是一样,比如这个例子中就是读取当前切片内的单词,并记录为出现1次。再具体点,每个Map任务默认会一行一行地读取逻辑分片的内容,取出每一行中的每个单词,然后以

        3)Reducer会拉取所有Mapper任务的计算结果,这个过程中,会对key排序,并且所有相同的key对应的value,即同个单词出现过的次数,会被聚合在一起,然后把这些次数加起来,就得出了该单词出现的总次数,最终把结果保存在指定目录。

 

画个图方便大家理解:

 6-4.png

 

好了,相信大家已经理解了MapReduce的运行原理了,我们下期再会!