[ https://issues.apache.org/jira/browse/YARN-2592?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14146728#comment-14146728 ]
Carlo Curino commented on YARN-2592: ------------------------------------ Preemption is trying to enforce the scheduler invariants. One of which is how over-capacity is distributed among queues (weighted fairly on rightful capacity). I understand the desire to "protect" individual containers, and there will be many specific examples we can come up with in which killing a container is a pity as it loses some work (unless it handles the preemption message correctly and checkpoint its state), but long term I think enforcing the invariants is more important (fair and predictable for users). The opposite argument one can make is "why is queue B allowed to retain more over capacity than A?" if this happens systematically or for long period of time is unnerving for users as much as some lost work. Also note that preemption already has few built-in mechanisms (deadzones, and grace-periods) designed to limit the impact on running tasks, are we sure that proper tuning of capacity/max-capcity/dead-zones/grace-periods is not enough to remove 99% of the problem? This would be only an issue for long-running tasks (exceeding 2x the grace periods), when run above the capacity + dead-zone of a queue but within max-capacity. And only trigger, for a queue that is more over capacity than any other peer queue, when the peer queue also has over-capacity needs exceeding free space, AND no under-capacity queue is demanding the same resources.... we should make sure this is significant enough of a scenario in practice to justify complexity of new configurables. I am definitely opposed to make this the default behavior, but I agree with Jason that we could add config parameters that allow to prevent preemption for over-capacity balancing. I feel though this is a slippery slope, which I think might lead to many loopholes (protecting AM being another one), that eventually will make configuring preemption and understanding what is happening for the users very hard. I think promoting proper handling of preemption on the app side (i.e., checkpoint your state, or redistributed your computation) is overall a healthier direction. My 2 cents.. > Preemption can kill containers to fulfil need of already over-capacity queue. > ----------------------------------------------------------------------------- > > Key: YARN-2592 > URL: https://issues.apache.org/jira/browse/YARN-2592 > Project: Hadoop YARN > Issue Type: Bug > Affects Versions: 3.0.0, 2.5.1 > Reporter: Eric Payne > > There are scenarios in which one over-capacity queue can cause preemption of > another over-capacity queue. However, since killing containers may lose work, > it doesn't make sense to me to kill containers to feed an already > over-capacity queue. > Consider the following: > {code} > root has A,B,C, total capacity = 90 > A.guaranteed = 30, A.pending = 5, A.current = 40 > B.guaranteed = 30, B.pending = 0, B.current = 50 > C.guaranteed = 30, C.pending = 0, C.current = 0 > {code} > In this case, the queue preemption monitor will kill 5 resources from queue B > so that queue A can pick them up, even though queue A is already over its > capacity. This could lose any work that those containers in B had already > done. > Is there a use case for this behavior? It seems to me that if a queue is > already over its capacity, it shouldn't destroy the work of other queues. If > the over-capacity queue needs more resources, that seems to be a problem that > should be solved by increasing its guarantee. -- This message was sent by Atlassian JIRA (v6.3.4#6332)