CapacityScheduler
CapacityScheduler ,它是Hadoop的可插拔调度程序,它允许多租户安全地共享大型集群,以便在分配的限制容量下及时分配资源。
概观
CapacityScheduler设计用于以操作友好的方式将Hadoop应用程序作为多租户共享的群集来运行,同时最大限度地提高群集的吞吐量和利用率。
传统上,每个组织都拥有自己的一组计算资源,这些计算资源具有足够的能力来满足组织在峰值或接近峰值条件下的SLA。每个组织一个集群,这通常导致管理多个独立群集的平时利用率较低。 在组织之间共享集群是安装运行大型Hadoop集群的具有成本效益的方式,因为这样可以在不创建私有集群的情况下获得规模经济效益。但是,组织关心共享集群的安全问题,因为他们担心其他人使用对SLA至关重要的资源。
CapacityScheduler旨在允许共享大型群集,同时为每个组织提供容量保证。 核心思想是,Hadoop集群中的可用资源在多个组织之间共享,这些组织根据其计算需求共同为集群提供储备。 还有一个额外的好处,一个组织可以访问任何多余的不被他人使用的计算力。 这为组织提供了具有成本效益的弹性。
跨组织共享集群需要对多租户进行强有力的支持,因为每个组织必须保证容量和安全保护,以确保共享集群不受单个流氓应用程序或用户或其集合的影响。 CapacityScheduler提供了一组严格的限制,以确保单个应用程序或用户或队列不会消耗群集中不成比例的资源。 此外, CapacityScheduler还为来自单个用户和队列的初始化和待处理应用程序提供限制,以确保集群的公平性和稳定性。
CapacityScheduler提供的主要抽象是队列的概念。 这些队列通常由管理员设置以反映共享群集的经济性(性价比)。
为了对共享资源提供进一步的控制和可预测性, CapacityScheduler支持分层队列,以确保在其他队列被允许使用空闲资源之前,资源在组织的子队列之间共享,从而提供近似情况(affinity )以共享应用程序间的空闲资源给定的组织。
特征
CapacityScheduler支持以下功能:
- Hierarchical Queues(分层队列) - 支持队列层次结构,以确保在其他队列被允许使用空闲资源之前资源在组织的子队列之间共享,从而提供更多的控制和可预测性。
- Capacity Guarantees(容量保证) - 队列被分配一部分网格容量,因为一定容量的资源将由他们支配。 所有提交给队列的应用程序都可以访问分配给队列的容量。 管理员可以对分配给每个队列的容量配置软限制和可选硬限制。
- Security(安全性) - 每个队列都有严格的ACL控制哪些用户可以将应用程序提交到单个队列。 此外,还有一些安全措施可以确保用户无法查看和修改其他用户的应用程序。 此外,还支持每个队列和系统管理员规则。
- Elasticity (弹性) - 免费资源可以分配给超出其容量的任何队列。 当未来某个时间点的容量低于这个容量的队列需要这些资源时,当这些资源上的任务完成时,它们将被分配到低于容量的队列中的应用程序(也支持抢占)。 这确保资源以可预测的和弹性的方式提供给队列,从而防止集群中资源的人为孤岛。
- Multi-tenancy(多租户) - 提供了一套全面的限制,以防止单个应用程序、用户或队列独占整个队列或群集的资源,以确保群集不会崩溃。
- Operability(可操作性)
- 运行时配置 - 管理员可以在运行时以安全的方式更改队列定义和属性(如容量,ACL),以最大限度地减少对用户的干扰。 此外,还为用户和管理员提供了一个控制台,用于查看当前系统中各个队列的资源分配情况。 管理员可以在运行时添加额外的队列 ,但在运行时不能删除队列。
- 排空应用程序 - 管理员可以在运行时停止队列,以确保当现有的应用程序运行完成时,不会提交新的应用程序。 如果队列处于“ 已停止”状态,则不能将新应用程序提交给自己(root)或其任何子队列 。 现有的应用程序将继续完成,因此队列可以正常排空 。 管理员也可以启动已停止的队列。
- Resource-based Scheduling(基于资源的调度) - 支持资源密集型应用程序,其中应用程序可以选择指定比默认更高的资源需求,从而适应具有不同资源需求的应用程序。 目前, 内存是支持的资源最需要的。
- Queue Mapping based on User or Group(基于用户或组的队列映射) - 此功能允许用户将作业映射到基于用户或组的特定队列。
- Priority Scheduling(优先级调度) - 该功能允许应用程序以不同的优先级进行提交和调度。 应用程序的优先级越高,整数值越大。 目前应用程序优先级仅支持FIFO分类策略。
配置
设置ResourceManager以使用CapacityScheduler
要配置ResourceManager以使用CapacityScheduler ,请在conf / yarn-site.xml中设置以下属性:
<property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property>
设置队列
etc/hadoop/capacity-scheduler.xml是CapacityScheduler的配置文件。
CapacityScheduler具有一个名为root的预定义队列。 系统中的所有队列都是根(root)队列的子项。
进一步的队列设置可以通过配置yarn.scheduler.capacity.root.queues和逗号分隔的子队列列表。
CapacityScheduler的配置使用一项称为队列路径(queue path)的概念来配置队列的层次结构。 队列路径是队列的层次结构的完整路径,从根开始。 (点)作为分隔符。
一个给定队列的子节点可以用配置旋钮(configuration knob)来定义: yarn.scheduler.capacity.<queue-path> .queues 。 除非另有说明,子节点不直接从父节点继承属性。
下面是一个例子(三个顶级子级队列a 、b和c,以及a和b的一些子队列)
<property> <name>yarn.scheduler.capacity.root.queues</name> <value>a,b,c</value> <description>The queues at the this level (root is the root queue). </description> </property> <property> <name>yarn.scheduler.capacity.root.a.queues</name> <value>a1,a2</value> <description>The queues at the this level (root is the root queue). </description> </property> <property> <name>yarn.scheduler.capacity.root.b.queues</name> <value>b1,b2,b3</value> <description>The queues at the this level (root is the root queue). </description> </property>
文章评论