hadoop-yarn-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wangda Tan (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (YARN-4945) [Umbrella] Capacity Scheduler Preemption Within a queue
Date Thu, 08 Sep 2016 21:36:20 GMT

    [ https://issues.apache.org/jira/browse/YARN-4945?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15475092#comment-15475092
] 

Wangda Tan commented on YARN-4945:
----------------------------------

Thanks [~sunilg], 

Comments for v0:

*AbstractPreemptableResourceCalculator:*
- priorityBasedPolicy should not be a part of this class
- getMostUnderservedQueues/resetCapacity/isReservedPreemptionCandidatesSelector should be
private
- TAComparator, move to IntraQueueCalculator

*Configuration:*
- USED_CAPACITY_THRESHOLD_FOR_PREEMPTION, it should be something like MAX_IGNORED_OVER_CAPACITY_FOR_INTRA_QUEUE
for consistency? If you agree, all related fields, such as CapacitySchedulerPreemptionContext#getUsedCapThresholdForPreemptionPerQueue
should be updated.

*IntraQueuePreemptableResourceCalculator & IntraQueueCandidatesSelector:*

The biggest issue I can see is: the logic is incompleted for calculator: 
we should include all ideal-allocation/preemptable resource calculation in this class, I found
many of them are in PriorityIntraQueuePreemptionPolicy, such as: getResourceDemandFromAppsPerQueue.
In addition, the calculation of ideal-allocation & preemptable resource is also incomplete:
for the v0 patch, it computed resource-to-obtain for intra-queue preemption, and preempt from
the least straved app. This is not correct for future policies, for example, fairness policy
can have a minimum resource allocated to each application, existing logic will preempt all
containers from the application with maximum fair sharing.

So to make the logic to be complete, the IntraQueuePreemptableResourceCalculator should be:
1) Inter-queue preemptable resource will be calculated, it could be computed by IntraQueueCalculator
or previous calculator
2) In each leaf queue, according to intra-queue preemption quota and other queue status, such
as queue-policy, decide ideal-allocation and how much to preempt for each app
3) And we need to deduct selected resource for both queue/app (and even for user).

For example, preemptable resource calculation for priority will be:
{code} 
For each partition:

Q.unallocated = Q.used - Q.selected;

# initially, app.ideal = 0

# From highest priority to lowest priority app to calculate ideal
for app in sorted-by(priority):
    if Q.unallocated < 0:
        break;

	app.ideal = max(Q.unallocated, app.used + app.pending - app.selected)
	Q.unallocated -= app.ideal

# Intra queue preemptable quota
intra_q_preemptable = Q.maximum-preemptable - selected

# For lowest prioity to highest priority to calculate preemptable
for app in reserve-sorted-by(priority):
    if intra_q_preemptable < 0:
    	break;
    app.preemptable = min(max(app.used - app.selected - app.ideal, 0), intra_q_preemptable)
    intra_q_preemptable -= app.preemptable
{code}

Some additional notes for the pesudo code above:
- Fairness policy need different logic to calculate ideal and preemptable, which similar to
Algorithm 2 described in: https://www2.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-55.pdf
- If we need to consider user-limit, we should deduct user.selected as well

Responsibility of calculator should be 1)-3), after that, select will decide what to preempt
from each app. Of course, we will skip already selected containers while selecting intra-queue
to-preempt containers.

*Unit test*
I found the TestProportionalCapacityPreemptionPolicyForIntraQueue uses duplicated logic from
TestProportionalCapacityPreemptionPolicy, instead, could you take a look at ProportionalCapacityPreemptionPolicyMockFramework,
which is used by TestProportionalCapacityPreemptionPolicyForReservedContainers and TestProportionalCapacityPreemptionPolicyForNodePartitions.
You will be easily mock intra-queue preemption scenario with the new test framework.

> [Umbrella] Capacity Scheduler Preemption Within a queue
> -------------------------------------------------------
>
>                 Key: YARN-4945
>                 URL: https://issues.apache.org/jira/browse/YARN-4945
>             Project: Hadoop YARN
>          Issue Type: Bug
>            Reporter: Wangda Tan
>         Attachments: Intra-Queue Preemption Use Cases.pdf, IntraQueuepreemption-CapacityScheduler
(Design).pdf, YARN-2009-wip.2.patch, YARN-2009-wip.patch, YARN-2009-wip.v3.patch, YARN-2009.v0.patch
>
>
> This is umbrella ticket to track efforts of preemption within a queue to support features
like:
> YARN-2009. YARN-2113. YARN-4781.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: yarn-issues-help@hadoop.apache.org


Mime
View raw message