教培参考
教育培训行业知识型媒体
发布时间: 2024年11月25日 07:15
容量调度器的介绍
容量调度器使得Hadoop应用能够共享的、多用户的、操作简便的运行在集群上,同时最大化集群的吞吐量和利用率。
容量调度器以队列为单位划分资源,每个队列都有资源使用的下限和上限。每个用户可以设定资源使用上限。管理员可以约束单个队列、用户或作业的资源使用。支持作业优先级,但不支持资源抢占。
容量调度器的特点
容量保证:管理员可为每个队列设置资源最低保证和资源使用上限,所有提交到该队列的应用程序共享这些资源。
灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,当该队列有新的应用程序提交,则其他队列释放的资源会归还给该队列。
支持优先级:队列支持任务优先级调度(默认是FIFO)。
多重租赁:支持多用户共享集群和多应用程序同时运行。为防止单个应用程序、用户或者队列独占集群资源,管理员可为之增加多重约束。
动态更新配置文件:管理员可根据需要动态修改配置参数,以实现在线集群管理。
容量调度器的任务选择
调度时,首先按以下策略选择一个合适队列:
资源利用量最低的队列优先,比如同级的两个队列Q1和Q2,它们的容量均为30,而Q1已使用10,Q2已使用12,则会优先将资源分配给Q1。
最小队列层级优先,例如:QueueA与QueueB.childQueueB,则QueueA优先。
资源回收请求队列优先。
然后按以下策略选择该队列中一个任务:
按照任务优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。
队列的创建是在多租户页面,当创建一个租户关联YARN服务时,会创建同名的队列。比如先创建QueueA,QueueB两个租户,即对应YARN两个队列。
队列的资源容量(百分比),有default、QueueA、QueueB三个队列,每个队列都有一个[队列名].capacity配置:
Default队列容量为整个集群资源的20%。
QueueA队列容量为整个集群资源的10%。
QueueB队列容量为整个集群资源的10%,后台有一个影子队列root-default使队列之和达到100%。
共享空闲资源
由于存在资源共享,因此一个队列使用的资源可能超过其容量(例如QueueA.capacity),而最大资源使用量可通过参数限制。
如果某个队列任务较少,可将剩余资源共享给其他队列,例如QueueA的maximum-capacity配置为100,假设当前只有QueueA在运行任务,理论上QueueA可以占用整个集群100%的资源。
用户限制
每个用户最低资源保障(百分比):
任何时刻,一个队列中每个用户可使用的资源量均有一定的限制,当一个队列中同时运行多个用户的任务时,每个用户的可使用资源量在一个最小值与最大值之间浮动,其中,最大值取决于正在运行的任务数目,而最小值则由minimum-user-limit-percent决定。
例如,设置队列A的这个值为25,即Yarn.scheduler.capacity.root.QueueA.minimum-user-limit-percent=25,那么随着提任务的用户增加,队列资源的调整如下:
每个用户最多可使用的资源量(所在队列容量的倍数):
queue容量的倍数,用来设置一个user可以获取更多的资源。Yarn.scheduler.capacity.root.QueueD.user-limit-factor=1。默认值为1,表示一个user获取的资源容量不能超过queue配置的capacity,无论集群有多少空闲资源,最多不超过maximum-capacity。
最大活跃任务数:
整个集群中允许的最大活跃任务数,包括运行或挂起状态的所有任务,当提交的任务申请数据达到限制以后,新提交的任务将会被拒绝。默认值10000。
每个队列最大任务数:
对于每个队列,可以提交的最大任务数,以QueueA为例,可以在队列配置页面配置,默认是1000,即此队列允许最多1000个活跃任务。
每个用户可以提交的最大任务数:
这个数值依赖每个队列最大任务数。根据上面的数据,QueueA最多可以提交1000个任务,那么对于每个用户而言,可以向QueueA提交的最大任务数为1000* 用户最低资源保障率(假设25%)* 用户可使用队列资源的倍数(假设1)。