Yarn架构原理


在Hadoop2.x中,为了解决Hadoop1.x的JobTracker存在的问题(可参考https://blog.csdn.net/qq_37865420/article/details/106441382),特别引进了一个牛逼的资源调度框架——Yarn


1:模型

1.1:container容器

1.1.1:抽象理解

可以理解成一个对象,它的属性有
- 是属于那个NodeManager的
- cpu多少
- 内存mem多少
- io量多少

1.1.2:物理上理解

  • 可以是一个JVM进程---->操作系统进程
  • NodeManager会有线程监控Container资源情况,使用超额后,NodeManager直接kill掉。任务失败会重试,会在其他container中进行任务执行,但是可能申请的container太小,无论挪到哪里都会超额,所以有失败重试次数的限制。最终导致client返回失败,所以写代码,上传任务时要配置好
  • 还有种方式使用cgroup的内核技术,在启动jvm进程的时候,由内核kernel约束死,所以这个JVM进程只能使用一个定值的空间,这样就不用上面说到的线程监控了
  • *也可以整合docker

1.2:实现的架构/框架

1.2.1:角色进程

  • ResourceManager 主节点
    • 负责整体资源的管理
  • NodeManager 从节点
    • 向ResourceManager汇报心跳,提交自己的资源情况
      在这里插入图片描述

1.2.2:框架流程解析

MR运行
在这里插入图片描述

  1. MR-Client(切片清单、配置、jar上传到HDFS),之后client访问RM申请AppMaster
  2. RM选择一台不忙的节点通知NM启动一个Container,在里面反射一个MRAppMaster这个类
  3. 启动MRAppMaster,从HDFS下载切片清单,向RM申请资源
  4. 由RM根据自己掌握的资源情况得到一个确定清单,通知NM来启动container
  5. container启动后会反向注册到已经启动的MRAppMaster进程中去
  6. MRAppMaster(其实就是曾经的JobTracker的阉割版,他没有了资源管理的作用)最终将任务发送给container(其实发送的是一个消息,启动mapper还是启动reducer)
  7. container会反射发送过来的消息里相应的Task类(xxxMapper或者xxxReducer)为对象,调用方法执行,其结果及时我们的业务逻辑代码的执行
  8. 计算框架都有Task失败重试的机制

对比我之前的MR那篇文章,提出的对于hadoop1.x中jobTracker的三个弊端问题,yarn是怎么解决的呢?
三个问题可以查看我之前的文章
https://blog.csdn.net/qq_37865420/article/details/106441382

  • JobTracker单点故障(曾经的JobTracker是全局的,JT挂了,整个计算层都没有了调度了)
    yarn:每一个Application由一个自己的AppMaster调度(是计算程序级别的调度,不是全局的调度)
    如果调度失败,yarn还支持AppMaster失败重试~!
  • JobTracker压力过大
    yarn中每个计算程序自有AppMaster,每个AppMaster只负责自己计算程序的任务调度,轻量化了AppMaster。AppMaster是在不同的节点中启动的,默认有了负载的作用
  • JobTracker集成了【资源管理】【任务调度】,两者耦合度高
    因为Yarn只是资源管理,不负责具体的任务调度
    是公立的,只要计算框架继承yarn的AppMaster,大家都可以使用一个统一视图的资源层~~!

感悟

从1.x—>2.x
JT、TT是MR的常服务。。。。
2.x之后没有了这些服务
相对的:MR的调度(AppMaster)是临时服务了

猜你喜欢

转载自blog.csdn.net/qq_37865420/article/details/106444009
今日推荐