<!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">

    <title>Resource Aware Scheduler</title>

    <!-- Bootstrap core CSS -->
    <link href="/assets/css/bootstrap.min.css" rel="stylesheet">
    <!-- Bootstrap theme -->
    <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link rel="stylesheet" href="http://fortawesome.github.io/Font-Awesome/assets/font-awesome/css/font-awesome.css">
    <link href="/css/style.css" rel="stylesheet">
    <link href="/assets/css/owl.theme.css" rel="stylesheet">
    <link href="/assets/css/owl.carousel.css" rel="stylesheet">
    <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
    <script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="/assets/js/owl.carousel.min.js"></script>
    <script type="text/javascript" src="/assets/js/storm.js"></script>
    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>


  <body>
    <header>
  <div class="container-fluid">
     <div class="row">
          <div class="col-md-5">
            <a href="/index.html"><img src="/images/logo.png" class="logo" /></a>
          </div>
          <div class="col-md-5">
            
              <h1>Version: 2.3.0</h1>
            
          </div>
          <div class="col-md-2">
            <a href="/downloads.html" class="btn-std btn-block btn-download">Download</a>
          </div>
        </div>
    </div>
</header>
<!--Header End-->
<!--Navigation Begin-->
<div class="navbar" role="banner">
  <div class="container-fluid">
      <div class="navbar-header">
          <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
        </div>
        <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
          <ul class="nav navbar-nav">
              <li><a href="/index.html" id="home">Home</a></li>
                <li><a href="/getting-help.html" id="getting-help">Getting Help</a></li>
                <li><a href="/about/integrates.html" id="project-info">Project Information</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="documentation">Documentation <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                      
                        
                          <li><a href="/releases/2.3.0/index.html">2.3.0</a></li>
                        
                      
                        
                          <li><a href="/releases/2.2.0/index.html">2.2.0</a></li>
                        
                      
                        
                          <li><a href="/releases/2.1.0/index.html">2.1.0</a></li>
                        
                      
                        
                          <li><a href="/releases/2.0.0/index.html">2.0.0</a></li>
                        
                      
                        
                          <li><a href="/releases/1.2.3/index.html">1.2.3</a></li>
                        
                      
                    </ul>
                </li>
                <li><a href="/talksAndVideos.html">Talks and Slideshows</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="contribute">Community <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a href="/contribute/Contributing-to-Storm.html">Contributing</a></li>
                        <li><a href="/contribute/People.html">People</a></li>
                        <li><a href="/contribute/BYLAWS.html">ByLaws</a></li>
                    </ul>
                </li>
                <li><a href="/2021/09/27/storm230-released.html" id="news">News</a></li>
            </ul>
        </nav>
    </div>
</div>



    <div class="container-fluid">
    <h1 class="page-title">Resource Aware Scheduler</h1>
          <div class="row">
           	<div class="col-md-12">
	             <!-- Documentation -->

<p class="post-meta"></p>

<div class="documentation-content"><h1 id="introduction">Introduction</h1>

<p>The purpose of this document is to provide a description of the Resource Aware Scheduler for the Storm distributed real-time computation system.  This document will provide you with both a high level description of the resource aware scheduler in Storm.  Some of the benefits are using a resource aware scheduler on top of Storm is outlined in the following presentation at Hadoop Summit 2016:</p>

<p><a href="http://www.slideshare.net/HadoopSummit/resource-aware-scheduling-in-apache-storm">http://www.slideshare.net/HadoopSummit/resource-aware-scheduling-in-apache-storm</a></p>

<h1 id="table-of-contents">Table of Contents</h1>

<ol>
<li><a href="#Using-Resource-Aware-Scheduler">Using Resource Aware Scheduler</a></li>
<li><a href="#API-Overview">API Overview</a>

<ol>
<li><a href="#Setting-Memory-Requirement">Setting Memory Requirement</a></li>
<li><a href="#Setting-Shared-Memory">Shared Memory Requirement</a></li>
<li><a href="#Setting-CPU-Requirement">Setting CPU Requirement</a></li>
<li><a href="#Limiting-the-Heap-Size-per-Worker-(JVM)Process">Limiting the Heap Size per Worker (JVM) Process</a></li>
<li><a href="#Setting-Available-Resources-on-Node">Setting Available Resources on Node</a></li>
<li><a href="#Other-Configurations">Other Configurations</a></li>
</ol></li>
<li><a href="#Topology-Priorities-and-Per-User-Resource">Topology Priorities and Per User Resource</a>

<ol>
<li><a href="#Setup">Setup</a></li>
<li><a href="#Specifying-Topology-Priority">Specifying Topology Priority</a></li>
<li><a href="#Specifying-Scheduling-Strategy">Specifying Scheduling Strategy</a></li>
<li><a href="#Specifying-Topology-Prioritization-Strategy">Specifying Topology Prioritization Strategy</a></li>
</ol></li>
<li><a href="#Profiling-Resource-Usage">Profiling Resource Usage</a></li>
<li><a href="#Enhancements-on-original-DefaultResourceAwareStrategy">Enhancements on original DefaultResourceAwareStrategy</a></li>
</ol>

