MepReduce综述

MapReduce

MapReduce 是一种计算模型,该模型可将大型数据处理任务分解成很多个计算单元,在服务器集群中并行执行的任务。这些人物的计算结果可以合并在一起来计算最终的结果。
MapReduce编程模型是由谷歌(Googel)开发的。Googel通过一篇很有影响力的论文对这个计算模型进行了描述,名为《MapReduce:大数据之上的简化数据处理》。一年后,另一篇名为《Google 文件系统》的论文介绍了Google文件系统。这两篇论文启发了道·卡丁(Doug Cutting)开发了Hadoop(分布式文件系统)。

MapReduce这个术语来自于两个基本的数据转换操作:Map过程和Reduce过程。一个Map操作会将集合中的元素从一种形式转换成另一种形式。在这个情况下,输入的键值对会被转换成零到多个键-值对输出。其中输入和输出的键必须完全不同,而输入和输出的值则可能完全不同。

在MapReduce计算框架中,某个键的所有键-值对都会被分发到一个reduce操作中。确切的说,这个键和这个键所对应的值都会被传递到同一个reduce,reduce过程的目的是将值的集合转换成一个值(例如对一组数值求和or平均值),或者转换成另一个集合。这个reduce最终会产生一个键-值对。再次说明一下,输入和输出的键和值可能不同。需要说明的是,如果job不需要reduce过程的话,那么也是可以无reduce过程的。

hadoop提供了一套基础设施来处理大多数困难的工作以保证能够执行成功。例如,hadoop决定如果将job分解成多个独立的map和reduce任务(task)来执行,它就会对这个task进行调度并为其分配合适的资源,决定将某个task分配到集群中哪个位置(如果可能,通常是这个task所要处理的数据所在的位置,这样可以最小化网络开销)。它会监控每个task以确保其成功完成,并重启一些失败的task。

为了更清晰的介绍MapReduce,让我们来看一个例子,Word Count算法已经被称为MapReduce计算框架中的"hello world"程序了。Word Count会返回在语料库(单个或多个文件)中出现的所有的单词以及单词出现的次数。输出内容会显示每个单词和他的频数,每行显示一条。按照正常的习惯,单词(输出的键)和频数(输出的值)通常使用制表符进行分割。

图1-1 显示了在MapReduce 计算框架中 Word Count程序是如何运行的。
这里有很多内容要讲,所以我们会从左到右来讲解这张图。
图1-1种左边的每个input(输入)框内都表示一个单独的文件,例子种有四个文件,其中第3个文件是空文件,未来便于简单描述,其他3个文件都仅仅包含几个单词。
默认情况下,灭国文档都会触发一个Mapper程序进行处理。而在实际场景下,大文件可能会被划分成多个部分,而每个部分都会被发送给一个Mapper进行处理。同时,也有将多个小文件合并为一个大文件的处理方法。

MapReduce计算框架中输入和输出的基本数据结构是键-值对。当Mapper进程启动的时候,其将被会频繁的调用来处理文件中的每行文本。每次调用传递给Mapper的键是文档中这行的起始位置的字符偏移量。对应的值就是这行的文本。

在WordCount程序中,没有使用字符偏移量。可以使用很多种当时进行分割,(例如,按照空格分隔是最简单的方式,但是这样会遗留下不需要的标点符号)最终这行文本会被分解成多个单词。我们同事假定Mapper会将每个单词转换成小写,因此对于“FUN”和“fun”会被认为是同一个单词。

最后,对于这行文本中的每个单词,Mapper都会输出一个键-值对,以单词作为键并以数字1 作为值(这里的1表示出现次数为1次)。需要注意的是键和值的输出数据类型和输入数据类型是不同的。

发布了7 篇原创文章 · 获赞 6 · 访问量 1489

猜你喜欢

转载自blog.csdn.net/qq_38326500/article/details/105303519