blob: 44137e3042c6de08ccf395545409582ae7832e97 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_292) on Tue Jun 15 06:12:11 GMT 2021 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PlanFollower (Apache Hadoop YARN ResourceManager 3.3.1 API)</title>
<meta name="date" content="2021-06-15">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="PlanFollower (Apache Hadoop YARN ResourceManager 3.3.1 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/PlanFollower.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanEdit.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationAllocation.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanFollower.html" target="_top">Frames</a></li>
<li><a href="PlanFollower.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.hadoop.yarn.server.resourcemanager.reservation</div>
<h2 title="Interface PlanFollower" class="title">Interface PlanFollower</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/AbstractSchedulerPlanFollower.html" title="class in org.apache.hadoop.yarn.server.resourcemanager.reservation">AbstractSchedulerPlanFollower</a>, <a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/CapacitySchedulerPlanFollower.html" title="class in org.apache.hadoop.yarn.server.resourcemanager.reservation">CapacitySchedulerPlanFollower</a>, <a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/FairSchedulerPlanFollower.html" title="class in org.apache.hadoop.yarn.server.resourcemanager.reservation">FairSchedulerPlanFollower</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">PlanFollower</span>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
<div class="block">A PlanFollower is a component that runs on a timer, and synchronizes the
underlying <a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/scheduler/ResourceScheduler.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.scheduler"><code>ResourceScheduler</code></a> with the <a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation"><code>Plan</code></a>(s) and viceversa.
While different implementations might operate differently, the key idea is to
map the current allocation of resources for each active reservation in the
plan(s), to a corresponding notion in the underlying scheduler (e.g., tuning
capacity of queues, set pool weights, or tweak application priorities). The
goal is to affect the dynamic allocation of resources done by the scheduler
so that the jobs obtain access to resources in a way that is consistent with
the reservations in the plan. A key conceptual step here is to convert the
absolute-valued promises made in the reservations to appropriate relative
priorities/queue sizes etc.
Symmetrically the PlanFollower exposes changes in cluster conditions (as
tracked by the scheduler) to the plan, e.g., the overall amount of physical
resources available. The Plan in turn can react by replanning its allocations
if appropriate.
The implementation can assume that is run frequently enough to be able to
observe and react to normal operational changes in cluster conditions on the
fly (e.g., if cluster resources drop, we can update the relative weights of a
queue so that the absolute promises made to the job at reservation time are
respected).
However, due to RM restarts and the related downtime, it is advisable for
implementations to operate in a stateless way, and be able to synchronize the
state of plans/scheduler regardless of how big is the time gap between
executions.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanFollower.html#init-org.apache.hadoop.yarn.util.Clock-org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler-java.util.Collection-">init</a></span>(org.apache.hadoop.yarn.util.Clock&nbsp;clock,
<a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/scheduler/ResourceScheduler.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.scheduler">ResourceScheduler</a>&nbsp;sched,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation">Plan</a>&gt;&nbsp;plans)</code>
<div class="block">Init function that configures the PlanFollower, by providing:</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanFollower.html#setPlans-java.util.Collection-">setPlans</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation">Plan</a>&gt;&nbsp;plans)</code>
<div class="block">Setter for the list of plans.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanFollower.html#synchronizePlan-org.apache.hadoop.yarn.server.resourcemanager.reservation.Plan-boolean-">synchronizePlan</a></span>(<a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation">Plan</a>&nbsp;plan,
boolean&nbsp;shouldReplan)</code>
<div class="block">The function performing the actual synchronization operation for a given
Plan.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Runnable">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="init-org.apache.hadoop.yarn.util.Clock-org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler-java.util.Collection-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>init</h4>
<pre>void&nbsp;init(org.apache.hadoop.yarn.util.Clock&nbsp;clock,
<a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/scheduler/ResourceScheduler.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.scheduler">ResourceScheduler</a>&nbsp;sched,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation">Plan</a>&gt;&nbsp;plans)</pre>
<div class="block">Init function that configures the PlanFollower, by providing:</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>clock</code> - a reference to the system clock.</dd>
<dd><code>sched</code> - a reference to the underlying scheduler</dd>
<dd><code>plans</code> - references to the plans we should keep synchronized at every
time tick.</dd>
</dl>
</li>
</ul>
<a name="synchronizePlan-org.apache.hadoop.yarn.server.resourcemanager.reservation.Plan-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>synchronizePlan</h4>
<pre>void&nbsp;synchronizePlan(<a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation">Plan</a>&nbsp;plan,
boolean&nbsp;shouldReplan)</pre>
<div class="block">The function performing the actual synchronization operation for a given
Plan. This is normally invoked by the run method, but it can be invoked
synchronously to avoid race conditions when a user's reservation request
start time is imminent.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>plan</code> - the Plan to synchronize</dd>
<dd><code>shouldReplan</code> - replan on reduction of plan capacity if true or
proportionally scale down reservations if false</dd>
</dl>
</li>
</ul>
<a name="setPlans-java.util.Collection-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>setPlans</h4>
<pre>void&nbsp;setPlans(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation">Plan</a>&gt;&nbsp;plans)</pre>
<div class="block">Setter for the list of plans.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>plans</code> - the collection of Plans we operate on at every time tick.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/PlanFollower.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanEdit.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationAllocation.html" title="interface in org.apache.hadoop.yarn.server.resourcemanager.reservation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanFollower.html" target="_top">Frames</a></li>
<li><a href="PlanFollower.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2008&#x2013;2021 <a href="https://www.apache.org">Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>