在Hadoop YARN中容器Container是YARN用来运行应用程序的抽象单位。YARN调度器Scheduler负责为应用程序分配资源包括CPU、内存等以运行这些容器。以下是YARN调度器如何分配容器的几个关键步骤1. 资源请求当应用程序提交到YARN时它首先需要一个资源请求。这个请求包含了应用程序运行所需的资源量如内存大小和CPU核心数。例如一个MapReduce作业可能会请求每个任务Task1GB的内存和1个CPU核心。2. 容量调度器Capacity Scheduler在Hadoop YARN中有两种主要的调度器‌容量调度器Capacity Scheduler‌这是默认的调度器它允许多个用户或队列共享集群资源但每个队列的资源使用量被限制在一个预设的范围内。‌公平调度器Fair Scheduler‌它为每个提交的应用程序提供公平的资源分配确保所有应用程序都能获得大致相等的资源份额。3. 资源分配调度器根据资源的可用性和应用程序的资源请求来分配容器。例如如果容量调度器正在运行它会检查每个队列的容量限制并尝试为每个队列分配不超过其限制的容器。4. 容器启动一旦资源被分配NodeManagerNM就会启动容器来运行应用程序的一部分。每个容器都是一个独立的JVM进程它由YARN ResourceManagerRM管理。5. 监控和回收YARN ResourceManager监控所有容器的运行状态。如果容器因为某种原因失败如节点故障、内存溢出等ResourceManager会尝试重新启动容器或将任务调度到其他节点上。此外ResourceManager还会根据集群的健康状况和性能指标动态调整资源分配。配置示例容量调度器配置示例capacity-scheduler.xmlconfiguration property nameyarn.scheduler.capacity.maximum-am-resource-percent/name value0.1/value /property property nameyarn.scheduler.capacity.root.queues/name valuedefault,bigdata/value /property property nameyarn.scheduler.capacity.root.bigdata.capacity/name value30/value /property property nameyarn.scheduler.capacity.root.default.capacity/name value70/value /property /configuration在这个配置中bigdata队列被分配了30%的集群资源而default队列则被分配了70%。6. 调整和优化根据实际使用情况和性能需求可以调整YARN的配置参数如队列的容量、最大应用程序资源比例等以优化资源使用和任务执行效率。通过以上步骤和配置YARN调度器能够有效地管理和分配集群资源确保各种作业能够在Hadoop集群上高效运行。