一、YARN概述
1. 定义与定位
  • YARNApache Hadoop 2.x引入的集群资源管理系统,是Hadoop的核心组件之一。
  • 设计目标:将Hadoop 1.xMapReduce的资源调度与作业执行分离,支持多计算框架(如Spark、Flink、Storm)共享集群资源。
  • 核心优势
    • 资源隔离:通过容器(Container)实现资源隔离,避免不同应用互相影响。
    • 多框架支持:统一管理集群资源,支持MapReduce、Spark、Flink等计算框架。
    • 高扩展性:支持动态扩展节点,理论上可管理上万节点的集群。
2. 基本概念
  • 资源抽象YARNCPU、内存等资源抽象为"容器"(Container),每个Container包含固定的CPU和内存资源。
  • 应用程序:用户提交的计算任务(如Spark作业、MapReduce作业)。
  • 应用Master:每个应用程序的管理者,负责向ResourceManager申请资源并调度任务。
  • 调度策略:支持容量调度(Capacity Scheduler)、公平调度(Fair Scheduler)等多种策略。
二、YARN架构与组件
1. 核心组件
Client → ResourceManager → ApplicationMaster → NodeManager → Container
  • ResourceManager (RM)

    • 全局资源调度器:负责整个集群的资源分配和调度,维护集群可用资源和分配状态。
    • 两个核心服务
      • Scheduler:纯调度器,根据调度策略分配资源,不负责应用程序监控和状态跟踪。
      • ApplicationsManager:接收应用程序提交请求,为应用分配初始Container并启动ApplicationMaster
  • NodeManager (NM)

    • 节点代理:管理单个节点上的资源和Container生命周期。
    • 功能
      • 启动和监控Container,汇报资源使用情况给ResourceManager
      • 执行Container的启动、停止和资源隔离(通过Linux cgroups实现)。
  • ApplicationMaster (AM)

    • 应用程序管理者:每个应用程序(如Spark作业)有独立的AM,负责该应用的资源申请和任务调度。
    • 功能
      • ResourceManager注册并申请资源(Container)。
      • NodeManager通信,启动和监控任务执行。
      • 跟踪应用程序状态,向ResourceManager汇报进度。
  • Client

    • 用户接口:提交应用程序、查询应用状态、终止应用等。
    • 示例工具yarn application -listyarn application -kill
2. 资源抽象与容器
  • Container
    • YARN的资源分配基本单位,包含固定的CPU(以vCore为单位)和内存(MB)。
    • NodeManager管理,运行在单个节点上,支持资源隔离和监控。
  • 资源请求模型
    • AMRM请求特定数量、特定位置(如节点或机架)的Container
    • RM根据调度策略分配ContainerAM与对应NodeManager通信启动任务。
三、YARN工作流程
1. 应用程序提交流程
  1. Client提交应用
    • ClientResourceManager提交应用程序,包括ApplicationMaster的启动命令、资源需求(如内存、CPU)。
  2. ResourceManager分配初始Container
    • ResourceManager为应用程序分配第一个Container,并通知对应的NodeManager启动ApplicationMaster
  3. ApplicationMaster注册与资源申请
    • AM启动后向ResourceManager注册,开始为应用程序的任务申请资源(Container)。
  4. 资源分配与任务执行
    • ResourceManager根据调度策略为AM分配ContainerAMNodeManager发送任务启动命令。
  5. 任务监控与完成
    • AM监控所有任务执行状态,任务完成后向ResourceManager注销并释放资源。
2. 资源调度流程
  1. 资源汇报NodeManager定期向ResourceManager汇报节点资源使用情况和健康状态。
  2. 资源请求AMResourceManager发送资源请求(包含优先级、数量、位置偏好等)。
  3. 资源分配ResourceManagerScheduler根据调度策略(如容量调度、公平调度)分配ContainerAM
  4. 任务执行AMNodeManager通信,在分配的Container中启动任务。
