大数据技术原理与应用(第七章 MapReduce)

目录

7.1 MapReduce简介

MapReduce与传统并行计算框架对比

MapReduce模型

MapReduce策略

MapReduce理念——计算向数据靠拢

MapReduce架构——Master/Slave

Map函数和Reduce函数

7.2 MapReduce的体系结构

Client客户端

JobTracker作业跟踪器

TaskTracker任务追踪器

7.3MapReduce工作流程概述

         MapReduce执行的各个阶段

Split分片

7.4 Shuffle过程原理

Map端的Shuffle过程

Reduce 端的Shuffle过程

7.5 MapReduce应用程序执行过程

 7.6 MapReduce的具体应用

用MapReduce实现关系的自然连接


7.1 MapReduce简介

数据处理能力提升的两条路线:单核CPU到双核四核八核;分布式并行编程。

典型的并行编程框架还有MPI(消息传递接口),OpenCL,CUDA等。

MapReduce与传统并行计算框架对比

MapReduce模型

MapReduce策略

将庞大的数据集,切分成非常多的独立的小分片;为每个分片单独启动一个map任务;最终通过多个map任务,并行地在多个机器上去处理。

MapReduce理念——计算向数据靠拢

传统的计算方法——数据向计算靠拢:要完成一次数据分析,选择一个计算节点,把运行数据分析的程序放到计算节点上运行;然后把涉及到的数据,全部从不同节点上面拉过来,传输到计算发生的地方。

MapReduce——计算向数据靠拢:在集群中选择部分机器作为程序运算的节点,一般选择距离需要处理数据块最近的Map或Reduce机器来进行运算;最终把结果汇总到相关任务协调节点返回。(大大减少了数据传输开销)

MapReduce架构——Master/Slave

一个Master服务器,作业跟踪器JobTracker,负责整个作业的调度和处理以及失败和恢复。

若干个Slave服务器,负责具体任务执行的组件TaskTracker,负责接收JobTracker给它分配的作业处理指令完成具体的任务处理。

Map函数和Reduce函数

大数据技术原理与应用(第七章 MapReduce)_第1张图片

7.2 MapReduce的体系结构

大数据技术原理与应用(第七章 MapReduce)_第2张图片

Client客户端

通过Client可以提交用户编写的应用程序,用户通过它将应用程序提交到JobTracker端;通过这些Client用户也可以通过它提供的一些接口去查看当前提交作业的运行状态。

JobTracker作业跟踪器

负责资源的监控和作业的调度;监控底层其他的TaskTracker以及当前Job的健康状况;一旦探测到失败的情况就把这个任务转移到其他节点继续执行;跟踪任务执行进度和资源使用量,并将这些信息告诉任务调度器(TaskScheduler),调度器会在资源出现空闲时,选择合适的任务去使用。(TaskScheduler是可插板模块,允许用户自行编写调度策略)

TaskTracker任务追踪器

接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等);将本节点上资源的使用情况,以及任务的运行进度等信息,周期性地通过“心跳”heartbeat汇报给JobTracker。TaskTracker 使用“slot”槽来等量划分本节点上的资源量(CPU、内存等),slot 分为Map slot 和Reduce slot 两种,分别供MapTask 和Reduce Task 使用Task 分为Map Task 和Reduce Task 两种,均由TaskTracker 启动。一个Task 获取到一个slot 后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。

7.3MapReduce工作流程概述

大数据技术原理与应用(第七章 MapReduce)_第3张图片

不同的Map任务之间不会进行通信;不同的Reduce任务之间也不会发生任何信息交换;用户不能显式地从一台机器向另一台机器发送消息;所有的数据交换都通过MapReduce框架自身去实现。Shuffle:描述的是数据从Map端到Reduce端的过程,大致分为排序(sort)、溢写(spill)、合并(merge)、拉取拷贝(Copy)、合并排序(merge sort)这几个过程。

MapReduce执行的各个阶段

大数据技术原理与应用(第七章 MapReduce)_第4张图片

InputFormat模块完成初始从HDFS的文件加载,并对输入进行格式验证,将很大的数据集进行split分片(逻辑定义),然后利用RR(Recorder Reader)记录阅读器根据分片的长度和具体位置信息从HDFS中各个块读取分片信息,并输出Key-Value的形式,由Map函数进行处理,经过上面的Shuffle过程传送给Reduce函数处理,最终由OutputFormat模块进行格式检查与输出。

Split分片

大数据技术原理与应用(第七章 MapReduce)_第5张图片

HDFS 以固定大小的block 为基本单位存储数据,而对于MapReduce 而言,其处理单位是split。split 是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。

Map任务的数量取决于Split分片的数量;

Reduce任务的数量:最优的情况取决于集群中可用的Reduce任务槽(slot)的数目;通常设置比Reduce任务槽数目稍微小一些的Reduce任务个数(预留一些系统资源处理可能发生的错误)。

