大数据技术原理与应用——MapReduce

大数据技术原理与应用——MapReduce

7.1.1 分布式并行编程

概述

MapReduce 是一种分布式并行编程框架
数据处理能力提升的两条路线
1.单核 CPU 到双核到四核到八核
2.分布式并行编程:借助一个集群通过多台机器同时并行处理大规模数据集
大数据技术原理与应用——MapReduce_第1张图片
并行编程模型和传统的并行编程框架的区别

7.1.2 MapReduce 模型简介

大数据技术原理与应用——MapReduce_第2张图片
MapReduce 中有两个重要的地方:
一是策略,二是理念
大数据技术原理与应用——MapReduce_第3张图片
大数据技术原理与应用——MapReduce_第4张图片
传统的计算方法——数据向计算靠拢
大数据技术原理与应用——MapReduce_第5张图片
MapReduce——计算向数据靠拢
大数据技术原理与应用——MapReduce_第6张图片
大数据技术原理与应用——MapReduce_第7张图片
Map 函数
大数据技术原理与应用——MapReduce_第8张图片
Reduce 函数
大数据技术原理与应用——MapReduce_第9张图片

7.2 MapReduce 的体系结构

大数据技术原理与应用——MapReduce_第10张图片
Client(客户端):
1.通过 Client 可以提交用户编写的应用程序用户通过它将应用程序交到 JobTracker 端。
2.通过这些 Client 用户也可以通过它提供的一些接口去查看当前提交作业的运行状态。

JobTracker(作业跟踪器):
1.负责资源的监控和作业的调度。
2.监控底层的其它的 TaskTracker 以及当前运行的 Job 的健康状况。
3.一旦探测到失败的情况就把这个任务转移到其他节点继续执行跟踪任务执行进度和资源使用量。

TaskTracker(任务调度器):
1.执行具体的相关任务一般接收 JobTracker 发送过来的命令。
2.把一些自己的资源使用情况,以及任务的运行进度通过心跳的方式,也就是 heartbeat 发送给 JobTracker。
以 slot 为单位调度资源
大数据技术原理与应用——MapReduce_第11张图片
在同一台机器上面可以同时运行 map 任务和 reduce 任务
大数据技术原理与应用——MapReduce_第12张图片

7.3.1 MapReduce 工作流程概述

MapReduce 工作流程

大数据技术原理与应用——MapReduce_第13张图片
大数据技术原理与应用——MapReduce_第14张图片
首先,大规模数据集肯定是保存在分布式文件系统(例如:HDFS)之中的,把它分布式的存储到不同的机器节点上面去,所以我们为了实现分布式并行处理,我们一般会把这么非常大规模数据集,要对它进行分片操作,就把一个大数据拆成很多的小片,然后,每一个小分片,单独给它启动一个 map 任务,让它去负责处理这个分片,这些 map 任务输入就是 key 和 value ,把这些 key、value 发送到不同的 reduce 任务上面去进行后续的处理,因为我们要进行并行地操作,所以对于 map 任务输出结果,是需要把它分成很多区,分给不同的 reduce 的,分多少区一般取决于你里面有多少个 reduce ,即执行 reduce 任务机器,比如这里有三个 reduce 任务在执行,就把它分成三个区。

7.3.2 MapReduce 各个执行阶段

大数据技术原理与应用——MapReduce_第15张图片
大数据技术原理与应用——MapReduce_第16张图片
一般来讲,在目前的实际应用当中,多数理想的情况下,用一个块的大小作为它的分片大小。

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

7.4.1 Shuffle 过程详解

Shuffle 过程简介

