目录
(一)MapReduce的基本知识
(二)、MapReduce计算框架概述
(三)MapReduce 具体计算过程
(一)MapReduce的基本知识
1、 MapReduce的使用场景:MapReduce实现分布式计算。
2、方便编程人员在不熟悉分布式并行编程计算情境下,对海量分布的大数据进行处理。
3、mapreduce 有缺陷存在。它适用于数据量很大,并且可以分解成小块数据同时处理,结果是正确的情况。对于一些不能分开求解的问题,不能使用mapreduce。
4、mapreduce的工作机制主要包括两部分,map过程,reduce过程。map过程执行map函数对输入的键值对处理,输出仍为键值对。reduce阶段执行reduce函数。
5、可以自定义数据类型。Hadoop中的数据类型其实质为对Java数据类型的封装。在大数据处理下,为了使数据传输更为高效,对所有类型的数据都以字节流的形式传输,因此Hadoop中的数据类型对Java中的数据类型进行了封装。通过实现Writable接口,可以自定义数据类型。
6、数据输入格式默认是TextInputFormat类型对象,TextInputFormat类继承于FileInputFormat类,FileInputFormat类继承自InputFormat抽象类。InputFormat抽象类中声明了三个抽象方法,可以通过重载RecordWriter方法重新设置输入格式。
7、数据的输出格式默认是TextOutputFormat类型对象,TextOutputFormat类继承于FileOutputFormat类,FileOutputFormat类继承自OutputFormat抽象类。OutputFormat抽象类中声明了三个抽象方法,可以通过重载RecordWriter方法重新设置输出格式。
8、通过实现对应接口,可以实现不同的分区方式等。
(二)、MapReduce计算框架概述
mapreduce计算框架是将代码往数据端移动。
主要通过两个阶段来实现对问题的处理。map阶段、reduce阶段。
map阶段有许多map进程同时并行。由于map阶段的输入由inputformat对象决定,因此可以使用默认的分割方法,也可以自定义分割方式。map阶段对输入进行分区(默认是hash方法,目的:一个分区对应一个reduce),排序、合并等。
reduce阶段有许多的reduce进程同时并行。输入即为map函数的输出,用户自定义的reduce函数决定reduce的输出,但输出格式一定为<key,value>形式。
(三)MapReduce 具体计算过程
输入-----》 map -----》shuffle ------》reduce ------》输出
1. map 阶段
- 输入:一般来说,每一个数据块对应一个map 计算。map 端在读取HDFS中数据块中的数据时,会调用Hadoop中的 inputformat 接口,以键值对的方式作为map 输入。
- 输出:通过用户自己定义的map 函数对数据进行操作,仍以键值对的方式输出
2. shuffle 阶段
shuffle 阶段描述从 map 函数输出到 reduce函数输入的这一过程 。
分区:MapReduce首先会调用分区接口对map输出的不同key-value分区,默认是对key值进行Hash运算,也可以通过重载分区接口的方法实现。
排序:对每个分区的key-value键值对根据key值排序。
合并:对每个分区的key-value键值对进行合并运算处理,减少在map和reduce之间的数据传输量。
归并:写入磁盘的多个文件会在map过程完成之后通过归并,形成一个大文件。归并是将不同文件 相同分区的key-value划分到同一个区,然后排序、合并处理形成<key,value-list>。
将所有map端的数据读入缓存,写入磁盘,在所有数据读取完成之后,将所有文件数据再一次归并处理。
3. reduce阶段。
reduce阶段的任务就是根据用户定义的reduce函数,对输入的key-value执行函数,并将最终结果输出到文件系统。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)