Yarn体系架构详解:资源调度与高效管理

需积分: 9 0 下载量 132 浏览量 更新于2024-07-16 收藏 5.71MB PPTX 举报
Yarn体系架构与资源调度模型是Hadoop生态系统中的关键组件,旨在提供高效、可靠和安全的分布式资源管理和任务调度服务。在Apache Hadoop 3版本中,YARN(Yet Another Resource Negotiator)取代了先前的MapReduce框架,作为数据处理平台的核心组件。本文档将深入探讨Yarn的主要组成部分、工作原理和调度机制。 首先,Yarn的体系架构主要包括以下几个关键角色: 1. **ResourceManager (RM)**: 是Yarn的中心管理器,负责整个集群的资源管理和协调。它由Scheduler和ApplicationsManager组成: - Scheduler: 负责资源分配策略,根据任务需求和系统负载动态调度资源。 - ApplicationsManager: 管理用户提交的应用程序,包括资源请求、任务调度和监控。 2. **NodeManager (NM)**: 每个节点上的代理,负责管理本节点的计算资源和运行的Containers(即分配给应用程序的资源单元)。NodeManager定期向ResourceManager汇报资源使用情况和Container状态,并响应ApplicationMaster的指令。 3. **ApplicationMaster (AM)**: 是特定应用的实例,它代表用户作业向RM申请资源,并与NodeManager交互以执行和监控作业的子任务。 4. **Container**: 在Yarn中,每个任务都被分配一个Container,用于承载和隔离应用执行所需的资源,如内存和CPU。 在Yarn的任务调度过程中,以下步骤描述了核心流程: - **客户端提交作业**:用户通过客户端(例如Hadoop命令行工具)提交作业,这个过程涉及向RM申请一个新的application。 - **RM响应**:RM为作业分配一个资源提交路径和application_id,指示客户端将作业资源上传至指定位置。 - **资源提交**:客户端将作业所需的资源(如jar文件、配置文件等)上传到指定的资源提交路径,并启动MRAppMaster容器。 - **任务调度**:RM将用户请求打包成Job,放入队列进行调度,选择合适的NodeManager创建Container来运行AM。 - **执行与监控**:AM在运行的Container中执行任务,同时与NodeManager通信以监控任务的进度和状态。 Yarn的调度策略通常基于公平或容量优先原则,可以根据不同的应用场景灵活调整。通过缓存下载的依赖包和并行下载,Yarn能够显著提升资源利用效率和作业安装速度,从而实现更高效的集群性能。此外,Yarn的监控功能有助于确保系统的稳定性和可用性,通过对资源使用情况的实时跟踪,可以及时发现并解决问题。 Yarn的体系架构和资源调度模型是Hadoop平台的重要支柱,通过合理的设计和优化,它能支持大规模、分布式的工作负载,提高了大数据处理的灵活性和效率。

[2023-07-04 17:11:29.952]Exception when trying to cleanup container container_e10_1661450914423_18596_01_000003: java.io.IOException: Problem signalling container 97181 with SIGTERM; output: null and exitCode: -1 at org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor.signalContainer(LinuxContainerExecutor.java:750) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.sendSignal(ContainerLaunch.java:908) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.signalProcess(ContainerLaunch.java:922) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.cleanupContainer(ContainerLaunch.java:774) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainersLauncher.handle(ContainersLauncher.java:173) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainersLauncher.handle(ContainersLauncher.java:62) at org.apache.hadoop.yarn.event.AsyncDispatcher.dispatch(AsyncDispatcher.java:221) at org.apache.hadoop.yarn.event.AsyncDispatcher$1.run(AsyncDispatcher.java:143) at java.lang.Thread.run(Thread.java:748) Caused by: org.apache.hadoop.yarn.server.nodemanager.containermanager.runtime.ContainerExecutionException: Signal container failed at org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.runtime.DefaultLinuxContainerRuntime.signalContainer(DefaultLinuxContainerRuntime.java:163) at org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.runtime.DelegatingLinuxContainerRuntime.signalContainer(DelegatingLinuxContainerRuntime.java:159) at org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor.signalContainer(LinuxContainerExecutor.java:739) ... 8 more | org.apache.flink.yarn.YarnResourceManager (ResourceManager.java:822)

2023-07-12 上传