Java 纱线中每次应用的同时运行的容器数量限制

Java 纱线中每次应用的同时运行的容器数量限制,java,hadoop,scheduling,distributed-computing,yarn,Java,Hadoop,Scheduling,Distributed Computing,Yarn,假设一个应用程序有长时间运行的任务(运行1小时或更长时间)。当MR作业启动时,所有集群资源都会被阻塞,至少在一个容器完成之前是如此,这有时可能需要很长时间 有没有办法限制同时运行的容器的数量?与此相关的内容,例如map.vcores.max(每纳米或全局)。因此,其他应用程序不会被阻止 有什么想法吗 ps.Hadoop 2.3.0据我所知,您不能直接限制容器的数量。这只取决于资源。因此,您最好是限制每个应用程序的资源 根据您的申请,您可以将您的申请分配到特殊队列。在这种情况下,您可以接收非常接近

假设一个应用程序有长时间运行的任务(运行1小时或更长时间)。当MR作业启动时,所有集群资源都会被阻塞,至少在一个容器完成之前是如此,这有时可能需要很长时间

有没有办法限制同时运行的容器的数量?与此相关的内容,例如map.vcores.max(每纳米或全局)。因此,其他应用程序不会被阻止

有什么想法吗


ps.Hadoop 2.3.0

据我所知,您不能直接限制容器的数量。这只取决于资源。因此,您最好是限制每个应用程序的资源

根据您的申请,您可以将您的申请分配到特殊队列。在这种情况下,您可以接收非常接近您的任务的配置,因为您可以限制每个队列的内存或核心资源


也许您可以切换到不同的计划程序,甚至可以实现自定义计划程序,但我不喜欢这种方式,因为这样做会使您脱离经过良好测试的环境,我认为您真的不需要像自定义实现那样做太多工作。

如果您使用的是资源池,您可以限制在单个池中同时运行的应用程序的数量。虽然这不是你想要的,但它可能会被证明是有用的

如果您正在使用Cloudera Manager,请查看动态资源池配置。

如果没有,结帐


它描述了Thread.scheduler.capacity..最大应用程序数

此行为/功能可以按框架级别处理,而不是按Thread处理。

在Mapreduce中,
Mapreduce.job.running.map.limit
Mapreduce.job.running.reduce.limit
可用于限制同时运行的容器。

在Tez中,可以使用属性
Tez.am.vertex.max task concurrency

相关Jira-


谢谢。我希望有比设置额外队列更简单的方法,但看起来这是它能得到的最简单的方法。顺便说一句,在某些情况下,可能值得实现简单的调度程序逻辑,并对现有逻辑进行最小的扩展。从一开始我对它不是很乐观,但现在我有点怀疑。另外,如果你使用Spark,你应该将FIFO设置为订购策略,这样驱动程序+工作程序将一起运行(否则,你可能会有大量Spark驱动程序容器等待工作程序容器…)注意,这也限制了待处理的应用程序,所以,如果您设置的值很小,那么如果提交的应用程序太多,可能会出现一些问题,这些应用程序应该排队。我花了好几天的时间来查找此参数。谢谢你的帮助