大数据技术原理与应用——MapReduce_第17张图片
首先,数据是保存在分布式文件系统 HDFS 中,所以它输入时,是从分布式文件系统中输入数据,输入完后要进行相关的分片处理,每一个分片启动一个 Map 任务,它要交给 Map,Map 里面包含用户对数据的处理逻辑,这个 Map 任务会运行用户处理逻辑以后输出数据处理结果,这些数据处理结果就是一堆的键值对,这些键值对并不是直接发送给 Reduce,也并不是直接就写入磁盘,而是先把它们写到缓存里面,写入缓存以后,当缓存满的时候,它再发生溢写,就是把缓存中的数据溢写到磁盘中,生成磁盘文件,同时,把缓存清空。但是,溢写过程也不是一下就是溢写到磁盘中,不作任何处理,它把缓存中的数据溢写到磁盘中还要经历几大操作(一个是分区,一个是排序,一个是可能发生的合并,另外就是对文件的归并),这些溢写会发生多次,生成多个磁盘文件,对每一个磁盘文件要进行统一的归并,把多个磁盘文件要归并成一个大的文件,归并完成后,这个磁盘文件中所有的键值对都是经过分区排序的,最终得到的这个大文件,它会通知相关的 Reduce 任务把它取走,Reduce 任务会把属于自己要处理的那些数据、那些分区从各个不同的 Map 机器上面把它拉回来,拉回到自己本地的 Reduce 机器上去,然后要执行归并,最终把执行归并得到的键值对输入给 Reduce 函数,Reduce 里面包含了用户编写的处理数据的逻辑,所以,会经过相关的处理,处理完以后再进行输出,输出给相关的分布式文件系统 HDFS。
大数据技术原理与应用——MapReduce_第18张图片

7.4.2 Map 端的 Shuffle 过程

大数据技术原理与应用——MapReduce_第19张图片
一般来讲,会默认分配100M缓存,溢写比例一般是0.8。

7.4.3 Reduce 端的 Shuffle 过程

大数据技术原理与应用——MapReduce_第20张图片

7.5 MapReduce 应用程序执行过程

大数据技术原理与应用——MapReduce_第21张图片

7.6 实例分析:WordCount

WordCount 程序任务

程序 WordCount
输入 一个包含大量单词的文本文件
输出 文件中每个单词及其出现次数(频数),并按照单词字母顺序排序每个单词和其频数占一行,单词和频数之间有间隔

大数据技术原理与应用——MapReduce_第22张图片

WordCount 设计思路

WordCount 程序能不能用 MapReduce 去做?

  • 可以用 MapReduce 去做

一个 WordCount 执行过程的实例

大数据技术原理与应用——MapReduce_第23张图片
用户没有定义 Combiner 函数的过程
大数据技术原理与应用——MapReduce_第24张图片
用户定义了 Combiner 函数后的过程
大数据技术原理与应用——MapReduce_第25张图片

7.7 MapReduce 的具体应用

  • 关系代数运算(选择、投影、并、交、差、连接)
  • 矩阵运算
  • 分组聚合运算
  • 矩阵乘法
    大数据技术原理与应用——MapReduce_第26张图片
    大数据技术原理与应用——MapReduce_第27张图片
    大数据技术原理与应用——MapReduce_第28张图片

7.8 MapReduce 编程实践

任务要求

大数据技术原理与应用——MapReduce_第29张图片
步骤:
1.编写 Map 处理过程
2.编写 Reduce 处理过程
3.写 main 函数
4.编译打包代码

编写 Map 处理逻辑
大数据技术原理与应用——MapReduce_第30张图片
编写 Reduce 处理逻辑
大数据技术原理与应用——MapReduce_第31张图片
写 main 函数
大数据技术原理与应用——MapReduce_第32张图片
完整代码
大数据技术原理与应用——MapReduce_第33张图片
大数据技术原理与应用——MapReduce_第34张图片
编译打包代码
大数据技术原理与应用——MapReduce_第35张图片
大数据技术原理与应用——MapReduce_第36张图片
大数据技术原理与应用——MapReduce_第37张图片
大数据技术原理与应用——MapReduce_第38张图片
大数据技术原理与应用——MapReduce_第39张图片
在 Hadoop 当中执行 MapReduce 任务的几种方式
大数据技术原理与应用——MapReduce_第40张图片

你可能感兴趣的:(大数据技术原理与应用)