目录
前言
什么是资源?
计算机硬件环境, 例如: CPU, 内存, 磁盘等...
什么是资源调度?
指的是当系统繁忙的时候, 如果有多个程序申请分配资源等, 如何进行资源划分, 分配, 如何最大化实现资源利用率, 就是资源调度做的事儿.
简单来说: 资源调度就是提高资源利用率的, 核心是: 调度策略, 调度算法.
一、Yarn简介
Yarn属于Hadoop组件的一部分, 是: 大数据分布式任务接收 和 资源调度器. 负责资源接收 和 任务调度的.
细节: Yarn负责计算任务的资源调度, 至于是什么计算任务(例如: MR任务, Spark任务, Flink任务), Yarn根本不关心, 只要符合Yarn规范即可.
二、Yarn架构介绍
ResourceManager:
1. 负责管理整个Yarn集群(的资源).
2. 负责任务的接收.
3. 负责资源的调度.
NodeManager:
1. 负责管理本机的资源,用Container资源容器的方式管理(类似于: 圈地, 开房间, 集装箱).
2. 负责具体任务的执行.
AppMaster:
1个计算任务 = 1个AppMaster进程(Application Master, 应用程序管理者)
由该AppMaster进程来管理该计算任务, 包括该计算任务的监控, 协调, 申请资源等 一系列操作.
三、Yarn调度job的流程
1. 客户端请求ResourceManager节点, 执行具体的计算任务.
2. ResourceManager接收到客户端请求后, 会找一台机器(nodemanager)创建1个AppMaster进程, 负责管理该具体的计算任务.
3. AppMaster进程 要和 ResourceManager建立心跳机制, 并通过心跳包的方式, 获取该计算任务的具体信息.
4. AppMaster进程 找 ResourceManager申请执行该计算任务的所需资源, 如果不能分配所有, 则至少获取执行MapTask任务所需资源, 否则就一直申请.
5. ResourceManager会找一些nodemanager, 在其中创建Container资源容器, 给该计算任务执行用.
6. AppMaster会连接到这些资源容器所在的nodemanager, 从而找到这些资源容器(Container)
7. 在资源容器中执行具体的计算任务即可, 整个过程由AppMaster进程来监控 和 管理, 如需资源, AppMaster会继续向ResourceManager申请. 并获取该计算任务的执行结果.
8. MR任务执行结束后, AppMaster进程会将该计算任务的结果返回给ResourceManager, 并告知其可以回收该计算任务的Container资源容器了.然后AppMaster进程会启动自毁程序, 至此, Yarn执行流程结束.
四、Yarn的三大调度策略
FIFO Scheduler: 先进先出调度器, 这种方式现在几乎已经不用了.
优点:
每个计算任务, 可以独占集群100%资源.
缺点:
1. 单线程的方式执行的, 如果前边阻塞了, 后续计算任务都需等待.
2. 无法并行同时执行多个计算任务.
3. 如果小任务前有大量的大任务, 则这个小任务需要等待大任务执行完毕后, 才能执行.
Capacity Scheduler: 容量调度器, 社区版Hadoop(Apache Hadoop)版默认的
优点:
1. 可以多线程, 并行的执行多个计算任务.
2. 允许资源借调.
缺点:
1. 可能存在资源无法归还的情况.
2. 可能存在无法利用所有资源的情况, 即: 资源浪费.
Fair Scheduler: 公平调度器, 商业版(Cloudera Hadoop)默认的.
优点:
1. 根据情况, 自动分配资源, 实现资源最大化利用.
即: 假设只有1个计算任务, 它会独占100%, 当又来1个计算任务, 它会分区一半的资源, 给到这个计算任务, 公平调度.
2. 可以多线程, 并行的执行多个计算任务.
缺点:
如果小任务过多, 可能出现大任务迟迟无法执行结束的情况.
总结
Hadoop框架中的Yarn(Yet Another Resource Negotiator)是用于集群资源管理和作业调度的核心组件。它的主要功能包括以下几个方面:
-
资源管理:Yarn负责整个Hadoop集群的资源管理,包括内存、CPU等资源的分配与调度。它能够有效地管理集群中的资源,以便多个应用程序可以共享集群资源而不会相互干扰。
-
作业调度:Yarn可以对提交的作业进行调度,确保作业能够按照合适的顺序和优先级执行,以提高整个集群的利用率和作业的执行效率。
-
容器化任务执行:Yarn引入了容器的概念,每个应用程序可以申请一个或多个容器来运行其任务,这样可以更好地隔离不同应用程序的计算任务,提高集群的安全性和稳定性。
-
支持多种应用模型:Yarn设计之初就考虑到了多种应用程序模型的支持,比如传统的MapReduce作业、Apache Spark、Flink等新兴的大数据处理框架,使得Hadoop集群可以更加灵活地应对不同类型的计算需求。
-
横向扩展性:通过Yarn,Hadoop集群可以很容易地进行横向扩展,增加更多的计算节点,以满足不断增长的数据处理需求。
总的来说,Yarn作为Hadoop框架的核心组件,在实现集群资源管理和作业调度方面发挥着关键作用,使得Hadoop集群可以更高效地运行各种计算任务,并且具备良好的可扩展性和灵活性。