假设一个应用程序有长时间运行的任务(运行1小时或更长时间)。当mr作业启动时,所有集群资源都被阻塞,至少在一个容器完成之前是这样,这有时可能需要很长时间。有没有办法限制同时运行的容器的数量?类似的东西,例如map.vcores.max(每nm或全局)。因此其他应用程序不会被阻止。有什么想法吗?ps.hadoop 2.3.0版
gkl3eglg1#
据我所知,你们不能直接限制集装箱的数量。这只是由资源决定的。因此,您所能做的就是限制每个应用程序的资源。根据fair scheduler文档,您可以将应用程序分配到特殊队列。在这种情况下,您可以接收非常接近您的任务的配置—因为您可以限制每个队列的内存或核心资源。也许你可以切换到不同的调度器,甚至实现自定义的一个,但我不喜欢这样做,因为这样做你走出了良好的测试环境,我不认为你真的需要做这么多的工作,像自定义实现。
c6ubokkw2#
如果使用的是资源池,则可以限制在单个池中同时运行的应用程序的数量。虽然这不完全是你所要求的,但它可能会被证明是有用的。如果您使用的是cloudera manager,请查看动态资源池配置。如果没有,结帐http://docs.hortonworks.com/hdpdocuments/hdp2/hdp-2.1.3/bk_system-admin-guide/content/setting_application_limits.html它描述了yarn.scheduler.capacity..maximum应用程序
vhipe2zx3#
这种行为/特性可以按框架级别处理,而不是按Yarn处理。在mapreduce中, mapreduce.job.running.map.limit 以及 mapreduce.job.running.reduce.limit 可用于限制同时运行的容器。在tez中,可以使用属性 tez.am.vertex.max-task-concurrency 相关jira-https://issues.apache.org/jira/browse/mapreduce-5583https://issues.apache.org/jira/browse/tez-2914
mapreduce.job.running.map.limit
mapreduce.job.running.reduce.limit
tez.am.vertex.max-task-concurrency
3条答案
按热度按时间gkl3eglg1#
据我所知,你们不能直接限制集装箱的数量。这只是由资源决定的。因此,您所能做的就是限制每个应用程序的资源。
根据fair scheduler文档,您可以将应用程序分配到特殊队列。在这种情况下,您可以接收非常接近您的任务的配置—因为您可以限制每个队列的内存或核心资源。
也许你可以切换到不同的调度器,甚至实现自定义的一个,但我不喜欢这样做,因为这样做你走出了良好的测试环境,我不认为你真的需要做这么多的工作,像自定义实现。
c6ubokkw2#
如果使用的是资源池,则可以限制在单个池中同时运行的应用程序的数量。虽然这不完全是你所要求的,但它可能会被证明是有用的。
如果您使用的是cloudera manager,请查看动态资源池配置。
如果没有,结帐http://docs.hortonworks.com/hdpdocuments/hdp2/hdp-2.1.3/bk_system-admin-guide/content/setting_application_limits.html
它描述了yarn.scheduler.capacity..maximum应用程序
vhipe2zx3#
这种行为/特性可以按框架级别处理,而不是按Yarn处理。
在mapreduce中,
mapreduce.job.running.map.limit
以及mapreduce.job.running.reduce.limit
可用于限制同时运行的容器。在tez中,可以使用属性
tez.am.vertex.max-task-concurrency
相关jira-https://issues.apache.org/jira/browse/mapreduce-5583
https://issues.apache.org/jira/browse/tez-2914