四、YARN调度器与调度策略
1. 主要调度器类型
  • FIFO Scheduler

    • 先进先出队列,按提交顺序调度应用程序。
    • 缺点:长任务会阻塞后续短任务,不适合多用户共享集群。
  • Capacity Scheduler

    • 多队列分层调度:将集群资源划分为多个队列(如prod、dev、test),每个队列有固定容量。
    • 资源弹性:当某个队列资源空闲时,可借给其他队列使用,提高资源利用率。
    • 应用场景:适合多租户、多部门的生产环境,保证每个队列最低资源。
  • Fair Scheduler

    • 公平共享资源:基于应用程序的资源需求和历史使用情况动态分配资源。
    • 抢占机制:当高优先级应用需要资源时,可抢占低优先级应用的资源。
    • 应用场景:适合交互式作业和批处理作业混合的场景,保证小作业快速响应。
2. 调度器配置与选择
调度器 优点 缺点 适用场景
FIFO 简单易配置 不支持多队列 单用户、单队列场景
Capacity 支持多队列、资源隔离 资源分配不够灵活 多租户、资源隔离要求高
Fair 公平共享、支持抢占 配置复杂 交互式和批处理混合场景
五、YARN高级特性
1. 资源类型扩展
  • 默认资源类型CPU(vCore)和内存(MB)。
  • 扩展资源类型
    • 通过yarn.nodemanager.resource-plugins配置,支持GPU、磁盘I/O等资源类型。
    • 应用场景:AI训练任务需要精确分配GPU资源。
2. 容器预热(Container Warmup)
  • 目标:减少频繁启动Container的开销(如JVM预热时间)。
  • 机制
    • 预先启动"热容器"(Warm Container),任务需要时直接使用。
    • 通过yarn.nodemanager.container-executor.class配置支持容器重用。
3. 服务发现与应用生命周期管理
  • 服务发现
    • AM注册服务信息到ResourceManager,客户端可查询服务地址。
    • 结合ZooKeeper实现高可用的服务注册与发现。
  • 应用生命周期管理
    • 支持应用程序的暂停、恢复、弹性扩缩容(如动态调整Spark Executor数量)。
4. 节点标签与资源分区
  • 节点标签:为NodeManager打标签(如"high-memory"、"gpu"),将集群划分为不同资源组。
  • 资源分区
    • 通过yarn.scheduler.capacity.root.queues配置,将特定队列绑定到特定标签的节点。
    • 应用场景:隔离关键任务与普通任务,避免互相影响。
六、YARN性能优化
1. 关键配置参数
参数名 描述 默认值
yarn.nodemanager.resource.memory-mb 单个NodeManager可用总内存 8192MB
yarn.nodemanager.resource.cpu-vcores 单个NodeManager可用CPU核数 8
yarn.scheduler.minimum-allocation-mb 最小Container内存分配 1024MB
yarn.scheduler.maximum-allocation-mb 最大Container内存分配 8192MB
yarn.nodemanager.vmem-pmem-ratio 虚拟内存与物理内存比例 2.1
yarn.log-aggregation-enable 是否启用日志聚合 false
2. 性能调优策略
  • 资源分配优化
    • 根据应用需求调整Container大小,避免资源浪费(如小任务使用大Container)。
    • 启用yarn.scheduler.increment-allocation-mb支持细粒度资源分配。
  • 调度器优化
    • 对于短任务占主导的场景,使用Fair Scheduler并配置fair-scheduler.xmlminSharePreemptionTimeout
    • 对于长任务占主导的场景,使用Capacity Scheduler并设置合理的队列容量。
  • NodeManager配置
    • 调整yarn.nodemanager.pmem-check-enabledyarn.nodemanager.vmem-check-enabled关闭内存检查(适用于内存使用波动大的应用)。
    • 增加yarn.nodemanager.resource.cpu-vcores提高CPU利用率。
  • 日志聚合
    • 启用yarn.log-aggregation-enableContainer日志集中存储到HDFS,便于后续分析和清理。
