批处理引擎MapReduce

MapReduce是一个典型的分布式批处理引擎,具有良好的扩展性与容错性以及高吞吐率等。

编程思想:核心思想是分而治之,即将一个分布式计算过程拆解成两个阶段,Map阶段和Reduce阶段。

MapReduce的编程组件:

1.Mapper:Mapper中封装了应用程序的数据处理逻辑,为了简化接口,MapReduce要求所有存储在底层分布式文件系统上的数据均要解释成<key,value>的形式,并以迭代方式以此交给Mapper中的map函数处理,产生另外一些<key,value>。

2、Reducer:主要作用是基于Mapper产生的结果进行汇总操作,产生最终结果。

3、InputFormat:主要用于描述输入数据的格式

数据拆分(按照某种策略分成若干个split,以便确定Map task个数以及对应的Split)

为Mapper提供输入数据(给定某个split,能够将其解析成一系列<key,value>对)

(1)、TextInputFormat:专为文本文件格式,按照数据量大小将输入文件或目录拆分成split,并以行为单位将split桩长一系列<key、value>对。eg:一个文件1G,默写情况下TextInputFormat将其分成1024M/128M=8个split,进而启动8个Map Task处理。

(2)、SequenceFileInputFormat:针对二进制文件格式

4、Partitioner:作用是对Mapper产生的中间结果进行分片,以便将同一组的数据交给同一个Reduce处理,它直接影响Reduce阶段的负载均衡。MapReduce默认采用HashPartitioner基于一种哈希值的分片方法,能够将相同的key交给同一个Reduce Task处理。

5、OutputFormat:用于描述输出数据的格式,能够将用户提供的<key,value>写入特定的格式文件中。

6、可选组件(Combiner):一个性能优化组件,可看作Map端的local reducer,它通常给Reducer的逻辑是一样的,运行在Map Task中,主要作用是对Mapper输出结果做一个局部聚集,以减少本地磁盘写入量和网络数据传输量,并减少Reducer计算压力。

猜你喜欢

转载自blog.csdn.net/chechelove886/article/details/84337270