文章目录
分布式并行编程
适用于数据密集型应用:
MapRduce模型简介
两个函数模型:
将复杂的集群计算,高度融合在map函数模型以及reduce函数模型。
分而治之原则:
MapRduce对大规模数据处理时,将数据集切分成独立的小分片,对每个小分片单独启动map任务,同时在多态机器上并行处理,同时遵循计算向数据靠拢的原则。
计算向数据靠拢:
数据不发生迁移,高速且高效。
在集群中选取map机器,和reduce机器,当进行小分片计算的时候将应用程序发到数据所在的机器(原因:HDFS以块为物理单位进行存取,在若干数据节点(机器)上储存一个数据集),
master/slave架构
包含一个master和若干slave(worker)服务器:
Map核心函数
任务:将一个键值对经过map后化为新的键值对格式,不论是输入还是输出的键值对内容,用户设定。
1、输入是键值对。
2、比如对文本进行解析时可按照如图所示行号加字幕的逻辑,输出了另一个键值对,一个字母以及出现次数
3、输出是对输入键值对的一个map的结果。
Reduce核心函数
与map大同小异
1、输入是一个键和一堆值的列表。
2、输出是对输入键值的一个reduce的结果。
3、是输出的键值内容是用户设定算法输出的。
MapRduce体系结构(学有余力,了解即可)
主要包含四个部分:client(客户端);JobTracker(作业跟踪器);Task Scheduler(任务调度器);TaskTracker(任务跟踪器);
client(客户端)
1、提供用户编写的程序到JobTracker
2、查看作业的运行状态:一个应用程序分发到小分片之前表现为job的形式,分发后且包含多个task。
JobTracker(作业跟踪器,管家)
Task Scheduler(任务调度器)
可插拔模块,允许客户自己编写,可以采用用户自己的任务调度模块
TaskTracker(任务跟踪器)
MapRduce工作流程
大致流程
1、多个map任务的结果分区(采用shuffle方法,区数与reduce数相同)给reduce完成数学处理,之后再给hdfs
2、MR分片的来源是HDFS,其输出也是给HDFS
3、不同的map任务之间不会进行通信,用户不能显式的在机器之间发送信息
以两个节点的集群为例的执行过程
1、从HDFS中获取文件,使用InputFomat进行分片,(逻辑分片,不是真的物理分片,这里指记录开始和结束位置,用户定义)
2、RR读取分片,以键值对的格式输出,分片数和map数相同,之后在map中按照用户自定义的处理逻辑进行处理生成中间结果键值对
3、通过Shuffle处理键值对,分发给Reduce(这里发生了分发到不同reduce机器的过程,图中显示为两个节点之间的x状连线)
4、通过Reduce中按照用户自定义的处理逻辑进行处理之后通过OutputFomat对数据格式进行检查,以及输出模块是否存在等进行检查,最后放入HDFS。
5、分片长和块相同64或128mb,map数和分片数相同,reduce任务个数取决于reduce slot的个数。
Shuffle过程原理
例子:
1、从HDFS分布式文件系统中输入,并且分片一一对应分片。
2、map中包含了用户的处理逻辑,处理后的键值对放入缓存(并不会直接写入磁盘,也不会直接发到reduce)。
3、当缓存达到溢写比例的时候,经过数据分区,排序,合并后进行溢写,将数据放入磁盘,生成磁盘文件,
4、通知reduce任务,reduce机会将其所需要的数据从不同的map生成的磁盘文件中取走并进行归并之后进行使用。
合并(<a,1>,<a,1>变为<a,2>),归并(<a,1>,<a,1>生成<a,<1,1>>的<value,list>)
MapRduce应用执行过程
步骤一:程序部署,在master-worker框架下
步骤二: