1. 理解YARN:大数据时代的资源调度中枢
第一次接触YARN是在2015年处理电商平台用户行为日志时。当时我们的MapReduce作业频繁出现资源争抢,整个集群效率低下。直到将Hadoop 1.0升级到2.x版本引入YARN后,集群资源利用率直接从40%提升到75%以上。这种质的飞跃让我意识到,要真正玩转大数据,必须吃透YARN这套资源管理系统。
YARN(Yet Another Resource Negotiator)不是简单的升级,而是Hadoop架构的一次革命。在传统MapReduce架构中,JobTracker既要管作业调度又要管资源分配,这种"大包大揽"的设计导致扩展性差、资源利用率低。YARN通过将这两大功能解耦,实现了真正的分布式资源管理。
举个生活中的例子:旧架构就像一个小餐馆,老板既要接单又要炒菜;而YARN架构则像现代化餐厅,前台接待(ResourceManager)、后厨调度(NodeManager)、服务员(ApplicationMaster)各司其职。这种专业化分工让系统能轻松应对高峰期的客流(大数据作业)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. YARN架构深度解析
2.1 核心组件协作机制
YARN采用主从架构,主要包含三个核心组件:
-
ResourceManager(RM):集群资源的最高仲裁者,包含:
- Scheduler:纯调度器,只负责分配资源
- ApplicationsManager:负责接收作业提交、协调执行
-
NodeManager(NM):每个节点上的"工头",负责:
- 容器(Container)生命周期管理
- 监控资源使用情况(CPU、内存等)
- 向RM汇报心跳和资源状态
-
ApplicationMaster(AM):每个应用特有的"项目经理",负责:
- 向RM申请资源
- 与NM协作启动/监控任务
- 容错处理
java复制// 典型YARN应用提交代码片段
Configuration conf = new YarnConfiguration();
YarnClient yarnClient = YarnClient.createYarnClient();
yarnClient.init(conf);
yarnClient.start();
ApplicationSubmissionContext appContext = yarnClient
.createApplication()
.getApplicationSubmissionContext();
appContext.setApplicationName("My-YARN-App");
2.2 资源请求与分配流程
- 客户端提交应用到RM
- RM分配第一个Container给AM
- AM向RM注册并定期发送心跳
- AM根据需求发送资源请求(ResourceRequest)
- RM的Scheduler分配资源
- AM在NM上启动任务
- 任务执行期间AM监控状态
- 任务完成后AM注销退出
关键点:YARN采用pull-based模型,AM主动请求资源而非被动分配,这种设计大幅提升了灵活性。
2.3 资源模型详解
YARN使用[memory,vcores]二维资源模型:
- 内存:物理内存+虚拟内存限制
- vcores:虚拟CPU核数,不绑定物理核心
配置示例(yarn-site.xml):
xml复制<property>
<name>yarn