7.4 Shuffle过程原理

大数据技术原理与应用(第七章 MapReduce)_第6张图片

Map端的Shuffle过程

大数据技术原理与应用(第七章 MapReduce)_第7张图片

(1)Map端会处理输入数据并产生中间结果,这个中间结果会写到本地磁盘,而不是HDFS。每个Map的输出会先写到内存缓冲区中,当写入的数据达到设定的阈值时,系统将会启动一个线程将缓冲区的数据写到磁盘,这个过程叫做spill溢写(是为了减少磁盘的寻址开销,超出阈值后一次寻址全部写入)。

(2)在spill写入之前,会先进行二次排序,首先根据数据所属的partition进行排序,然后每个partition中的数据再按key来排序。partition的目是将记录划分到不同的Reduce上去,以期望能够达到负载均衡,以后的Reduce就会根据partition来读取自己对应的数据。接着运行combiner(如果设置了的话),combiner的本质也是一个Reduce,其目的是对将要写入到磁盘上的文件先进行一次处理,这样,写入到磁盘的数据量就会减少。最后将数据写到本地磁盘产生spill文件(spill文件保存在{mapred.local.dir}指定的目录中,Map任务结束后就会被删除)。

(3)最后,每个Map任务可能产生多个spill文件,在每个Map任务完成前,会通过多路归并算法将这些spill文件归并成一个文件。至此,Map的shuffle过程就结束了。

Reduce task在执行之前的工作就是不断地拉取当前job里每个map task的最终结果,然后对从不同地方拉取过来的数据不断地做merge,也最终形成一个文件作为Reduce task的输入文件。

————————————————
转载于原文链接:https://blog.csdn.net/shujuelin/article/details/83992061

每个Map任务分配一个缓存,MapReduce默认100MB缓存,设置溢写比例0.8,分区默认采用哈希函数,排序是默认的操作,排序后可以合并(Combine)合并不能改变最终结果,在Map任务全部结束之前进行归并,归并得到一个大的文件,放在本地磁盘文件归并时,如果溢写文件数量大于预定值(默认是3)则可以再次启动Combiner,少于3不需要,JobTracker会一直监测Map任务的执行,并通知Reduce任务来领取数据。spill的分区默认使用hash函数,也可以自定义。

合并(Combine)和归并(Merge)的区别:两个键值对<“a”,1>和<“a”,1>,如果合并,会得到<“a”,2>,如果归并,会得到<“a”,<1,1>>。

Reduce 端的Shuffle过程

大数据技术原理与应用(第七章 MapReduce)_第8张图片

(1)copy阶段: 首先要将Map端产生的输出文件拷贝到Reduce端,但每个Reducer如何知道自己应该处理哪些数据呢?因为Map端进行partition的时候,实际上就相当于指定了每个Reducer要处理的数据(partition就对应了Reduce),所以Reducer在拷贝数据的时候只需拷贝与自己对应的partition中的数据即可。ReduceTask 从各个 MapTask 上远程拷贝一片数据,并针对某一片数
据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。

(2)Merge 阶段:在远程拷贝数据的同时,ReduceTask 启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。

(3)Sort 阶段:按照 MapReduce 语义,用户编写 reduce()函数输入数据是按 key 进行聚集的一组数据。为了将 key 相同的数据聚在一起,Hadoop 采用了基于排序的策略。由于各个 MapTask 已经实现对自己的处理结果进行了局部排序,因此,ReduceTask 只需对所有数据进行一次归并排序即可。

(4)Reduce 阶段:reduce()函数将计算结果写到 HDFS 上。
————————————————
转载于原文链接:https://blog.csdn.net/shujuelin/article/details/83992061

7.5 MapReduce应用程序执行过程

大数据技术原理与应用(第七章 MapReduce)_第9张图片

 7.6 MapReduce的具体应用

MapReduce可以很好地应用于各种计算问题:关系代数运算(选择、投影、并、交、差、连接);分组与聚合运算;矩阵-向量乘法;矩阵乘法。

用MapReduce实现关系的自然连接

大数据技术原理与应用(第七章 MapReduce)_第10张图片

假设有关系R(a,b)和S(b,c),对二者进行自然连接操作;

使用Map过程,把来自R的每个元组转换成一个键值对>,其中的键就是属性B的值。把关系R包含到值中,这样做使得我们可以在Reduce阶段,只把那些来自R的元组和来自S的元组进行匹配。类似地,使用Map过程,把来自S的每个元组,转换成一个键值对>;

所有具有相同B值的元组被发送到同一个Reduce进程中,Reduce进程的任务是,把来自关系R和S的、具有相同属性b值的元组进行合并;

Reduce进程的输出则是连接后的元组,输出被写到一个单独的输出文件中。

你可能感兴趣的:(大数据,mapreduce)