<p><div id='Using-Resource-Aware-Scheduler'/></p>

<h2 id="using-resource-aware-scheduler">Using Resource Aware Scheduler</h2>

<p>The user can switch to using the Resource Aware Scheduler by setting the following in <em>conf/storm.yaml</em>
<code>
    storm.scheduler: “org.apache.storm.scheduler.resource.ResourceAwareScheduler”
</code><br>
<div id='API-Overview'/></p>

<h2 id="api-overview">API Overview</h2>

<p>For use with Trident, please see the <a href="Trident-RAS-API.html">Trident RAS API</a></p>

<p>For a Storm Topology, the user can now specify the amount of resources a topology component (i.e. Spout or Bolt) is required to run a single instance of the component.  The user can specify the resource requirement for a topology component by using the following API calls.</p>

<p><div id='Setting-Memory-Requirement'/></p>

<h3 id="setting-memory-requirement">Setting Memory Requirement</h3>

<p>API to set component memory requirement:
<code>
    public T setMemoryLoad(Number onHeap, Number offHeap)
</code>
Parameters:
* Number onHeap – The amount of on heap memory an instance of this component will consume in megabytes
* Number offHeap – The amount of off heap memory an instance of this component will consume in megabytes</p>

<p>The user also has to option to just specify the on heap memory requirement if the component does not have an off heap memory need.
<code>
    public T setMemoryLoad(Number onHeap)
</code>
Parameters:
* Number onHeap – The amount of on heap memory an instance of this component will consume</p>

<p>If no value is provided for offHeap, 0.0 will be used. If no value is provided for onHeap, or if the API is never called for a component, the default value will be used.</p>

<p>Example of Usage:
<code>
    SpoutDeclarer s1 = builder.setSpout(&quot;word&quot;, new TestWordSpout(), 10);
    s1.setMemoryLoad(1024.0, 512.0);
    builder.setBolt(&quot;exclaim1&quot;, new ExclamationBolt(), 3)
                .shuffleGrouping(&quot;word&quot;).setMemoryLoad(512.0);
</code>
The entire memory requested for this topology is 16.5 GB. That is from 10 spouts with 1GB on heap memory and 0.5 GB off heap memory each and 3 bolts with 0.5 GB on heap memory each.</p>

<p><div id='Setting-Shared-Memory'/></p>

<h3 id="shared-memory">Shared Memory</h3>

<p>In some cases you may have memory that is shared between components. It may be a as simple as a large static data structure, or as complex as static data that is memory mapped into a bolt and is shared across workers.  In any case you can specify your shared memory request by
creating one of <code>SharedOffHeapWithinNode</code>, <code>SharedOffHeapWithinWorker</code>, or <code>SharedOnHeap</code> and adding it to bolts and spouts that use that shared memory.</p>

<p>Example of Usage:</p>
<div class="highlight"><pre><code class="language-" data-lang=""> builder.setBolt("exclaim1", new ExclamationBolt(), 3).shuffleGrouping("word")
          .addSharedMemory(new SharedOnHeap(100, "exclaim-cache"));
</code></pre></div>
<p>In the above example all of the &quot;exclaim1&quot; bolts in a worker will share 100MB of memory.</p>
<div class="highlight"><pre><code class="language-" data-lang=""> builder.setBolt("lookup", new LookupBolt(), 3).shuffleGrouping("spout")
          .addSharedMemory(new SharedOffHeapWithinNode(500, "static-lookup"));
</code></pre></div>
<p>In this example all &quot;lookup&quot; bolts on a given node will share 500 MB or memory off heap. </p>

<p><div id='Setting-CPU-Requirement'/></p>

<h3 id="setting-cpu-requirement">Setting CPU Requirement</h3>

<p>API to set component CPU requirement:
<code>
    public T setCPULoad(Double amount)
</code>
Parameters:
* Number amount – The amount of on CPU an instance of this component will consume.</p>

<p>Currently, the amount of CPU resources a component requires or is available on a node is represented by a point system. CPU usage is a difficult concept to define. Different CPU architectures perform differently depending on the task at hand. They are so complex that expressing all of that in a single precise portable number is impossible. Instead we take a convention over configuration approach and are primarily concerned with rough level of CPU usage while still providing the possibility to specify amounts more fine grained.</p>

<p>By convention a CPU core typically will get 100 points. If you feel that your processors are more or less powerful you can adjust this accordingly. Heavy tasks that are CPU bound will get 100 points, as they can consume an entire core. Medium tasks should get 50, light tasks 25, and tiny tasks 10. In some cases you have a task that spawns other threads to help with processing. These tasks may need to go above 100 points to express the amount of CPU they are using. If these conventions are followed the common case for a single threaded task the reported Capacity * 100 should be the number of CPU points that the task needs.</p>

