whspringer 2019-05-31
MapReduce 是一种并行编程模型,用于大规模数据集的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度抽象到两个函数:Map和Reduce。
Hadoop MapReduce运行在分布式文件系统HDFS上。
在MapReduce中,一个存储在分布式文件系统中的大规模中的大规模数据会被切分成许多独立的小数据块,这些小数据块可以被多个Map任务并行处理。MapReduce框架会为每个Map任务输入一个数据子集,Map任务生成的结果会继续作为Reduce任务的输入,最终由Reduce任务输出最后结果,并写入分布式文件系统。
适合MapReduce 处理的数据集需要满足一个前提条件:
待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
MapReduce设计理念:计算向数据靠拢
MapReduce框架将Map程序就近地在HDFS数据所在的节点运行,即将计算节点和存储节点放在一起运行,从而减少节点间的数据移动开销。
MapReduce的核心思想:分而治之
把一个大的数据集拆分成多个小数据块在多台机器上并行处理,也就是说,一个大的MapReduce作业,首先会被拆分成许多个Map任务在多台机器上并行执行,每个Map任务通常运行在数据存储的节点上,这样,计算和数据就可以放在一起运行,不需要额外的数据传输开销。
当Map 任务结束后,会生成以<key, value>形式表示的许多中间结果。
为了让Reduce 可以并行处理Map的结果,需要对Map的输出进行一定的分区(Partition)、排序(Sort)、合并(Combine)、归并(Merge)等操作,得到<key, value-list> 形式的中间结果,再交给Reduce 进行处理,这个过程称为 Shuffle(洗牌)。
从无序的<key, value> 到有序的<key, value-list>,这个过程用Shuffle(洗牌)来称呼非常形象。
Reduce以一系列<key, value-list>中间结果作为输入,执行用户定义的逻辑,输出结果输出到分布式文件系统中。
通过实现MapReduce计算结果保存到MySql数据库过程,掌握多种方式保存计算结果的技术,加深了对MapReduce的理解;创建maven项目,项目名称hdfs,这里不再说明。红色部分为增加内容: