MapReduce和Yarn原理

发布时间 2023-05-22 20:44:00作者: FlowersandBoys

MapReduce原理

 

问题1. 什么是计算, 什么是分布式计算?

答案: 计算指的是从海量数据中提取出有效的价值信息的过程(广义上解释), 狭义上指的是 1 + 1 = 2 即: 数学运算. 分布式计算指的是 多台机器协调, 共同完成同1个计算任务.

问题2: 分布式计算的两种模式?

答案: 分散汇总模式: 大家各自做各自的, 最后交由主节点汇总. 例如: MR程序就属于这种. 中心化模式, 步骤执行: 由老大(主节点)统筹安排各机器的计算任务, 第一步, 第二步等..., 最后将结果交由主节点汇总.

问题3: 那么是不是所有的场景都适合用分而治之呢?

我们知道MR是一种分布式计算架构, 采用的是 分而治之 的思想,

答案: 不一定, 看需求, 如果把大任务拆分成n个小任务之后, 小任务之间的依赖度比较高的情况下, 就不适合用分而治之思想. 例如: 求平均数.(1-7所有数的和,如1+2 交给一台机器,2+3交给一台机器,最后汇总求平均会变成4.3333,而1+2+...+7=28/7=4)

问题4: 请简述MR的核心八步?

答案:

  1. 定义输入组件, 负责读取数据源. 逐行读取.

  2. 自定义MapTask任务, 负责 分.

  3. 分区.

  4. 排序.

  5. 规约.

  6. 分组.

  7. 自定义ReduceTask任务, 负责 合.

  8. 定义输出组件, 将结果写到目的地文件中.

MR核心8步:

1.定义输入组件,负责读取源文件,获得K1, V1 K1:行偏移量,表示从哪开始读,V1:整行数据.

2.自定义MapTask任务,负责拆分的动作,获得K2, V2

1个切片= 1个MapTask任务, 切片大小默认和Block块大小-致. K2:单词,V2: 单 词的次数,默认记录为1.

3.分区,给数据打标记的,标记将来被哪个ReduceTask任务处理。

4.排序,默认按照字典顺序,按照K2进行升序排列.

5.规约,对MapTask端的数据做局部合并的,降低Reduce拉取的数据量,

6.分组,默认按照K2进行分组,K2一致的数据,会被放到一起。

7.自定义ReduceTask任务,负责合并的动作,获得K3, V3

1个分区= 1个ReduceTask任务, K3:单词,V3:单词总数.

8.定义输出组件,将结果写到目的地文件中。

问题5: 请简述MR程序的执行流程?

提示 1,切片,MapTask

2,MapTask扫描,放入环形缓冲区

3,满则溢,分排规,存磁盘

4,小文件合并

5,ReduceTask拷贝数据

6,ReduceTask对数据进行合并,排序

7,ReduceTask写磁盘

答案:

  1. MR程序分为MapTask阶段 和 ReduceTask阶段, 且: 1个切片 = 1个Block块 = 1个MapTask任务 = 1个分好区, 排好序, 规好约的文件. 1个分区 = 1个ReduceTask任务 = 1个结果文件.

  2. 先对文件切片, 每个片的大小默认和Block块大小一致(即: 128MB), 且每个切片的数据会交由1个MapTask任务来处理.

  3. MapTask任务采用逐行的方式从切片中读取数据, 逐行处理, 且会将处理后的数据放到环形缓冲区(默认大小:100MB, 溢写比:0.8)

  4. 当环形缓冲满(80MB)的时候, 会触发溢写线程(spill), 对该部分数据做分区, 排序, 规约的操作, 然后存储到磁盘上(小文件)

  5. 对上述的小文件进行合并(默认: 10个一合并), 获取最终的文件, 即: 1个MapTask = 1个分好区, 排好序, 规好约的文件.

  6. 当MapTask任务执行结束后, ReduceTask会开启1个拷贝线程, 从各个MapTask的结果文件中, 拷贝属于自己的数据(根据分区编号识别).

  7. ReduceTask对数据进行合并, 排序的操作, 获取最终结果数据.

  8. ReduceTask将处理好的结果数据写到磁盘文件中, 1个ReduceTask = 1个结果文件, 至此, MR程序执行结束.