<p>Example of Usage:
<code>
    SpoutDeclarer s1 = builder.setSpout(&quot;word&quot;, new TestWordSpout(), 10);
    s1.setCPULoad(15.0);
    builder.setBolt(&quot;exclaim1&quot;, new ExclamationBolt(), 3)
                .shuffleGrouping(&quot;word&quot;).setCPULoad(10.0);
    builder.setBolt(&quot;exclaim2&quot;, new HeavyBolt(), 1)
                    .shuffleGrouping(&quot;exclaim1&quot;).setCPULoad(450.0);
</code></p>

<p><div id='Limiting-the-Heap-Size-per-Worker-(JVM)Process'/></p>

<h3 id="limiting-the-heap-size-per-worker-jvm-process">Limiting the Heap Size per Worker (JVM) Process</h3>
<div class="highlight"><pre><code class="language-" data-lang="">    public void setTopologyWorkerMaxHeapSize(Number size)
</code></pre></div>
<p>Parameters:
* Number size – The memory limit a worker process will be allocated in megabytes</p>

<p>The user can limit the amount of memory resources the resource aware scheduler allocates to a single worker on a per topology basis by using the above API.  This API is in place so that the users can spread executors to multiple workers.  However, spreading executors to multiple workers may increase the communication latency since executors will not be able to use Disruptor Queue for intra-process communication.</p>

<p>Example of Usage:
<code>
    Config conf = new Config();
    conf.setTopologyWorkerMaxHeapSize(512.0);
</code></p>

<p><div id='Setting-Available-Resources-on-Node'/></p>

<h3 id="setting-available-resources-on-node">Setting Available Resources on Node</h3>

<p>A storm administrator can specify node resource availability by modifying the <em>conf/storm.yaml</em> file located in the storm home directory of that node.</p>

<p>A storm administrator can specify how much available memory a node has in megabytes adding the following to <em>storm.yaml</em>
<code>
    supervisor.memory.capacity.mb: [amount&lt;Double&gt;]
</code>
A storm administrator can also specify how much available CPU resources a node has available adding the following to <em>storm.yaml</em>
<code>
    supervisor.cpu.capacity: [amount&lt;Double&gt;]
</code></p>

<p>Note: that the amount the user can specify for the available CPU is represented using a point system like discussed earlier.</p>

<p>Example of Usage:
<code>
    supervisor.memory.capacity.mb: 20480.0
    supervisor.cpu.capacity: 100.0
</code></p>

<p><div id='Other-Configurations'/></p>

<h3 id="other-configurations">Other Configurations</h3>

<p>The user can set some default configurations for the Resource Aware Scheduler in <em>conf/storm.yaml</em>:</p>
<div class="highlight"><pre><code class="language-" data-lang="">    //default value if on heap memory requirement is not specified for a component 
    topology.component.resources.onheap.memory.mb: 128.0

    //default value if off heap memory requirement is not specified for a component 
    topology.component.resources.offheap.memory.mb: 0.0

    //default value if CPU requirement is not specified for a component 
    topology.component.cpu.pcore.percent: 10.0

    //default value for the max heap size for a worker  
    topology.worker.max.heap.size.mb: 768.0
</code></pre></div>
<h3 id="warning">Warning</h3>

<p>If Resource Aware Scheduling is enabled, it will dynamically calculate the number of workers and the <code>topology.workers</code> setting is ignored.</p>

<p><div id='Topology-Priorities-and-Per-User-Resource'/></p>

<h2 id="topology-priorities-and-per-user-resource">Topology Priorities and Per User Resource</h2>

<p>The Resource Aware Scheduler or RAS also has multi-tenant capabilities since many Storm users typically share a Storm cluster.  Resource Aware Scheduler can allocate resources on a per user basis.  Each user can be guaranteed a certain amount of resources to run his or her topologies and the Resource Aware Scheduler will meet those guarantees when possible.  When the Storm cluster has extra free resources, Resource Aware Scheduler will to be able allocate additional resources to user in a fair manner. The importance of topologies can also vary.  Topologies can be used for actual production or just experimentation, thus Resource Aware Scheduler will take into account the importance of a topology when determining the order in which to schedule topologies or when to evict topologies</p>

<p><div id='Setup'/></p>

<h3 id="setup">Setup</h3>

<p>The resource guarantees of a user can be specified <em>conf/user-resource-pools.yaml</em>.  Specify the resource guarantees of a user in the following format:
<code>
    resource.aware.scheduler.user.pools:
    [UserId]
        cpu: [Amount of Guarantee CPU Resources]
        memory: [Amount of Guarantee Memory Resources]
</code>
An example of what <em>user-resource-pools.yaml</em> can look like:
<code>
    resource.aware.scheduler.user.pools:
        jerry:
            cpu: 1000
            memory: 8192.0
        derek:
            cpu: 10000.0
            memory: 32768
        bobby:
            cpu: 5000.0
            memory: 16384.0
</code>
Please note that the specified amount of Guaranteed CPU and Memory can be either a integer or double</p>

<p><div id='Specifying-Topology-Priority'/></p>

<h3 id="specifying-topology-priority">Specifying Topology Priority</h3>

