<!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.4.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.4.0/index.html">2.4.0</a></li>
                        
                      
                        
                          <li><a href="/releases/2.3.0/index.html">2.3.0</a></li>
                        
                      
                        
                          <li><a href="/releases/2.2.1/index.html">2.2.1</a></li>
                        
                      
                        
                          <li><a href="/releases/2.2.0/index.html">2.2.0</a></li>
                        
                      
                        
                          <li><a href="/releases/2.1.1/index.html">2.1.1</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.4/index.html">1.2.4</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>
                        <li><a href="/Powered-By.html">PoweredBy</a></li>
                    </ul>
                </li>
                <li><a href="/2021/10/14/storm211-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 © 2021 <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>

