导图社区 第七章:MapReduce
大数据技术原理与应用,主要内容有1.概念: MapReduce是一种并行编程模型,用于大规模数据集((大于1TB)的并行运算,它将复杂的,运行于大规模集群上的并行计算过程高度抽象为两个函数:Map和Reduce2.分布式并行编程3.传统的并行计算框架与MapReduce的区别等。
社区模板帮助中心,点此进入>>
英语词性
法理
刑法总则
【华政插班生】文学常识-先秦
【华政插班生】文学常识-秦汉
文学常识:魏晋南北朝
【华政插班生】文学常识-隋唐五代
民法分论
日语高考動詞の活用
第14章DNA的生物合成读书笔记
第七章:MapReduce
1. 概念: MapReduce是一种并行编程模型,用于大规模数据集(大于1TB)的并行运算,它将复杂的,运行于大规模集群上的并行计算过程高度抽象为两个函数:Map和Reduce
2. 分布式并行编程
2.1. 分布式并行程序运行在大规模计算机集群上,可以并行执行大规模数据处理任务,从而获得海量的计算能力。同时通过向集群中增加新的计算节点,就能很容易地实现集群计算能力的扩充。
3. 传统的并行计算框架与MapReduce的区别
3.1. 传统并行计算框架
集群架构/容错性 共享式(共享内存/共享存储),容错性差。 硬件/价格/扩展性 刀片服务器、高速网、SAN, 价格贵,扩展性差。
3.2. MapReduce
集群架构/容错性 非共享式,容错性好 硬件/价格/扩展性 普通PC机,便宜,扩展性好
4. MapReduce模型简介
4.1. 策略采用分而治之 框架采用了Master|Slave架构,包括一个Master和若干个Slave,Master上运行JobTracker,Slave上运行TaskTracker
4.2. 模型介绍
MapReduce将复杂的,运行于大规模集群上的并行计算过程高度抽象到了两个函数:Map,Reduce。
分而治之: 一个存储在分布式文件系统中的大规模数据集会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理。
MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为,移动数据需要大量的网络传输开销。
Hadoop框架是用Java来实现的,但是MapReduce应用程序不一定是用Java来写的
5. MapReduce体系结构
5.1. 主要由四个部分组成:Client, JobTracker, TaskTracker, 以及Task。
Client:用户编写的MapReduce程序通过Client提交到JobTracker端,用户可通过Client提供的一些接口查看作业运行状态
JobTracker:JobTracker负责资源监控和作业调度,JobTracker监控所有 TaskTracker与Job的健康状况,一旦发现失败,就将相应的任务转移到其他节点,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器(TaskScheduler),而调度器会在资源出现空闲时,选择合适的任务去使用这些资源。
TaskTracker:TaskTracker 会周期性地通过“心跳”将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令并执行相应的操作(如启动新任务、杀死任务等),TaskTracker使用“slot”等量划分本节点上的资源量(CPU、内存等)。
Task:Task分为Map Task和Reduce Task 两种,均由TaskTracker启动。
6. Map和Reduce函数
6.1. Map: 输入 <K1,V1> 输出 List(<K2,V2>) 说明:1.将小数据集进一步解析成一批<key,value>对,输入Map函数中进行处理。2.每一个输入的<K1,V1>会输出一批<K2,V2>,<K2,V2>是计算的中间结果。
6.2. Reduce: 输入 <K2,List(V2)> 输出 <K3,V3> 说明:输入的中间结果<K2,List(V2)>中的List(V2)表示一批属于同一个K2的value
7. MapReduce的执行的过程
7.1. 不同的Map任务之间不会通信
7.2. 不同的Reduce任务之间也不会发生任何信息交换
7.3. 用户不能显式地从一台机器向另一台机器发送信息
7.4. 所有的数据交换都是通过MapReduce框架自身去实现的
8. MapReduce的各个执行阶段
8.1. MapReduce框架使用InputFormat模块做Map的预处理,比如验证输入的格式是否符合输入定义
8.2. IputSplit是逻辑切分而非物理切分,所以还需要通过RecordReader根据InputSplit中的信息来处理InputSplit中的具体记录,加载数据并将其装换为适合Map任务读取的键值对,输入给Map任务
8.3. Map任务会根据用户定义的映射规则,输出一系列的<key,value>作为中间结果
8.4. 为了让reduce可以并行处理map的结果,需要对map的输出进行分区,排序,合并,归并等
8.5. reduce以一系列<key,value-list>中间结果作为输入,执行用户定义逻辑,输出结果交给outputformat
8.6. outputformat模块会验证输出目录是否已经存在,以及输出结果类型是否符合配置文件中配置类型,如果都满足就输出Reduce的结果得到的分布式文件系统。
概要
9. 任务数量
9.1. Map任务的数量:Hadoop为每个split创建一个Map任务,split的多少决定了Map任务的数目。大多数情况下,理想的分片大小是一个HDFS块
9.2. Reduce任务的数量:最优的Reduce任务个数取决于集群中可用的reduce任务槽(slot)的数目。通常设置比reduce任务槽数目稍微小一些的Reduce任务个数(这样可以预留一些系统资源处理可能发生的错误)
10. Shuffle过程详解
10.1. Map端的Shuffle过程
输入数据和执行过程Map任务: Map任务的输入数据一般保存在分布式文件系统,如GFS或HDFS的文件块中,这些文件块格式是任意的,可以是文档格式,也可以是二进制格式。
写入缓存: 每个卖盘任务都会被分配一个缓存,web任务的输出结果不是立即写入磁盘,而是首先写入缓存。 需注意:在写入缓存之前,key和value都会被序列化成字节数组。
溢写:(分区,排序,合并) 在一写到磁盘之前,缓存中的数据首先会被分区。 Map reduce通过接口对这些键值对进行分区,默认的分区方式是先采用hash函数对key进行哈希。 对于每个分区内的所有键值队,后台线程会根据key对他们进行内存排序排序是map reduce的默认操作。 合并是将那些具有相同的key的<key,value>的value加起来。
文件归并: 每次一写,操作都会在磁盘中生成一个新的一些文件,随着may reduce任务的进行,磁盘中的一些文件数量会越来越多。具有相同key的键值对会被归并成一个新的键值对。
10.2. Reduce端的Shuffle过程
领取数据: Map的过程结束后,所有map任务输出结果都保存在Map机器的本地磁盘上,reduce任务需要把这些数据领取回来,存放到自己所在机器的本地磁盘上。
归并: 从map端领取的数据会被存放在reduce任务所在机器的缓存中,如果缓存被占满就像map端一样,被溢写在磁盘中。因此缓存中的数据是来自不同的map机器的,一般会存在很多可以合并的键值队。
把数据输入给reduce任务: 磁盘中经过多轮归并后得到的若干个大文件,不会继续归并成一个新的大文件,而是直接输入reduce任务,这样可以减少磁盘读写开销。 Reduce任务会执行reduce函数中定义的各种映射输出,最终结果并将其保存在分布式文件系统中。
简介:是指对Map任务输出结果进行分区,排序,合并,归并等处理交给reduce 的过程