<p>The range of topology priorities can range form 0-29.  The topologies priorities will be partitioned into several priority levels that may contain a range of priorities. 
For example we can create a priority level mapping:</p>
<div class="highlight"><pre><code class="language-" data-lang="">PRODUCTION =&gt; 0 – 9
STAGING =&gt; 10 – 19
DEV =&gt; 20 – 29
</code></pre></div>
<p>Thus, each priority level contains 10 sub priorities. Users can set the priority level of a topology by using the following API
<code>
    conf.setTopologyPriority(int priority)
</code> 
Parameters:
* priority – an integer representing the priority of the topology</p>

<p>Please note that the 0-29 range is not a hard limit.  Thus, a user can set a priority number that is higher than 29. However, the property of higher the priority number, lower the importance still holds</p>

<p><div id='Specifying-Scheduling-Strategy'/></p>

<h3 id="specifying-scheduling-strategy">Specifying Scheduling Strategy</h3>

<p>A user can specify on a per topology basis what scheduling strategy to use.  Users can implement the IStrategy interface and define new strategies to schedule specific topologies.  This pluggable interface was created since we realize different topologies might have different scheduling needs.  A user can set the topology strategy within the topology definition by using the API:
<code>
    public void setTopologyStrategy(Class&lt;? extends IStrategy&gt; clazz)
</code>
Parameters:
* clazz – The strategy class that implements the IStrategy interface</p>

<p>Example Usage:
<code>
    conf.setTopologyStrategy(org.apache.storm.scheduler.resource.strategies.scheduling.DefaultResourceAwareStrategy.class);
</code>
A default scheduling is provided.  The DefaultResourceAwareStrategy is implemented based off the scheduling algorithm in the original paper describing resource aware scheduling in Storm:</p>

<p>Peng, Boyang, Mohammad Hosseini, Zhihao Hong, Reza Farivar, and Roy Campbell. &quot;R-storm: Resource-aware scheduling in storm.&quot; In Proceedings of the 16th Annual Middleware Conference, pp. 149-161. ACM, 2015.</p>

<p><a href="http://dl.acm.org/citation.cfm?id=2814808">http://dl.acm.org/citation.cfm?id=2814808</a></p>

<p><strong>Please Note: Enhancements have to made on top of the original scheduling strategy as described in the paper.  Please see section &quot;Enhancements on original DefaultResourceAwareStrategy&quot;</strong></p>

<p><div id='Specifying-Topology-Prioritization-Strategy'/></p>

<h3 id="specifying-topology-prioritization-strategy">Specifying Topology Prioritization Strategy</h3>

<p>The order of scheduling and eviction is determined by a pluggable interface in which the cluster owner can define how topologies should be scheduled.  For the owner to define his or her own prioritization strategy, she or he needs to implement the ISchedulingPriorityStrategy interface.  A user can set the scheduling priority strategy by setting the <code>DaemonConfig.RESOURCE_AWARE_SCHEDULER_PRIORITY_STRATEGY</code> to point to the class that implements the strategy. For instance:
<code>
    resource.aware.scheduler.priority.strategy: &quot;org.apache.storm.scheduler.resource.strategies.priority.DefaultSchedulingPriorityStrategy&quot;
</code></p>

<p>Topologies are scheduled starting at the beginning of the list returned by this plugin.  If there are not enough resources to schedule the topology others are evicted starting at the end of the list.  Eviction stops when there are no lower priority topologies left to evict.</p>

<p><strong>DefaultSchedulingPriorityStrategy</strong></p>

<p>In the past the order of scheduling was based on the distance between a user’s current resource allocation and his or her guaranteed allocation.</p>

<p>We currently use a slightly different approach. We simulate scheduling the highest priority topology for each user and score the topology for each of the resources using the formula</p>
<div class="highlight"><pre><code class="language-" data-lang="">(Requested + Assigned - Guaranteed)/Available
</code></pre></div>
<p>Where</p>

<ul>
<li><code>Requested</code> is the resource requested by this topology (or a approximation of it for complex requests like shared memory)</li>
<li><code>Assigned</code> is the resources already assigned by the simulation.</li>
<li><code>Guaranteed</code> is the resource guarantee for this user</li>
<li><code>Available</code> is the amount of that resource currently available in the cluster.</li>
</ul>

<p>This gives a score that is negative for guaranteed requests and a score that is positive for requests that are not within the guarantee.</p>

<p>To combine different resources the maximum of all the individual resource scores is used.  This guarantees that if a user would go over a guarantee for a single resource it would not be offset by being under guarantee on any other resources.</p>

<p>For Example:</p>

<p>Assume we have to schedule the following topologies.</p>

<table><thead>
<tr>
<th>ID</th>
<th>User</th>
<th>CPU</th>
<th>Memory</th>
<th>Priority</th>
</tr>
</thead><tbody>
<tr>
<td>A-1</td>
<td>A</td>
<td>100</td>
<td>1,000</td>
<td>1</td>
</tr>
<tr>
<td>A-2</td>
<td>A</td>
<td>100</td>
<td>1,000</td>
<td>10</td>
</tr>
<tr>
<td>B-1</td>
<td>B</td>
<td>100</td>
<td>1,000</td>
<td>1</td>
</tr>
<tr>
<td>B-2</td>
<td>B</td>
<td>100</td>
<td>1,000</td>
<td>10</td>
</tr>
</tbody></table>

