假设纱线应用程序具有长时间运行的任务(运行1小时或更长时间)。当MR作业启动时,所有群集资源都被阻止,至少在一个容器完成之前,有时可能需要很长时间。
有没有办法限制同时运行的容器数量?有些东西,例如。 map.vcores.max (每个NM或全局)。所以其他应用程序没有被阻止。
有什么想法吗?
PS。 Hadoop 2.3.0
答案 0 :(得分:2)
据我所知,您无法直接限制容器数量。这仅由资源决定。因此,您可以做的最好是限制每个应用程序的资源。
根据Fair scheduler documentation,您可以将应用程序分配给特殊队列。在这种情况下,您可以接收与您的任务非常接近的配置 - 因为您可以限制每个队列的内存或核心资源。
也许您可以切换到不同的计划程序,甚至可以实现自定义程序,但我不喜欢这样做,因为这样做,你走出了经过充分测试的环境,我认为你真的不需要这样做很多像自定义实现的工作。
答案 1 :(得分:1)
此行为/功能可以按框架级别而不是YARN进行处理。
在Mapreduce中,/usr/lib
和mapreduce.job.running.map.limit
可用于限制同时运行的容器。
在Tez中,可以使用属性mapreduce.job.running.reduce.limit
相关Jira -
https://issues.apache.org/jira/browse/MAPREDUCE-5583
https://issues.apache.org/jira/browse/TEZ-2914
答案 2 :(得分:0)
如果使用资源池,则可以限制在单个池中同时运行的应用程序数。虽然这不是你要求的,但它可能证明是有用的。
如果您使用的是Cloudera Manager,请查看动态资源池配置。
描述了yarn.scheduler.capacity..maximum-applications