我一直在尝试使用YARNs资源队列来控制争用,通过在任何给定时间控制作业数量(我只有MR作业,没有其他YARN应用程序)。我的情况是 -
我有一项服务接受用户的请求并运行一些报告(作为MR作业)。这些工作有时会耗费时间,而在高峰时段,这些工作会争夺资源,而太多的共享意味着没有一份工作能够取得体面的进展。我正在尝试最小化在任何给定时间可以在队列上运行的报告的数量。
我可以通过将队列的最大运行应用程序设置为所需的值来完成此部分操作。现在,我可以将MR应用程序/作业提交到群集,并且只在任何给定时间运行(比如说'n')作业。现在,问题是,没有办法抢占同一队列中的任务(或者我不知道一个)。我希望能够以这样一种方式向这个队列提交作业,当有一个作业时,它占据了所有队列,当有2个作业时,第一个作业的某些任务被杀死,两个作业都相同资源和第三项工作来进一步划分资源等(基本上是FairShareScheduler处理抢占的方式,但在一个队列而不是多个队列中)。
这可能吗?我现在只有一个用户(我的服务)提交作业。我可以将我的服务的用户传播到集群(我不喜欢,但如果没有其他的话可以这样做),以便根据用户创建子队列。但后来我不知道如何获得我想要的行为,因为有很多用户,我不知道如何在不知道队列名称(将在作业提交时创建)的情况下为每个队列设置限制(权重) 。
提前感谢您的帮助。
答案 0 :(得分:1)
我发现无法在同一队列中抢占容器。我在妥协中工作。