<p>The cluster as a whole has 300 CPU and 4,000 Memory.</p>

<p>User A is guaranteed 100 CPU and 1,000 Memory.  User B is guaranteed 200 CPU and 1,500 Memory.  The scores for the most important, lowest priority number, topologies for each user would be.</p>
<div class="highlight"><pre><code class="language-" data-lang="">A-1 Score = max(CPU: (100 + 0 - 100)/300, MEM: (1,000 + 0 - 1,000)/4,000) = 0
B-1 Score = max(CPU: (100 + 0 - 200)/300, MEM: (1,000 + 0 - 1,500)/4,000) = -0.125
</code></pre></div>
<p><code>B-1</code> has the lowest score so it would be the highest priority topology to schedule. In the next round the scores would be.</p>
<div class="highlight"><pre><code class="language-" data-lang="">A-1 Score = max(CPU: (100 + 0 - 100)/200, MEM: (1,000 + 0 - 1,000)/3,000) = 0
B-2 Score = max(CPU: (100 + 100 - 200)/200, MEM: (1,000 + 1,000 - 1,500)/3,000) = 0.167
</code></pre></div>
<p><code>A-1</code> has the lowest score now so it would be the next highest priority topology to schedule.</p>

<p>This process would be repeated until all of the topologies are ordered, even if there are no resources left on the cluster to schedule a topology.</p>

<p><strong>FIFOSchedulingPriorityStrategy</strong></p>

<p>The FIFO strategy is intended more for test or staging clusters where users are running integration tests or doing development work.  Topologies in these situations tend to be short lived and at times a user may forget that they are running a topology at all.</p>

