
如何编写YARN应用程序
发布日期:2021-05-27 02:54:36
浏览次数:37
分类:精选文章
本文共 1448 字,大约阅读时间需要 4 分钟。
YARN是一项业界广泛使用的资源管理平台,主要用于统一管理Hadoop集群中的计算资源。在开发新的YARN应用程序时,通常需要构建两种关键组件:客户端(Client)和ApplicationMaster。这些组件负责与ResourceManager交互,完成任务启动、资源管理及故障恢复等功能。由于涉及的 RPC通信和集群管理逻辑较为复杂,ApplicationMaster的实现往往需要开发人员投入较多精力。
本文将介绍如何构建一个基础的YARN ApplicationMaster,以支持通用型应用程序。这将涉及双方的组件交互机制和相关 RPC 协议的实现。
YARN ApplicationMaster 的 RPC 协议
在实现 YARN ApplicationMaster 时,主要涉及以下三个 RPC 协议:
ClientRMProtocol(Client ↔ ResourceManager)
gióProgClient通过该协议向 ResourceManager 提交应用程序请求,包括启动 ApplicationMaster 和查询应用状态。AMRMProtocol(ApplicationMaster ↔ ResourceManager)
ApplicationMaster 使用此协议与 ResourceManager 注册并申请资源,实现任务提交和资源管理。ContainerManager(ApplicationMaster ↔ NodeManager)
ApplicationMaster 与 NodeManager 通话,启动或终止 Container,并查询运行状态。ApplicationMaster 编写流程
开发 ApplicationMaster 可分为以下几个步骤:
注册(Register)
应用程序启动后,ApplicationMaster 需向 ResourceManager 注册。该步骤需传递节点信息、RPC端口及任务跟踪地址等细节。申请资源(Allocate)
根据任务需求,ApplicationMaster 向 ResourceManager 请求所需的 Container。每个 Container 定义包括:- Hostname:指定或为任意节点。
- 资源配备:内存或其他资源需求。
- 优先级:确定任务执行顺序。
- 数量:指定需要的容器数目。
- 释放策略:跳过历史失败节点。
启动 Container(Start Container)
ResourceManager 提交 ContainerLaunchContext,包括启动命令、环境变量、依赖文件等,经过 NodeManager 执行。任务监控与重试
ApplicationMaster 会持续追踪容器状态,定期重新申请资源以应对失败任务,避免资源闲置。实施注意事项
- 周期性心跳检查:ApplicationMaster 必须定期发送心跳信号,以维持与 ResourceManager 的连接卡住。若无响应(10分钟默认超时),会触发重新调度或失败处理。
- 资源管理灵活性:ApplicationMaster 应根据任务执行进度、资源使用情况及错误率调整资源申请策略。
通过以上流程,可以有效编写一个兼顾高容错性和高性能的 YARN ApplicationMaster。本文后续将探讨具体实现细节及 YARN 官方提供的实现案例,如 MapReduce 的 MRAppMaster。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月09日 04时35分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
重置UAG Application admin密码
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
Linux kernel pwn --- CSAW2015 StringIPC
2019-03-12
IDEA 找不到 Persistence窗口解决办法
2019-03-12
Form窗体属性
2019-03-12
vue 错误收集
2019-03-12
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
2019-03-12
00013.05 字符串比较
2019-03-12
Effective Java 读书笔记
2019-03-12
SpringBoot使用@Email报错误
2019-03-13
访问servlet时弹出文件下载框解决方法
2019-03-13
IDEA-@Slf4j和log标签&@Data(Lombok)无效
2019-03-13
Thymeleaf 生成下标,索引,使用Stat变量
2019-03-13
初始微服务---Springcloud发展【第一期】
2019-03-13
RAFT 拜占庭将军 共识算法
2019-03-13
UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
2019-03-13