Yarn原理

问题1: 什么是资源?

答案: 资源指的是硬件资源, 例如: CPU, 内存, 磁盘, 声卡, 网卡, 显卡...

问题2: 什么是调度, 目的是什么?

答案: 调度指的是当程序执行的时候, 所需资源有我们来集中管理分配, 目的是: 提高资源利用率.

问题3: 我们知道Yarn是大数据分布式集群 统一任务接收 和 资源调度器, 怎么理解统一呢?

答案: Yarn是负责调度计算任务的, 至于计算任务是什么, Yarn根本就不关心, 只要符合Yarn规范即可. 即: 无论是MapReduce计算任务, Spark计算任务, Flink计算任务, Yarn都能调度.

问题4: Yarn架构角色介绍 及 功能?

答案: Yarn属于大数据分布式集群统一任务接收和资源调度器, 由ResourceManager 和 NodeManager两种角色组成. ResourceManager作用:

  1. 负责管理整个集群的资源.

  2. 负责任务的接收.

  3. 负责资源的调度 和 分配. NodeManager作用:

  4. 管理本机的资源.

  5. 负责具体任务的执行. 所谓的管理资源, 其实就是开辟容器空间, 也叫: 资源空间, 资源容器(Container).

问题5: 请简述Yarn调度MR程序的流程? 也可能问: Yarn调度job(计算任务)流程.

流程如下:

1.客户端提交计算任务(例如:MR任务,Spark任务, Flink任 务等)给到Resour ceManager.

  1. ResourceManager校验任务合法后,会找一台nodemanager节点,创建AppMaster进程. 细节: 1个计算任务= 1个AppMaster进程。

  1. ApMaster进程会和Resour ceManager建立心跳机制,并通过心跳包的方式获取到要执行的计算任务的信息,之后会计算执行该任务所需的资源。

  2. AppMaster找Resour ceManager申请执行该计算任务所需的资源.

  3. Resour celManager接收到AppMaster的请求后,会找一些nodemanager,在其上创建一些Container资源容器, ”占用"资源,用于执行该计算任务,

  1. AppMaster会连接到nodemanager,从而找到这些Container资源容器.

  2. AppMaster会让计算任务在Container资源容器中执行,并实时监听它们(计算任务) 的状态,当MapTask任 务执行结束后,AppMaster 会通知ReduceTask开始执行,当ReduceTask执行结束后,整个计算任务就做完了。

  1. AppMaster会将该计算任务的结果返回给ResourceManager,并通知ResourceManager可以释放该计算任务的Container資源了,并启动自毁,至此,整个流程结束。

关键词: 请求,AppMaster,心跳,申请资源,Container资源容器, 实时监听,返回,自毁

问题6: 请简述你对Yarn的三种调度策略的理解?

答案: FIFO Scheduler: 先进先出调度器, 类似于: 单车道, 目前几乎不用. 优点: 每个计算任务都独享集群 100%的资源. 缺点: 当小任务前有大任务在执行时, 小任务可能迟迟无法执行结束, 必须等待大任务执行完毕.

Capacity Scheduler: 容量调度器, 类似于: 多车道. Apache Hadoop(社区版)默认用的调度策略. 优点:

  1. 支持多任务并行执行.

  2. 且支持资源借调. 缺点:

  3. 可能存在资源无法归还的情况.

  4. 存在资源浪费的情况, 即: 任务无法独享集群100%的资源.

Fair Scheduler: 公平调度器, 类似于: 潮汐车道.最早是由FaceBook研发的, 后续我们要用的 商业版Hadoop, Yarn的调度策略就是这一种. 优点:

  1. 支持多任务并行执行.

  2. 且支持资源借调. 当有第1个任务执行的时候, 它独占集群100%的资源, 当有第2个任务执行的时候, 它(第1个任务)会分一半的资源给到第2个任务. 第有第3个任务执行的时候, 会再分一半的资源出去, 即: 三个任务的资源使用率都是 33.333%... 缺点: 当有大量小任务执行的时候, 存在大任务迟迟无法执行结束的情况.

  3.