云计算分布式框架 Hadoop

107课时
2.2K学过
8分

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
10分钟

MapReudece

MapReduce处理大数据集,其核心部分就是Map函数和Reduce函数。这两个函数的具体功能由用户根据需要自己设计实现,只要能够按照用户自定义的规则,将输入的<key,value>对转换成另一个或一批<key,value>对输出即可。

在Map阶段,MapReduce框架将任务的输入数据分割成固定大小的数据片段(split),随后将每个split进一步分解成一批键值对<k1,v1>。Hadoop为每一个split创建一个Map任务,用于执行用户自定义的Map函数,并将对应的数据块split中的<k1,v1>对作为输出,得到计算的中间结果<k2,v2>。接着将中间结果按k2进行排序,并将Key值相同的value放在一起,形成一个新列表,形成<k2,list(v2)>元组。最后根据key值的范围将这些元组进行分组,对应不同的Reduce任务。

在Reduce阶段,Reduce任务将从不同Map接收来的数据整合在一起并进行排序,然后调用用户自定义的Reduce函数,对输入的<k2,list(v2)>对进行相应的处理,得到键值对<k3,v3>并输出到HDFS上。既然MapReduce框架为每个split创建一个Map,那么谁来确认Reduce任务的数目呢?用户来确认Reduce的数目。Mapred-site.xml配置文件中有一个表示Reduce任务数目的属性Mapred.Reduce.tasks,该属性的默认值为1,开发人员可以通过job.setNumReduceTasks()方法重新设置该值。

MapReduce处理大数据的过程(如程序)可拆解成Map(映射)和Reduce(化简)两个过程。MapReduce数据处理过程如下图所示。

这里简要介绍了MapReduce编程模型的原理。MapReduce编程流程、程序结构和并行计算的实现,以及MapReduce程序的详细流程、编程接口、程序实例等将在后面章节讲解。