MapReduce将输入进行分片,交给不同的Map任务进行处理,然后由reduce任务合并成最终的解。其处理过程主要如图4-3所示,分为split、map、shuffle和reduce四个步骤。
图4-3 MapReduce工作流程示意图
Split:切分,由于文件比较大,需要进行切块。
Map:每个map对应一个split切块;
Shuffle洗牌:数据排序、分组、合并、跨网络传输、序列和反序列化由系统默认实现,也可以用户编程实现。
Reduce结束后,对应一个part,输入和输出都是KEY/VALUE。
Split阶段在进入map阶段前,有个Inputformat的过程,将分片数据转换为key/value对的形式。InputFormat将分片数据解析成key/value对,默认实现是TextInputFormat;Key是行在文件中的偏移量,value是行内容,若行被截断,则读取下一个block的前几个字符。(www.xing528.com)
下面以Wordcount为例介绍mapreduce程序的计算过程。有一批文件(规模为TB级或者PB级),要求统计这些文件中所有单词出现的次数。MapReduce处理该问题的主要四个步骤如下:
Input:最左边是输入的过程,输入了图示的数据。
Split分片:mapreduce会根据输入文件的大小计算分片,每个分片对应与一个map任务。Split阶段进入map阶段前,有个Inputformat的过程,将分片数据转换为key/value对的形式。输入的key是行偏移量,value是一行字符;而Map阶段是由编程人员通过代码来控制的,图4-4所示所要完成的任务是将字符串分割开来,字符是key和value是1,表示数量。
图4-4 MapReduce处理Wordcount问题
shuffle洗牌:洗牌阶段,由于之前生成map中存在很多键相同的map,在洗牌阶段将键相同的进行合并。
Reduce:Reduce阶段,将键相同的map的value值进行求和,该阶段由开发人员通过代码控制得出最终的map,这样最后输出的数据就是每个字符串出现的次数。
MapReduce适合PB级以上海量数据的离线处理,例如:数据统计(例如网站pv、uv统计)、搜索引擎建立索引、统计搜索词频率、复杂数据分析及推荐算法等。不适用、流式计算和DAG计算。实时计算要求在毫秒级或者秒级内返回结果;MapReduce自身的设计特点决定了数据源必须是静态的,不能动态变化;DAG计算中多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出,而MapReduce要求输入完整的数据文件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。