MapReduce与YARN高阶原理

1 MapReduce的执行流程!

分布式计算常见的两种模式:

分散汇总模式: 单个MapReduce任务就是分散汇总模式
中心调度分步执行模式: 多个MapReduce迭代计算并汇总模式

MapReduce的阶段划分

shuffle 阶段是从map阶段输出数据开始,到reduce阶段输入数据为止
在这里插入图片描述

1. 我们的MapReduce任务中有几个Maptask是由什么决定的呢??

开启任务后会根据split size 将文件拆分为多个部分放入maptask任务中, 默认情况下 split size 的大小和block size相同,所以有多少个bolck块就会产生多少个maptask任务.

2. 我们的map任务的数据结果会有多少个分区呢?

有多少个reducetask ,maptask中就会产生多少个分区
maptask先执行,那我们如何直到reducetask有几个呢?
在mr任务执行之前,先要制定执行计划, 这个叫做job

3. MapReduce任务执行完成后,会写入磁盘多少个数据文件呢?

有多少个reducetask,最终就会产生多少个文件,多个reducetask不能写入同一个文件中,但是可以迭代写入(多个MapReduce,一个写完另一个再写)

4. MapReduce计算引擎的缺点是什么?

在MapReduce计算过程中,多次进行了内存和磁盘的交互,所以计算效率较低,速度较慢
如果将中间结果全部基于内存存储,此时效率就会大大提高,这就算

5. MapReduce是一个失败的产品么?

1.频繁落盘可以在每一步都持久化保存数据,如果计算失败将会重新立即计算,安全性可靠性高
2.在磁盘中存储数据对于服务器性能不高,在大数据发展初期,计算机性能不佳,MR极大程度上解决了穷的问题
3.开辟了分布式的计算先河,现有的分布式计算框架基本上都是分而治之的思想,以及MapReduce的逻辑架构

6. MapReduce一共分为几个阶段?

- map阶段
- shuffle阶段
  - **shuffle是mr的核心,**成败都在于shuffle
  - shuffle阶段让程序员将精力全部放在业务代码上,不需要关注计算过程.大大降低了分布式计算的开发门槛,提高了开发效率
  - shuffle阶段中频繁在内存和磁盘中进行数据交互,大大降低了计算效率
- reduce阶段

7. shuffle阶段做了什么事情?

100分答案:
Collect阶段: 将MapTask的结果输出到默认大小为100M的环形缓冲区,保存的是key/value,Partition分区信息等(将key计算处hash值,根据哈希取余计算分区)
Spill阶段:当内存中的数据量达到一定的阀值(80%)的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序
Merge阶段:把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件
Copy阶段: ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据,这些数据默认会保存在内存的缓冲区中,当内存的缓冲区达到一定的阀值的时候,就会将数据写到磁盘之上
Merge阶段:在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作
Sort阶段:在对数据进行合并的同时,会进行排序操作,由于MapTask阶段已经对数据进行了局部的排序,ReduceTask只需保证Copy的数据的最终整体有效性即可。
80分答案: 分区, 排序, 合并

什么情况下需要配置combiner ??

reduce压力较大,或者有数据倾斜问题.

我们的任务执行顺序是先执行map任务,后执行reduce任务,为什么map的分区数,可以和reduce任务数量相同???

执行MapReduce任务之前先进行任务计划,生成job文件
job文件提交给ResourceManager,申请容器
我们此时就会将需要多少个map任务和多少个reduce任务规划好,并申请相对应的容器数量.

2 Yarn执行MapReduce的流程!

Yarn的角色分配
主角色: ResourceManager 负责资源的分配
从角色: NodeManager 负责资源的统计汇报和使用

**Yarn中的容器机制: **

  1. Yarn会将服务器中的资源大小不同的多个部分,称为容器
  2. Yarn中的容器机制其实就是在服务器中预先占用一部分内存和cpu资源,等待程序的运行
  3. 容器的管理和使用是由NodeManager完成的,但是会将容器信息汇报给ResourceManager,由其统一分配
  4. 容器中运行的程序无法突破容器的限制,使用容器限定资源之外的资源.

举例: 有三个容器 容器1 : 1G 容器2 : 2G 容器3: 4G

  1. 有一个任务需要申请200kb的计算资源,此时我们使用容器几??? 容器1
  2. 有一个任务需要申请3.5G的计算资源,此时我们使用容器几??? 容器3. 有一个任务需要申请6G计算资源,此时我们需要使用功能容器几??? 容器2 + 容器3

注意: 容器可以随时进行合并,但是拆分需要重新规划容器
yarn中执行mr任务流程

1. ApplicationMaster 做了哪些事情??

1.想ResourceManager注册自己并保持心跳
2.根据自身任务的需求,向 ResourceManager申请计算资源(容器:内存、CPU)
3.获取资源后,与对应的NodeManager建立连接保持心跳
4.待NodeManager开辟并启动容器后,将任务代码分发到每一个容器内部,并让NodeManager执行任务
5.任务启动后,监控任务的执行进度和执行状态
6.向client汇报当前任务的进度
7.任务执行完成后,向ResouceManager注销自己,并回收容器

2. 为什么Yarn能够作为公共分布式资源调度平台? 为什么Yarn可以兼容各种的计算框架?

  1. Yarn只负责资源分配,不处理任务执行,所以任务执行流程,原理,使用的方式方法和yarn没有任何关系
  2. 只要满足Yarn申请资源的逻辑,就可以获取内存和cpu资源
    • 计算任务中,必须有创建ApplicationMaster的代码,后续的计算流程完全由ApplicationMaster负责
      举例:
      公司招聘, 老板只负责分配公司的资源, 让各个员工做事,这个老板可以从事任何行业
      如果老板负责安排工作和公司资源分配,此时老板只能做自己会的事情

3. Yarn执行mr任务时,ResourceManager做了什么事情?

  1. 分配资源创建并执行ApplicationMaster
  2. 与ApplicationMaster保持心跳
  3. 根据ApplicationMaster的资源请求,分配对应的内存和cpu资源
  4. 注销ApplicationMaster之后回收容器
    本质上就做了两件事 : 分配资源 回收资源

3 Yarn的三大调度策略(理解优势)

先进先出调度器: 先进入调度器的任务先执行,占用全部的资源其他任务等待
公平调度器: 所有的任务平分资源,当任务执行完成后,将资源释放平分给正在执行的其他任务
容量调度器: 将资源分为多份,每份的资源比例不变,任务只能使用当前队列的资源不能使用全部资源

哪种调度策略更好呢?

先进先出肯定不好
公平调度,资源利用率最高,大任务的执行效率最高,但是不同部门之间开发时会抢占对方的计算资源
容量调度,不同部门分配不同的计算资源队列,互不影响,但是大任务执行时始终无法使用全部集群资源
没有最好的调度策略,根据不同的业务场景进行选择
Apache版本hadoop 默认的调度策略是容量调度
CDH版本hadoop 默认的调度策略是公平调度

打开8088端口,查看web页面上边书写了调度器类型:默认Capacity Scheduler容量调度器
查看调度器类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值