yarn的定义:
YARN 是一个通用的集群资源管理系统,它能够为运行在 Hadoop 集群上的各种应用程序(如 MapReduce、Spark、Flink 等)提供统一的资源调度和管理服务。它使得不同类型的计算框架可以共享集群资源,提高了资源的利用率和集群的灵活性
YARN 的架构主要由三个核心组件构成:
- ResourceManager(RM):它是整个集群的资源管理器,负责全局的资源分配和调度。它接收来自各个 NodeManager 的资源使用报告,并根据应用程序的资源需求进行合理分配。
- NodeManager(NM):它是每个节点上的代理,负责管理该节点上的资源使用情况和容器的生命周期。它会定期向 ResourceManager 汇报节点的资源使用情况,并根据 ResourceManager 的指令启动、监控和停止容器。
- ApplicationMaster(AM):每个应用程序都有一个对应的 ApplicationMaster,它负责与 ResourceManager 协商获取资源,并与 NodeManager 通信以启动和监控任务的执行。
主要作用
- 资源统一管理:YARN 可以对集群中的 CPU、内存等资源进行统一管理和分配,避免了不同计算框架之间的资源竞争和冲突。
- 支持多计算框架:它为不同的计算框架提供了一个通用的资源管理平台,使得多种计算框架可以在同一个集群上共存和运行,提高了集群的利用率和灵活性。
- 提高集群扩展性:通过将资源管理和计算框架分离,YARN 使得 Hadoop 集群可以更方便地进行扩展,支持更多的节点和应用程序。
1. 容量调度器(Capacity Scheduler)
- 核心原理:将集群资源划分为多个独立的队列,每个队列都有一定的资源容量,并且可以设置资源的最大和最小使用量。不同的队列可以分配给不同的用户组或应用程序类型,每个队列内部采用先进先出(FIFO)的调度方式。
- 优点
- 多租户支持:不同用户或用户组可以使用不同的队列,实现资源的隔离和共享,避免了单个用户或应用程序占用过多资源影响其他任务。
- 灵活性:可以根据业务需求动态调整队列的资源容量,以适应不同的工作负载。
- 缺点:当某个队列资源有剩余,而其他队列资源不足时,剩余资源不能被有效利用,可能导致资源浪费。
- 适用场景:适合多用户、多应用程序共享集群资源的场景,例如企业内部不同部门使用同一个 Hadoop 集群进行数据分析。
2. 公平调度器(Fair Scheduler)
- 核心原理:公平调度器的目标是在多个应用程序之间公平地分配资源。它会记录每个应用程序的资源使用情况,优先为资源使用较少的应用程序分配资源,以保证每个应用程序都能公平地获取资源。当新的应用程序提交时,会自动为其分配资源,并且随着时间的推移,各个应用程序会逐渐获得公平的资源份额。
- 优点
- 公平性:确保所有应用程序都能在合理的时间内获得资源,避免了某个应用程序长时间占用资源而导致其他应用程序等待。
- 动态调整:能够根据应用程序的运行情况动态调整资源分配,提高资源利用率。
- 缺点:调度算法相对复杂,可能会增加一定的调度开销。
- 适用场景:适合对公平性要求较高的场景,例如多个用户同时提交交互式查询任务的场景。
3. 先进先出调度器(FIFO Scheduler)
- 核心原理:按照应用程序提交的先后顺序依次调度,先提交的应用程序先获得资源并执行,直到该应用程序完成后,才会为下一个应用程序分配资源。
- 优点:调度算法简单,易于理解和实现,不需要复杂的资源管理和调度策略。
- 缺点:缺乏资源隔离和公平性,如果一个大的应用程序先提交,后续的小应用程序可能需要等待很长时间才能执行,导致资源利用率低下。
- 适用场景:适合单个用户或应用程序独占集群资源,或者对公平性要求不高的场景,例如在开发和测试环境中使用。