大数据学习笔记(MapReduce简介)

什么是MapReduce

Hadoop MapReduce是一个易于编写应用程序的软件框架,该应用程序以一种可靠的、容错的方式,在大型硬件集群(数千个节点)上并行处理大量数据(多TB数据集)。

MapReduce的设计理念

MR主要思想就是:
分久必合
MR的核心思想:
“相同”的key为一组,调用yicireduce方法,方法内迭代这一组数据进行计算
MR由两个阶段组成:
map端
reduce端

MapReduce分布式计算原理

大数据学习笔记(MapReduce简介)_第1张图片

map task

split

MR在计算之前,会将HDFS上的文件划分切片(split),split默认的大小与block块一致,由于HDFS上的文件划分可能会存在乱码问题,所以split块通常要比block块大一点或者是小一点,split块的大小可以在配置文件中修改,每个split会作为一个map task的输入。

1.Read 阶段:

Map Task 通过用户编写的 RecordReader,从输入 InputSplit 中解析出一个个 key/value。

2.map阶段:

该节点主要是将解析出的 key/value 交给用户编写 map()函数处理,并产生一系列新的 key/value。

3.Collect 收集阶段:

在用户编写 map()函数中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会将生成的 key/value 分区(调用Partitioner),默认的分区器是HashPartitioner,分区策略是根据key的HashCode与reduce task NUM 取模,将数据分区后,数据由三部分组成(分区号,key,value),然后将数据写入一个buffer内存缓冲区中。

4.溢写阶段(spill)

buffer中会有100MB的内存空间,被分成两块,一块80M,一块20M;map task一条一条的往buffer中去写,一旦写入到80M,此时他会将这80M的内存封锁,封锁后会对内存中的数据进行combiner(小聚合),然后根据分区号和key键进行排序,将相同分区的数据放在一块,并且分区内的数据是有序的,以上的combiner以及排序完成后就开始溢写数据到磁盘上,此时的磁盘文件就是一个根据分区号分好区的,并且内部有序的小文件map task 计算完毕后,会将磁盘小文件合并成一个大文件,在和并的时候使用归并排序的算法,将各个小文件合并成一个有序的大文件(combiner—>sort—>spill)。3,4部分被称为shuffle write阶段。每一个map task 都会产生一个有分区的并且分区内部有序的大文件。

Reduce task

shuffle read

去map端读取相应的分区数据,将分区数据写入到内存中,内存满了就会溢写,溢写之前会排序,当把所有的数据娶过来后,会将溢写产生的磁盘小文件合并(sort)成有序大文件,以提高分组的效率。

reduce

每一组数据调用用户编写的reduce函数,产生结果,并将计算结果写出到HDFS上。

你可能感兴趣的:(大数据学习笔记(MapReduce简介))