我在YARN中使用容量调度程序,我发现用户可以通过使用属性' yarn minimum-user-limit-来获得队列的最小百分比。百分比&#39 ;.我将此属性设置为20,我期望的是资源最多可以分配给5个用户,根据这个:
但是当用户启动runnig应用程序时并非如此。例如,如果我在队列空闲时运行应用程序,YARN会为该应用程序分配所有请求的资源。当另一个用户之后运行相同的应用程序时,YARN会分配与队列中剩余的资源一样多的资源,并且队列将被填满。此时,我认为对于属性,第二个用户将获得50%的队列,而第一个用户将拥有更少的资源。
如果第三个用户进来,我希望他/她能获得33%的队列,但YARN甚至没有安排申请,因为没有可用的资源。
我错过了什么吗?我认为这个参数使得请求独立于可用资源,直到它达到每个用户的最小百分比。
这是我的yarn-site.xml和capacity-scheduler.xml:
纱-site.xml中
<configuration>
<property>
<name>yarn.acl.enable</name>
<value>true</value>
</property>
<property>
<name>yarn.admin.acl</name>
<value>*</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoopLogin:8032</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoopLogin:8033</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoopLogin:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoopLogin:8031</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoopLogin:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>hadoopLogin:8090</value>
</property>
<property>
<name>yarn.resourcemanager.client.thread-count</name>
<value>50</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.client.thread-count</name>
<value>50</value>
</property>
<property>
<name>yarn.resourcemanager.admin.client.thread-count</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.increment-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>14336</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.increment-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>32</value>
</property>
<property>
<name>yarn.resourcemanager.amliveliness-monitor.interval-ms</name>
<value>1000</value>
</property>
<property>
<name>yarn.am.liveness-monitor.expiry-interval-ms</name>
<value>600000</value>
</property>
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>2</value>
</property>
<property>
<name>yarn.resourcemanager.container.liveness-monitor.interval-ms</name>
<value>600000</value>
</property>
<property>
<name>yarn.resourcemanager.nm.liveness-monitor.interval-ms</name>
<value>1000</value>
</property>
<property>
<name>yarn.nm.liveness-monitor.expiry-interval-ms</name>
<value>600000</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.client.thread-count</name>
<value>50</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
yarn.scheduler.fair.user-作为默认队列 真正 yarn.scheduler.fair.preemption 假 yarn.scheduler.fair.sizebasedweight 假 yarn.scheduler.fair.assignmultiple 假 yarn.resourcemanager.max完成的应用程序 10000 yarn.nodemanager.aux服务 spark_shuffle yarn.nodemanager.aux-services.spark_shuffle.class org.apache.spark.network.yarn.YarnShuffleService
能力scheduler.xml
yarn.scheduler.capacity.root.queues 批,笔记本电脑 控制台和批处理作业(批处理)和笔记本作业(笔记本)队列的定义
yarn.scheduler.capacity.root.batch.capacity 50 root.batch队列的容量百分比
yarn.scheduler.capacity.root.notebook.capacity 50 root.notebook队列的容量百分比
yarn.scheduler.capacity.root.batch.maximum容量 55 root.batch队列的最大容量百分比
yarn.scheduler.capacity.root.notebook.maximum容量 55 root.notebook队列的最大容量百分比
yarn.scheduler.capacity.root.batch.state RUNNING root.batch提示的当前状态
yarn.scheduler.capacity.root.notebook.state RUNNING root.notebook提示的当前状态
yarn.scheduler.capacity.root.acl_submit_applications Hadoop的,纱,mapred,HDFS,火花 谁可以将作业提交到根队列的ACL。
yarn.scheduler.capacity.root.batch.acl_submit_applications scienceUser1 root,gaia,ub,ucm,uac,udc,esac,upo,une,inaf 谁可以将作业提交到root.batch队列的ACL。
yarn.scheduler.capacity.root.notebook.acl_submit_applications * root,gaia,ub,ucm,uac,udc,esac,upo,une,inaf 谁可以将作业提交到root.notebook队列的ACL。
yarn.scheduler.capacity.root.batch.acl_administer_queue 盖亚 谁可以将作业管理到root.batch队列的ACL。
yarn.scheduler.capacity.root.notebook.acl_administer_queue 盖亚 谁可以将作业管理到root.notebook队列的ACL。
yarn.scheduler.capacity.root.acl_administer_queue 盖亚 谁可以管理根队列上的作业的ACL。
yarn.scheduler.capacity.root.acl_administer_queue 盖亚 谁可以管理根队列上的作业的ACL。
yarn.scheduler.capacity.root.acl_administer_queue 盖亚 谁可以管理根队列上的作业的ACL。
yarn.scheduler.capacity.root.batch.acl_administer_queue 盖亚 谁可以管理批处理队列上的作业的ACL。
yarn.scheduler.capacity.root.notebook.acl_administer_queue 盖亚 谁可以在笔记本队列上管理作业的ACL。
yarn.scheduler.capacity.resource计算器 org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
yarn.scheduler.capacity.root.notebook.minimum用户限制%的 33 用户从队列中获取的资源的最小百分比。
答案 0 :(得分:0)
如果您尚未启用抢占功能,那么您所看到的行为是正确的。
在您的yarn-site.xml中查找yarn.resourcemanager.scheduler.monitor.enable
等于true
,看看您是否已启用它。
如果您尚未启用它,请参阅以下内容获取指导:
答案 1 :(得分:0)
实际上,这不是应该处理最小用户限制的方法。假设您有100 GB,并且有4个用户。公平地说,每个人最多可以使用25GB。但是,如果明天有100位用户进入该怎么办?在这种情况下,平均分配最终将为每个用户提供1GB。现在,考虑到每个进程最终都将耗尽资源并可能导致性能下降的情况,我们可能不想发生这种情况。因此,在这里我们通过将参数minimum-user-limit指定为25%来限制自己。这意味着每个用户可能会获得最少25GB的空间,如果有更多用户,它将进入接受状态。所以现在如果有1个用户进入,则可以达到100GB。 2个用户每个人最多可以占用50GB。 3位用户最多可以占用33 GB,4位用户最多可以占用25GB。但是,如果有第5个用户进入。第5个用户将被送入等待状态,因为不能将每个用户分配给20 GB,因为我们将限制设置为25%(100 GB),即25 GB。附言:这是我的理解。如果有人发现这是错误的,请发表评论。确实有点令人困惑。 现在在您的方案中,假设前两个用户占用了全部资源。这种情况与此不同。 25%限制仅表示您只能在纱线中至少有25%可以分配给您时才能输入。为了确保两个用户不占用全部资源,可以使用user-limit-factor进行调整。如果设置为.2,则每个用户所占的比例不能超过20%。