When submitting spark application(both spark-on-yarn-cluster and spark-on-yarn-cleint model), the queue's usedResources assigned by fairscheduler always can be more than the queue's maxResources limit.
And by reading codes of fairscheduler, I suppose this issue happened because of ignore to check the request resources when assign Container.
Here is the detail:
1. choose a queue. In this process, it will check if queue's usedResource is bigger than its max, with assignContainerPreCheck.
2. then choose a app in the certain queue.
3. then choose a container. And here is the question, there is no check whether this container would make the queue sources over its max limit. If a queue's usedResource is 13G, the maxResource limit is 16G, then a container which asking for 4G resources may be assigned successful.
This problem will always happen in spark application, cause we can ask for different container resources in different applications.
By the way, I have already use the patch from YARN-2083.