七、YARN与其他组件的集成
  • MapReduce:默认运行在YARN上,MR AppMaster负责调度MapReduce任务。
  • Spark
    • 通过spark-submit --master yarnSpark作业提交到YARN集群。
    • Spark ApplicationMaster动态申请资源,支持yarn-clientyarn-cluster两种模式。
  • Flink
    • Flink作业通过YARN模式运行时,JobManager作为ApplicationMasterTaskManager运行在Container中。
    • 支持会话模式(Session Cluster)和单作业模式(Per-Job Cluster)。
  • HBase
    • HBase RegionServer可运行在YARN管理的Container中,实现资源统一管理。
    • 通过hbase-site.xml配置hbase.regionserver.hostname0.0.0.0启用YARN模式。
八、YARN监控与故障排查
1. 监控工具
  • ResourceManager Web UI
    • 默认地址:http://rm-host:8088,查看集群资源使用、应用状态等。
  • NodeManager Web UI
    • 默认地址:http://nm-host:8042,查看节点资源使用、Container运行情况。
  • 命令行工具
    • yarn application -list:查看所有应用程序。
    • yarn node -list:查看节点状态。
    • yarn logs -applicationId <appId>:查看应用日志。
2. 常见问题与解决
  • 资源不足
    • 现象:应用程序长时间等待资源。
    • 解决:增加集群节点、调整调度器配置、优化应用资源请求。
  • Container频繁失败
    • 原因:内存溢出、资源竞争、节点故障等。
    • 解决:增加Container内存、检查节点健康状态、调整资源隔离参数。
  • 调度性能瓶颈
    • 现象ResourceManager CPU使用率高,调度延迟大。
    • 解决:升级硬件、调整调度器参数(如yarn.scheduler.capacity.maximum-applications)。
九、YARN安全机制
1. 认证与授权
  • Kerberos认证
    • 启用Kerberos后,所有组件(RM、NM、AM)通过Kerberos票据进行身份验证。
    • 配置core-site.xmlyarn-site.xml中的hadoop.security.authenticationkerberos
  • ACL(访问控制列表)
    • 通过yarn.admin.acl配置管理员权限,通过队列配置文件设置队列访问权限。
    • 限制用户对特定队列的提交和查看权限。
2. 数据安全
  • Credential分发
    • 敏感信息(如数据库密码)通过Credentials对象加密传输,避免明文传递。
    • AMResourceManager获取安全令牌,用于访问HDFS等服务。
  • 容器隔离
    • 通过Linux cgroups实现Container间的资源隔离,防止相互干扰。
    • 配置yarn.nodemanager.container-executor.classDockerContainerExecutor支持Docker容器隔离。
十、YARN的演进与未来方向
1. 最新特性(Hadoop 3.x)
  • 改进的ResourceManager HA
    • 支持基于ZooKeeper的自动故障转移,减少人工干预。
  • 动态资源分配增强
    • 支持更细粒度的资源调整,如动态调整Container内存。
  • 异构资源支持
    • 原生支持GPU、FPGA等特殊硬件资源的调度和管理。
2. 未来方向
  • 云原生集成
    • 与Kubernetes深度集成,支持混合部署(如部分工作负载在YARN上,部分在K8s上)。
  • AI工作负载优化
    • 增强对TensorFlow、PyTorch等AI框架的资源调度支持,优化GPU利用率。
  • 轻量级调度框架
    • 开发更轻量级的调度器(如Apache Mesos、Kubernetes),满足多样化场景需求。
十一、YARN典型应用场景
  • 多框架资源共享:在同一集群上运行MapReduce、Spark、Flink等不同计算框架。
  • 多租户环境:通过容量调度器或公平调度器,为不同部门或用户分配专用资源。
  • 资源隔离与优先级:关键任务优先执行,普通任务使用空闲资源,避免互相影响。
  • 弹性计算:根据业务负载动态调整资源分配,如白天运行实时任务,夜间运行批处理。
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