大数据相关学习 3.Yarn
在 MapReduce 应用程序的启动过程中,最重要的就是要把 MapReduce 程序分发到大数据集群的服务器上,在上文介绍的 Hadoop 1 中,这个过程主要是通过 TaskTracker 和 JobTracker 通信来完成。早期服务器集群资源调度管理和 MapReduce 执行过程耦合在一起,如果想在集群中运行其他计算任务,比如 Spark,就无法统一使用集群中的资源。于是Hadoop2 做了一个大变更:把 MapReduce 的资源管理和计算框架分开,将 Yarn 从 MapReduce 中分离出来,成为一个独立的资源调度框架。为了实现解耦,需要原JobTracker 的功能进行拆分,全局资源管理能力拆给ResourceManager,单个应用程序管理的职责交给了 ApplicationMaster。

图片来源:极客时间
从图上看,Yarn 包括两个部分:一个是资源管理器(ResourceManager),一个是节点管理器(NodeManager)。这是 Yarn 的两种主要进程:ResourceManager 进程负责整个集群的资源调度管理,通常部署在独立的服务器上;NodeManager 进程负责具体服务器上的资源和任务管理,在集群的每一台计算服务器上都会启动。在部署特辑里,集群成功启动后,在每台机器上jps 就可以看到节点的部署情况。
一个应用在 YARN 上的典型生命周期:
- 应用提交:客户端向 RM 提交应用程序。
- AM 容器分配:RM 为应用程序分配第一个 Container,并与对应的 NM 通信,要求它在这个 Container 中启动该应用的 ApplicationMaster。
- AM 注册与资源申请:AM 向 RM 注册,然后根据任务需求(如需要启动多少个 Map Task)周期性地向 RM 申请资源。
- 启动任务容器:AM 拿到 RM 分配的 Container 后,与对应的 NM 通信,要求它启动具体的任务(如一个 Map Task)。
- 进度监控与完成:运行中的任务通过 AM 汇报进度。应用完成后,AM 向 RM 注销并关闭自己。
从生命周期可以看到,每个AM都会去申请资源,当有多个租户都使用一个集群时,不同租户之间怎么实现资源的互不干扰,这是Yarn 资源隔离要解决的首要问题。
ARN的资源隔离主要通过以下三个层次协同工作:
资源调度(逻辑隔离)
由RM 完成。RM 是集群资源的全局仲裁者,它通过可插拔的调度器(如容量调度器 Capacity Scheduler或公平调度器 Fair Scheduler)将集群资源划分为多个逻辑队列。
- 队列划分:管理员可以按团队、项目或应用类型创建队列(如
root.production.etl,root.research.ad_hoc),并为每个队列分配固定的资源容量(capacity)或权重(weight),以及设置最大资源使用上限(maximum-capacity)。 - 多资源类型调度:先进的调度器(如支持主导资源公平算法 DRF 的公平调度器)能同时考虑 CPU、内存等多种资源类型,更智能地实现公平分配。
容器运行时隔离(物理隔离)
- 这是最关键的环节,在各个NM上执行。当 RM 分配资源后,NM 负责在物理节点上启动和管理 Container,并为每个 Container 提供资源隔离的执行环境。YARN 对不同类型的资源采用了不同的隔离策略,具体对比如下:
|
内存 |
关键性资源,不足直接导致进程死亡 |
进程树监控 (默认) + Cgroups (可选) | - 进程树监控:NM 周期性监控 Container 进程树的内存使用总量。若超过设定上限,则终止容器。为避免 Java 进程 "fork()+exec()" 模型因写时复制导致子进程启动瞬间内存虚高而误杀,YARN 引入了"进程年龄"概念进行判断优化。 - Cgroups 内存子系统:可配置使用 Cgroups 的 memory.limit_in_bytes设置硬性上限,超限会触发内核 OOM Killer 终止容器。这种方式更严格,但缺少对"fork()+exec()"场景的优化,可能因启动峰值导致误杀。 |
|
CPU |
弹性资源,不足通常导致任务变慢 |
Cgroups (主要方式) | - 份额分配 (cpu.shares):通过设置相对权重(如1024表示1个CPU核心的份额)来分配CPU时间。这是一种弹性限制,允许容器在节点CPU空闲时使用超出其份额的资源,保证公平的同时提高利用率。 - 绝对限制 (cpu.cfs_quota_us/period_us):可硬性限制容器在特定周期内能使用的最大CPU时间,确保严格的上限。 |
|
I/O (磁盘与网络) |
隔离最复杂 |
Cgroups (blkio, net_prio 子系统) | 相对于CPU和内存,I/O资源的隔离在YARN中更为复杂且仍在不断改进。YARN仿照"虚拟CPU"的概念引入了"虚拟磁盘"进行资源量化,并初步尝试使用Cgroups的blkio等子系统实现磁盘I/O隔离。 |
安全与访问控制
这一层确保资源不被未授权访问。
更多推荐
所有评论(0)