Hadoop YARN:资源调度与架构解析

需积分: 10 0 下载量 5 浏览量 更新于2024-08-05 收藏 26KB MD 举报
"本文介绍了Hadoop中的YARN(Yet Another Resource Negotiator)系统,这是一个资源管理框架,用于协调集群中的计算资源。YARN的核心组件包括ResourceManager、NodeManager、ApplicationMaster和Container,它们共同协作以实现高效的分布式计算。" 在YARN中,ResourceManager (RM) 是整个系统的中心管理者,它的主要职责包括接收客户端的请求,监控所有NodeManager的状态,启动或监控ApplicationMaster,并根据策略进行资源的分配与调度。RM确保了集群资源的有效利用和公平分配。 NodeManager (NM) 在每个节点上运行,负责管理该节点的计算资源。NM执行的任务包括响应ResourceManager的指令,处理ApplicationMaster的请求,并管理该节点上Container的生命周期。NodeManager监控节点的资源使用情况,保证任务的正常执行。 ApplicationMaster (AM) 是每个应用程序的控制器,它的主要任务是为应用程序申请所需的资源(如内存、CPU等),并把这些资源分配给内部的任务。同时,AM还负责监控任务的执行状态,如果发现任务失败,它会进行故障恢复。 Container 是YARN中的资源抽象单位,它代表了节点上的一组资源集合,包括内存、CPU、磁盘空间和网络带宽等。当ApplicationMaster获取到资源后,它会将这些资源分配给各个任务以执行具体的计算工作。 YARN的工作机制可以概括为以下步骤: 1. MapReduce程序通过YarnRunner在客户端节点上提交。 2. YarnRunner向ResourceManager申请启动一个新的Application。 3. RM回应应用程序的资源路径,允许YarnRunner提交必要的资源文件。 4. 完成资源提交后,YarnRunner请求启动MrAppMaster。 5. ResourceManager接收请求并初始化一个Task。 6. NodeManager从ResourceManager那里领取Task任务,并分配一个Container来执行这个任务。 7. Task的相关资源被下载到NodeManager的本地。 8. NodeManager在分配的Container中启动并执行任务。 通过这种机制,YARN能够有效地支持各种计算框架,如MapReduce、Spark等,提供了统一的资源管理和调度,使得Hadoop集群的资源利用率更高,提高了整体的系统效率。同时,YARN的这种设计也使得应用程序和资源管理分离,促进了计算框架的创新和发展。

[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 上传