<p>To try and be as fair as possible to users running short lived topologies the <code>FIFOSchedulingPriorityStrategy</code> extends the <code>DefaultSchedulingPriorityStrategy</code> so that any negative score (a.k.a. a topology that fits within a user&#39;s guarantees) would remain unchanged, but positive scores are replaced with the up-time of the topology.</p>

<p>This respects the guarantees of a user, but at the same time it gives priority for the rest of the resources to the most recently launched topology.  Older topologies, that have probably been forgotten about, are then least likely to get resources.</p>

<p><div id='Profiling-Resource-Usage'/></p>

<h2 id="profiling-resource-usage">Profiling Resource Usage</h2>

<p>Figuring out resource usage for your topology:</p>

<p>To get an idea of how much memory/CPU your topology is actually using you can add the following to your topology launch code.</p>
<div class="highlight"><pre><code class="language-" data-lang="">    //Log all storm metrics
    conf.registerMetricsConsumer(backtype.storm.metric.LoggingMetricsConsumer.class);

    //Add in per worker CPU measurement
    Map&lt;String, String&gt; workerMetrics = new HashMap&lt;String, String&gt;();
    workerMetrics.put("CPU", "org.apache.storm.metrics.sigar.CPUMetric");
    conf.put(Config.TOPOLOGY_WORKER_METRICS, workerMetrics);
</code></pre></div>
<p>The CPU metrics will require you to add</p>
<div class="highlight"><pre><code class="language-" data-lang="">    &lt;dependency&gt;
        &lt;groupId&gt;org.apache.storm&lt;/groupId&gt;
        &lt;artifactId&gt;storm-metrics&lt;/artifactId&gt;
        &lt;version&gt;1.0.0&lt;/version&gt;
    &lt;/dependency&gt;
</code></pre></div>
<p>as a topology dependency (1.0.0 or higher).</p>

<p>You can then go to your topology on the UI, turn on the system metrics, and find the log that the LoggingMetricsConsumer is writing to.  It will output results in the log like.</p>
<div class="highlight"><pre><code class="language-" data-lang="">    1454526100 node1.nodes.com:6707 -1:__system CPU {user-ms=74480, sys-ms=10780}
    1454526100 node1.nodes.com:6707 -1:__system memory/nonHeap     {unusedBytes=2077536, virtualFreeBytes=-64621729, initBytes=2555904, committedBytes=66699264, maxBytes=-1, usedBytes=64621728}
    1454526100 node1.nodes.com:6707 -1:__system memory/heap  {unusedBytes=573861408, virtualFreeBytes=694644256, initBytes=805306368, committedBytes=657719296, maxBytes=778502144, usedBytes=83857888}
</code></pre></div>
<p>The metrics with -1:__system are generally metrics for the entire worker.  In the example above that worker is running on node1.nodes.com:6707.  These metrics are collected every 60 seconds.  For the CPU you can see that over the 60 seconds this worker used  74480 + 10780 = 85260 ms of CPU time.  This is equivalent to 85260/60000 or about 1.5 cores.</p>

<p>The Memory usage is similar but look at the usedBytes.  offHeap is 64621728 or about 62MB, and onHeap is 83857888 or about 80MB, but you should know what you set your heap to in each of your workers already.  How do you divide this up per bolt/spout?  That is a bit harder and may require some trial and error from your end.</p>

<p><div id='Enhancements-on-original-DefaultResourceAwareStrategy'/></p>

<h2 id="enhancements-on-original-defaultresourceawarestrategy">Enhancements on original DefaultResourceAwareStrategy</h2>

<p>The default resource aware scheduling strategy as described in the paper above has two main scheduling phases:</p>

<ol>
<li>Task Selection - Calculate the order task/executors in a topology should be scheduled</li>
<li>Node Selection - Given a task/executor, find a node to schedule the task/executor on.</li>
</ol>

<p>Enhancements have been made for both scheduling phases</p>

<h3 id="task-selection-enhancements">Task Selection Enhancements</h3>

<p>Instead of using a breadth first traversal of the topology graph to create a ordering of components and its executors, a new heuristic is used that orders components by the number of in and out edges (potential connections) of the component.  This is discovered to be a more effective way to co-locate executors that communicate with each other and reduce the network latency.</p>

<h3 id="node-selection-enhancements">Node Selection Enhancements</h3>

<p>Node selection comes down first selecting which rack (server rack) and then which node on that rack to choose. The gist of strategy in choosing a rack and node is finding the rack that has the &quot;most&quot; resource available and in that rack find the node with the &quot;most&quot; free resources.  The assumption we are making for this strategy is that the node or rack with the most free resources will have the highest probability that allows us to schedule co-locate the most number of executors on the node or rack to reduce network communication latency</p>

<p>Racks and nodes will be sorted from best choice to worst choice.  When finding an executor, the strategy will iterate through all racks and nodes, starting from best to worst, before giving up.  Racks and nodes will be sorted in the following matter:</p>

<ol>
<li><p>How many executors are already scheduled on the rack or node<br>
-- This is done so we move executors to schedule closer to executors that are already scheduled and running.  If a topology partially crashed and a subset of the topology&#39;s executors need to be rescheduled, we want to reschedule these executors as close (network wise) as possible to the executors that healthy and running. </p></li>
<li><p>Subordinate resource availability or the amount &quot;effective&quot; resources on the rack or node<br>
-- Please refer the section on Subordinate Resource Availability</p></li>
<li><p>Average of the all the resource availability<br>
-- This is simply taking the average of the percent available (available resources on node or rack divided by the available resources on rack or cluster, respectively).  This situation will only be used when &quot;effective resources&quot; for two objects (rack or node) are the same. Then we consider the average of all the percentages of resources as a metric for sorting. For example:
```
    Avail Resources:
    node 1: CPU = 50 Memory = 1024 Slots = 20
    node 2: CPU = 50 Memory = 8192 Slots = 40
    node 3: CPU = 1000 Memory = 0 Slots = 0</p>
<div class="highlight"><pre><code class="language-" data-lang="">Effective resources for nodes:
node 1 = 50 / (50+50+1000) = 0.045 (CPU bound)
node 2 = 50 / (50+50+1000) = 0.045 (CPU bound)
node 3 = 0 (memory and slots are 0)
</code></pre></div><div class="highlight"><pre><code class="language-" data-lang="">ode 1 and node 2 have the same effective resources but clearly node 2 has more resources (memory and slots) than node 1 and we would want to pick node 2 first since there is a higher probability we will be able to schedule more executors on it. This is what the phase 2 averaging does
</code></pre></div></li>
</ol>

<p>Thus the sorting follows the following progression. Compare based on 1) and if equal then compare based on 2) and if equal compare based on 3) and if equal we break ties by arbitrarily assigning ordering based on comparing the ids of the node or rack.</p>

<p><strong>Subordinate Resource Availability</strong></p>

<p>Originally the getBestClustering algorithm for RAS finds the &quot;Best&quot; rack based on which rack has the &quot;most available&quot; resources by finding the rack with the biggest sum of available memory + available across all nodes in the rack. This method is not very accurate since memory and cpu usage agree values on a different scale and the values are not normalized. This method is also not effective since it does not consider the number of slots available and it fails to identifying racks that are not schedulable due to the exhaustion of one of the resources either memory, cpu, or slots. Also the previous method does not consider failures of workers. When executors of a topology gets unassigned and needs to be scheduled again, the current logic in getBestClustering may be inadequate since it will likely return a cluster that is different from where the majority of executors from the topology is originally scheduling in.</p>

<p>The new strategy/algorithm to find the &quot;best&quot; rack or node, I dub subordinate resource availability ordering (inspired by Dominant Resource Fairness), sorts racks and nodes by the subordinate (not dominant) resource availability.</p>

<p>For example given 4 racks with the following resource availabilities
<code>
    //generate some that has a lot of memory but little of cpu
    rack-3 Avail [ CPU 100.0 MEM 200000.0 Slots 40 ] Total [ CPU 100.0 MEM 200000.0 Slots 40 ]
    //generate some supervisors that are depleted of one resource
    rack-2 Avail [ CPU 0.0 MEM 80000.0 Slots 40 ] Total [ CPU 0.0 MEM 80000.0 Slots 40 ]
    //generate some that has a lot of cpu but little of memory
    rack-4 Avail [ CPU 6100.0 MEM 10000.0 Slots 40 ] Total [ CPU 6100.0 MEM 10000.0 Slots 40 ]
    //generate another rack of supervisors with less resources than rack-0
    rack-1 Avail [ CPU 2000.0 MEM 40000.0 Slots 40 ] Total [ CPU 2000.0 MEM 40000.0 Slots 40 ]
    //best rack to choose
    rack-0 Avail [ CPU 4000.0 MEM 80000.0 Slots 40( ] Total [ CPU 4000.0 MEM 80000.0 Slots 40 ]
    Cluster Overall Avail [ CPU 12200.0 MEM 410000.0 Slots 200 ] Total [ CPU 12200.0 MEM 410000.0 Slots 200 ]
</code>
It is clear that rack-0 is the best cluster since its the most balanced and can potentially schedule the most executors, while rack-2 is the worst rack since rack-2 is depleted of cpu resource thus rendering it unschedulable even though there are other resources available.</p>

<p>We first calculate the resource availability percentage of all the racks for each resource by computing:</p>
<div class="highlight"><pre><code class="language-" data-lang="">(resource available on rack) / (resource available in cluster)
</code></pre></div>
<p>We do this calculation to normalize the values otherwise the resource values would not be comparable.</p>

<p>So for our example:
<code>
    rack-3 Avail [ CPU 0.819672131147541% MEM 48.78048780487805% Slots 20.0% ] effective resources: 0.00819672131147541
    rack-2 Avail [ 0.0% MEM 19.51219512195122% Slots 20.0% ] effective resources: 0.0
    rack-4 Avail [ CPU 50.0% MEM 2.4390243902439024% Slots 20.0% ] effective resources: 0.024390243902439025
    rack-1 Avail [ CPU 16.39344262295082% MEM 9.75609756097561% Slots 20.0% ] effective resources: 0.0975609756097561
    rack-0 Avail [ CPU 32.78688524590164% MEM 19.51219512195122% Slots 20.0% ] effective resources: 0.1951219512195122
</code>
The effective resource of a rack, which is also the subordinate resource, is computed by: </p>
<div class="highlight"><pre><code class="language-" data-lang="">MIN(resource availability percentage of {CPU, Memory, # of free Slots}).
</code></pre></div>
<p>Then we order the racks by the effective resource.</p>

<p>Thus for our example:</p>
<div class="highlight"><pre><code class="language-" data-lang="">Sorted rack: [rack-0, rack-1, rack-4, rack-3, rack-2]
</code></pre></div>
<p>This metric is used in sorting for both nodes and racks.  When sorting racks, we consider resources available on the rack and in the whole cluster (containing all racks).  When sorting nodes, we consider resources available on the node and the resources available in the rack (sum of all resources available for all nodes in rack)</p>

<p>Original Jira for this enhancement: <a href="https://issues.apache.org/jira/browse/STORM-1766">STORM-1766</a></p>

<h3 id="improvements-in-scheduling">Improvements in Scheduling</h3>

<p>This section provides some experimental results on the performance benefits with the enhancements on top of the original scheduling strategy.  The experiments are based off of running simulations using:</p>

<p><a href="https://github.com/jerrypeng/storm-scheduler-test-framework">https://github.com/jerrypeng/storm-scheduler-test-framework</a></p>

<p>Random topologies and clusters are used in the simulation as well as a comprehensive dataset consisting of all real topologies running in all the storm clusters at Yahoo.</p>

<p>The below graphs provides a comparison of how well the various strategies schedule topologies to minimize network latency.  A network metric is calculated for each scheduling of a topology by each scheduling strategy.  The network metric is calculated based on how many connections each executor in a topology has to make to another executor residing in the same worker (JVM process), in different worker but same host, different host, different rack.  The assumption we are making is the following</p>

<ol>
<li>Intra-worker communication is the fastest</li>
<li>Inter-worker communication is fast</li>
<li>Inter-node communication is slower</li>
<li>Inter-rack communication is the slowest</li>
</ol>

<p>For this network metric, the larger the number is number is the more potential network latency the topology will have for this scheduling.  Two types of experiments are performed.  One set experiments are performed with randomly generated topologies and randomly generate clusters.  The other set of experiments are performed with a dataset containing all of the running topologies at yahoo and semi-randomly generated clusters based on the size of the topology.  Both set of experiments are run millions of iterations until results converge.  </p>

<p>For the experiments involving randomly generated topologies, an optimal strategy is implemented that exhaustively finds the most optimal solution if a solution exists.  The topologies and clusters used in this experiment are relatively small so that the optimal strategy traverse to solution space to find a optimal solution in a reasonable amount of time.  This strategy is not run with the Yahoo topologies since the topologies are large and would take unreasonable amount of time to run, since the solutions space is W^N (ordering doesn&#39;t matter within a worker) where W is the number of workers and N is the number of executors. The NextGenStrategy represents the scheduling strategy with these enhancements.  The DefaultResourceAwareStrategy represents the original scheduling strategy.  The RoundRobinStrategy represents a naive strategy that simply schedules executors in a round robin fashion while respecting the resource constraints.  The graph below presents averages of the network metric.  A CDF graph is also presented further down.</p>

<table><thead>
<tr>
<th>Random Topologies</th>
<th>Yahoo topologies</th>
</tr>
</thead><tbody>
<tr>
<td><img src="images/ras_new_strategy_network_metric_random.png" alt=""></td>
<td><img src="images/ras_new_strategy_network_metric_yahoo_topologies.png" alt=""></td>
</tr>
</tbody></table>

<p>The next graph displays how close the schedulings from the respectively scheduling strategies are to the schedulings of the optimal strategy.  As explained earlier, this is only done for the random generated topologies and clusters.</p>

<table><thead>
<tr>
<th>Random Topologies</th>
</tr>
</thead><tbody>
<tr>
<td><img src="images/ras_new_strategy_network_metric_improvement_random.png" alt=""></td>
</tr>
</tbody></table>

<p>The below graph is a CDF of the network metric:</p>

<table><thead>
<tr>
<th>Random Topologies</th>
<th>Yahoo topologies</th>
</tr>
</thead><tbody>
<tr>
<td><img src="images/ras_new_strategy_network_cdf_random.png" alt=""></td>
<td><img src="images/ras_new_strategy_network_metric_cdf_yahoo_topologies.png" alt=""></td>
</tr>
</tbody></table>

<p>Below is a comparison of the how long the strategies take to run:</p>

<table><thead>
<tr>
<th>Random Topologies</th>
<th>Yahoo topologies</th>
</tr>
</thead><tbody>
<tr>
<td><img src="images/ras_new_strategy_runtime_random.png" alt=""></td>
<td><img src="images/ras_new_strategy_runtime_yahoo.png" alt=""></td>
</tr>
</tbody></table>
</div>


	          </div>
	       </div>
	  </div>
<footer>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-3">
                <div class="footer-widget">
                    <h5>Meetups</h5>
                    <ul class="latest-news">
                        
                        <li><a href="http://www.meetup.com/Apache-Storm-Apache-Kafka/">Apache Storm & Apache Kafka</a> <span class="small">(Sunnyvale, CA)</span></li>
                        
                        <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Apache Storm & Kafka Users</a> <span class="small">(Seattle, WA)</span></li>
                        
                        <li><a href="http://www.meetup.com/New-York-City-Storm-User-Group/">NYC Storm User Group</a> <span class="small">(New York, NY)</span></li>
                        
                        <li><a href="http://www.meetup.com/Bay-Area-Stream-Processing">Bay Area Stream Processing</a> <span class="small">(Emeryville, CA)</span></li>
                        
                        <li><a href="http://www.meetup.com/Boston-Storm-Users/">Boston Realtime Data</a> <span class="small">(Boston, MA)</span></li>
                        
                        <li><a href="http://www.meetup.com/storm-london">London Storm User Group</a> <span class="small">(London, UK)</span></li>
                        
                        <!-- <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Seatle, WA</a> <span class="small">(27 Jun 2015)</span></li> -->
                    </ul>
                </div>
            </div>
            <div class="col-md-3">
                <div class="footer-widget">
                    <h5>About Apache Storm</h5>
                    <p>Apache Storm integrates with any queueing system and any database system. Apache Storm's spout abstraction makes it easy to integrate a new queuing system. Likewise, integrating Apache Storm with database systems is easy.</p>
               </div>
            </div>
            <div class="col-md-3">
                <div class="footer-widget">
                    <h5>First Look</h5>
                    <ul class="footer-list">
                        <li><a href="/releases/current/Rationale.html">Rationale</a></li>
                        <li><a href="/releases/current/Tutorial.html">Tutorial</a></li>
                        <li><a href="/releases/current/Setting-up-development-environment.html">Setting up development environment</a></li>
                        <li><a href="/releases/current/Creating-a-new-Storm-project.html">Creating a new Apache Storm project</a></li>
                    </ul>
                </div>
            </div>
            <div class="col-md-3">
                <div class="footer-widget">
                    <h5>Documentation</h5>
                    <ul class="footer-list">
                        <li><a href="/releases/current/index.html">Index</a></li>
                        <li><a href="/releases/current/javadocs/index.html">Javadoc</a></li>
                        <li><a href="/releases/current/FAQ.html">FAQ</a></li>
                    </ul>
                </div>
            </div>
        </div>
        <hr/>
        <div class="row">   
            <div class="col-md-12">
                <p align="center">Copyright © 2019 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. 
                    <br>Apache Storm, Apache, the Apache feather logo, and the Apache Storm project logos are trademarks of The Apache Software Foundation. 
                    <br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
            </div>
        </div>
    </div>
</footer>
<!--Footer End-->
<!-- Scroll to top -->
<span class="totop"><a href="#"><i class="fa fa-angle-up"></i></a></span> 

</body>

</html>

