blob: fc986a44d04bba4d8369eb507f47f49b635f3ab5 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61232409-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-61232409-1');
</script>
<meta charset="UTF-8">
<meta name="ignite-version" content="2.9.0" />
<title>Job Scheduling | Ignite Documentation</title>
<link rel="canonical" href="/docs/2.9.0/distributed-computing/job-scheduling" />
<link rel="stylesheet" href="/assets/css/styles.css?1598500266">
<link rel="stylesheet" href="/assets/css/asciidoc-pygments.css">
<link rel="shortcut icon" href="/favicon.ico">
<meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0'>
<script type="text/javascript" src="/assets/js/anchor.min.js?1598500266"></script>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"
/>
</head>
<body>
<header>
<div class="container">
<button type='button' class='menu' title='Docs menu'>
<img src="/assets/images/menu-icon.svg"/>
</button>
<div class='home'>
<a href="/" class='home' title='Apache Ignite home'>
<img src="/assets/images/apache_ignite_logo.svg" alt="Apache Ignite logo" width="103" >
</a>
</div>
<nav>
</nav>
<select id="version-selector">
<option value="2.9.0">2.9.0</option>
</select>
<a href="https://github.com/ignite" title='GitHub' class='github' target="_blank">
<img src="/assets/images/github-gray.svg" alt="GitHub logo">
</a>
<form class='search'>
<button class="search-close" type='button'><img src='/assets/images/cancel.svg'></button>
<input type="search" placeholder="Search…" id="search-input">
</form>
<button type='button' class='search-toggle'><img src='/assets/images/search.svg'></button>
<button type='button' class='top-nav-toggle'></button>
</div>
</header>
<link rel="stylesheet" href="/assets/css/docs.css">
<section class='page-docs'>
<nav class='left-nav' data-swiftype-index='false'>
<li>
<a href="/docs/2.9.0//preface" class='' >Preface</a>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Quick Start Guides<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//quick-start/java"
class=''
>Java</a>
</li>
<li>
<a href="/docs/2.9.0//quick-start/dotnet"
class=''
>.NET/C#</a>
</li>
<li>
<a href="/docs/2.9.0//quick-start/cpp"
class=''
>C++</a>
</li>
<li>
<a href="/docs/2.9.0//quick-start/python"
class=''
>Python</a>
</li>
<li>
<a href="/docs/2.9.0//quick-start/nodejs"
class=''
>Node.JS</a>
</li>
<li>
<a href="/docs/2.9.0//quick-start/sql"
class=''
>SQL</a>
</li>
<li>
<a href="/docs/2.9.0//quick-start/php"
class=''
>PHP</a>
</li>
<li>
<a href="/docs/2.9.0//quick-start/restapi"
class=''
>REST API</a>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="/installation" class='group-toggle collapsed '>Installation<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//installation/installing-using-zip"
class=''
>Installing Using ZIP Archive</a>
</li>
<li>
<a href="/docs/2.9.0//installation/installing-using-docker"
class=''
>Installing Using Docker</a>
</li>
<li>
<a href="/docs/2.9.0//installation/deb-rpm"
class=''
>Installing DEB or RPM package</a>
</li>
<li>
<button
type='button'
class='collapsed '>Kubernetes<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0//installation/kubernetes/amazon-eks-deployment" class=''>Amazon EKS</a></li>
<li><a href="/docs/2.9.0//installation/kubernetes/azure-deployment" class=''>Azure Kubernetes Service</a></li>
<li><a href="/docs/2.9.0//installation/kubernetes/gke-deployment" class=''>Google Kubernetes Engine</a></li>
</nav>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Setting Up<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//setup"
class=''
>Setting Up Ignite for Java</a>
</li>
<li>
<a href="/docs/2.9.0//setup-dotnet"
class=''
>Setting Up Ignite for .NET/C#</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0//understanding-configuration" class='' >Understanding Configuration</a>
</li>
<li>
<a href="/docs/2.9.0//logging" class='' >Configuring Logging</a>
</li>
<li>
<a href="/docs/2.9.0//starting-nodes" class='' >Starting and Stopping Nodes</a>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//clustering/clustering"
class=''
>Overview</a>
</li>
<li>
<a href="/docs/2.9.0//clustering/tcp-ip-discovery"
class=''
>TCP/IP Discovery</a>
</li>
<li>
<a href="/docs/2.9.0//clustering/zookeeper-discovery"
class=''
>ZooKeeper Discovery</a>
</li>
<li>
<a href="/docs/2.9.0//clustering/discovery-in-the-cloud"
class=''
>Discovery in the Cloud</a>
</li>
<li>
<a href="/docs/2.9.0//clustering/network-configuration"
class=''
>Network Configuration</a>
</li>
<li>
<a href="/docs/2.9.0//clustering/connect-client-nodes"
class=''
>Connecting Client Nodes</a>
</li>
<li>
<a href="/docs/2.9.0//clustering/running-client-nodes-behind-nat"
class=''
>Running Client Nodes Behind NAT</a>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Data Modeling<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//data-modeling/data-modeling"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.9.0//data-modeling/data-partitioning"
class=''
>Data Partitioning</a>
</li>
<li>
<a href="/docs/2.9.0//data-modeling/affinity-collocation"
class=''
>Affinity Colocation</a>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Configuring Memory<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//memory-architecture"
class=''
>Memory Architecture</a>
</li>
<li>
<a href="/docs/2.9.0//memory-configuration/data-regions"
class=''
>Configuring Data Regions</a>
</li>
<li>
<a href="/docs/2.9.0//memory-configuration/eviction-policies"
class=''
>Eviction Policies</a>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Configuring Caches<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//configuring-caches/configuration-overview"
class=''
>Cache Configuration</a>
</li>
<li>
<a href="/docs/2.9.0//configuring-caches/configuring-backups"
class=''
>Configuring Partition Backups</a>
</li>
<li>
<a href="/docs/2.9.0//configuring-caches/atomicity-modes"
class=''
>Atomicity Modes</a>
</li>
<li>
<a href="/docs/2.9.0//configuring-caches/expiry-policies"
class=''
>Expiry Policy</a>
</li>
<li>
<a href="/docs/2.9.0//configuring-caches/on-heap-caching"
class=''
>On-Heap Caching</a>
</li>
<li>
<a href="/docs/2.9.0//configuring-caches/cache-groups"
class=''
>Cache Groups</a>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Persistence<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//persistence/native-persistence"
class=''
>Ignite Persistence</a>
</li>
<li>
<a href="/docs/2.9.0//persistence/external-storage"
class=''
>External Storage</a>
</li>
<li>
<a href="/docs/2.9.0//persistence/swap"
class=''
>Swapping</a>
</li>
<li>
<a href="/docs/2.9.0//persistence/custom-cache-store"
class=''
>Implementing Custom Cache Store</a>
</li>
<li>
<a href="/docs/2.9.0//persistence/disk-compression"
class=''
>Disk Compression</a>
</li>
<li>
<a href="/docs/2.9.0//persistence/persistence-tuning"
class=''
>Tuning Persistence</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0//baseline-topology" class='' >Baseline Topology</a>
</li>
<li>
<a href="/docs/2.9.0//cluster-states" class='' >Cluster States</a>
</li>
<li>
<a href="/docs/2.9.0//data-rebalancing" class='' >Data Rebalancing</a>
</li>
<li>
<a href="/docs/2.9.0//partition-loss-policy" class='' >Partition Loss Policy</a>
</li>
<li>
<a href="/docs/2.9.0//peer-class-loading" class='' >Peer Class Loading</a>
</li>
<li>
<a href="/docs/2.9.0//data-streaming" class='' >Data Streaming</a>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Using Key-Value Cache API<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//key-value-api/basic-cache-operations"
class=''
>Basic Cache Operations</a>
</li>
<li>
<a href="/docs/2.9.0//key-value-api/binary-objects"
class=''
>Working with Binary Objects</a>
</li>
<li>
<a href="/docs/2.9.0//key-value-api/using-scan-queries"
class=''
>Using Scan Queries</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0//key-value-api/continuous-queries" class='' >Using Continuous Queries</a>
</li>
<li>
<a href="/docs/2.9.0//key-value-api/transactions" class='' >Performing Transactions</a>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Working with SQL<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//SQL/sql-introduction"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/schemas"
class=''
>Understanding Schemas</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/indexes"
class=''
>Defining Indexes</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/sql-api"
class=''
>Using SQL API</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/distributed-joins"
class=''
>Distributed Joins</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/sql-transactions"
class=''
>SQL Transactions</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/custom-sql-func"
class=''
>Custom SQL Functions</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/JDBC/jdbc-driver"
class=''
>JDBC Driver</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/JDBC/jdbc-client-driver"
class=''
>JDBC Client Driver</a>
</li>
<li>
<a href="/docs/2.9.0//transactions/mvcc"
class=''
>Multiversion Concurrency Control</a>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Distributed Computing<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//distributed-computing/distributed-computing"
class=''
>Distributed Computing API</a>
</li>
<li>
<a href="/docs/2.9.0//distributed-computing/cluster-groups"
class=''
>Cluster Groups</a>
</li>
<li>
<a href="/docs/2.9.0//distributed-computing/executor-service"
class=''
>Executor Service</a>
</li>
<li>
<a href="/docs/2.9.0//distributed-computing/map-reduce"
class=''
>MapReduce API</a>
</li>
<li>
<a href="/docs/2.9.0//distributed-computing/load-balancing"
class=''
>Load Balancing</a>
</li>
<li>
<a href="/docs/2.9.0//distributed-computing/fault-tolerance"
class=''
>Fault Tolerance</a>
</li>
<li>
<a href="/docs/2.9.0//distributed-computing/job-scheduling"
class=''
>Job Scheduling</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0//collocated-computations" class='' >Colocating Computations with Data</a>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Working with Events<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//events/listening-to-events"
class=''
>Enabling and Listenting to Events</a>
</li>
<li>
<a href="/docs/2.9.0//events/events"
class=''
>Events</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0//near-cache" class='' >Near Caches</a>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Monitoring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//monitoring-metrics/intro"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.9.0//monitoring-metrics/cluster-id"
class=''
>Cluster ID and Tag</a>
</li>
<li>
<button
type='button'
class='collapsed '>Metrics<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0//monitoring-metrics/configuring-metrics" class=''>Configuring Metrics</a></li>
<li><a href="/docs/2.9.0//monitoring-metrics/metrics" class=''>JMX Metrics</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>New Metrics System<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0//monitoring-metrics/new-metrics-system" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0//monitoring-metrics/new-metrics" class=''>Metrics</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0//monitoring-metrics/system-views"
class=''
>System Views</a>
</li>
<li>
<a href="/docs/2.9.0//monitoring-metrics/tracing"
class=''
>Tracing</a>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="/security" class='group-toggle collapsed '>Security<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//security/authentication"
class=''
>Authentication</a>
</li>
<li>
<a href="/docs/2.9.0//security/ssl-tls"
class=''
>SSL/TLS</a>
</li>
<li>
<button
type='button'
class='collapsed '>Transparent Data Encryption<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0//security/tde" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0//security/master-key-rotation" class=''>Master key rotation</a></li>
</nav>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>Thin Clients<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//thin-clients/getting-started-with-thin-clients"
class=''
>Thin Clients Overview</a>
</li>
<li>
<a href="/docs/2.9.0//thin-clients/java-thin-client"
class=''
>Java Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0//thin-clients/dotnet-thin-client"
class=''
>.NET Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0//thin-clients/cpp-thin-client"
class=''
>C++ Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0//thin-clients/python-thin-client"
class=''
>Python Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0//thin-clients/php-thin-client"
class=''
>PHP Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0//thin-clients/nodejs-thin-client"
class=''
>Node.js Thin Client</a>
</li>
</nav>
</li>
<li>
<button type='button' data-guide-url="" class='group-toggle collapsed '>ODBC Driver<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//SQL/ODBC/odbc-driver"
class=''
>ODBC Driver</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/ODBC/connection-string-dsn"
class=''
>Connection String and DSN</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/ODBC/querying-modifying-data"
class=''
>Querying and Modifying Data</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/ODBC/specification"
class=''
>Specification</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/ODBC/data-types"
class=''
>Data Types</a>
</li>
<li>
<a href="/docs/2.9.0//SQL/ODBC/error-codes"
class=''
>Error Codes</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0//restapi" class='' >REST API</a>
</li>
<li>
<a href="/docs/2.9.0//control-script" class='' >Control Script</a>
</li>
<li>
<a href="/docs/2.9.0//plugins" class='' >Plugins</a>
</li>
<li>
<a href="/docs/2.9.0//sqlline" class='' >SQLLine</a>
</li>
<li>
<button type='button' data-guide-url="/sql-reference/sql-reference-overview" class='group-toggle collapsed '>SQL Reference<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0//sql-reference/ddl"
class=''
>Data Definition Language (DDL)</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/dml"
class=''
>Data Manipulation Language (DML)</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/transactions"
class=''
>Transactions</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/operational-commands"
class=''
>Operational Commands</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/aggregate-functions"
class=''
>Aggregate functions</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/numeric-functions"
class=''
>Numeric Functions</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/string-functions"
class=''
>String Functions</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/date-time-functions"
class=''
>Data and Time Functions</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/system-functions"
class=''
>System Functions</a>
</li>
<li>
<a href="/docs/2.9.0//sql-reference/data-types"
class=''
>Data Types</a>
</li>
</nav>
</li>
</nav>
<div class="left-nav__overlay"></div>
<article data-swiftype-index='true'>
<h1>Job Scheduling</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>When jobs arrive at the destination node, they are submitted to a thread pool and scheduled for execution in random order.
However, you can change job ordering by configuring <code>CollisionSpi</code>.
The <code>CollisionSpi</code> interface provides a way to control how jobs are scheduled for processing on each node.</p>
</div>
<div class="paragraph">
<p>Ignite provides several implementations of the <code>CollisionSpi</code> interface:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>FifoQueueCollisionSpi</code> — simple FIFO ordering in multiple threads. This implementation is used by default;</p>
</li>
<li>
<p><code>PriorityQueueCollisionSpi</code> — priority ordering;</p>
</li>
<li>
<p><code>JobStealingFailoverSpi</code> — use this implementation to enable <a href="/docs/2.9.0/distributed-computing/load-balancing#job-stealing">job stealing</a>.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>To enable a specific collision spi, change the <code>IgniteConfiguration.collisionSpi</code> property.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="fifo-ordering">FIFO Ordering</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>FifoQueueCollisionSpi</code> provides FIFO ordering of jobs as they arrive. The jobs are executed in multiple threads. The number of threads is controlled by the <code>parallelJobsNumber</code> parameter. The default value equals 2 times the number of processor cores.</p>
</div>
<code-tabs><code-tab data-tab='XML'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="xml"><span class="nt">&lt;bean</span> <span class="na">class=</span><span class="s">"org.apache.ignite.configuration.IgniteConfiguration"</span><span class="nt">&gt;</span>
<span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">"collisionSpi"</span><span class="nt">&gt;</span>
<span class="nt">&lt;bean</span> <span class="na">class=</span><span class="s">"org.apache.ignite.spi.collision.fifoqueue.FifoQueueCollisionSpi"</span><span class="nt">&gt;</span>
<span class="c">&lt;!-- Execute one job at a time. --&gt;</span>
<span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">"parallelJobsNumber"</span> <span class="na">value=</span><span class="s">"1"</span><span class="nt">/&gt;</span>
<span class="nt">&lt;/bean&gt;</span>
<span class="nt">&lt;/property&gt;</span>
<span class="nt">&lt;/bean&gt;</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='Java'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="nc">FifoQueueCollisionSpi</span> <span class="n">colSpi</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">FifoQueueCollisionSpi</span><span class="o">();</span>
<span class="c1">// Execute jobs sequentially, one at a time,</span>
<span class="c1">// by setting parallel job number to 1.</span>
<span class="n">colSpi</span><span class="o">.</span><span class="na">setParallelJobsNumber</span><span class="o">(</span><span class="mi">1</span><span class="o">);</span>
<span class="nc">IgniteConfiguration</span> <span class="n">cfg</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">IgniteConfiguration</span><span class="o">();</span>
<span class="c1">// Override default collision SPI.</span>
<span class="n">cfg</span><span class="o">.</span><span class="na">setCollisionSpi</span><span class="o">(</span><span class="n">colSpi</span><span class="o">);</span>
<span class="c1">// Start a node.</span>
<span class="nc">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="nc">Ignition</span><span class="o">.</span><span class="na">start</span><span class="o">(</span><span class="n">cfg</span><span class="o">);</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='C#/.NET' data-unavailable='true'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code>This API is not presently available for C#/.NET. You can use XML configuration.</code></pre>
</div>
</div></code-tab></code-tabs>
</div>
</div>
<div class="sect1">
<h2 id="priority-ordering">Priority Ordering</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Use <code>PriorityQueueCollisionSpi</code> to assign priorities to individual jobs, so that jobs with higher priority are executed ahead of lower priority jobs. You can also specify the number of threads to process jobs.</p>
</div>
<code-tabs><code-tab data-tab='XML'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="xml"><span class="nt">&lt;bean</span> <span class="na">class=</span><span class="s">"org.apache.ignite.configuration.IgniteConfiguration"</span><span class="nt">&gt;</span>
<span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">"collisionSpi"</span><span class="nt">&gt;</span>
<span class="nt">&lt;bean</span> <span class="na">class=</span><span class="s">"org.apache.ignite.spi.collision.priorityqueue.PriorityQueueCollisionSpi"</span><span class="nt">&gt;</span>
<span class="c">&lt;!-- Change the parallel job number if needed.
Default is number of cores times 2. --&gt;</span>
<span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">"parallelJobsNumber"</span> <span class="na">value=</span><span class="s">"5"</span><span class="nt">/&gt;</span>
<span class="nt">&lt;/bean&gt;</span>
<span class="nt">&lt;/property&gt;</span>
<span class="nt">&lt;/bean&gt;</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='Java'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="nc">PriorityQueueCollisionSpi</span> <span class="n">colSpi</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">PriorityQueueCollisionSpi</span><span class="o">();</span>
<span class="c1">// Change the parallel job number if needed.</span>
<span class="c1">// Default is number of cores times 2.</span>
<span class="n">colSpi</span><span class="o">.</span><span class="na">setParallelJobsNumber</span><span class="o">(</span><span class="mi">5</span><span class="o">);</span>
<span class="nc">IgniteConfiguration</span> <span class="n">cfg</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">IgniteConfiguration</span><span class="o">();</span>
<span class="c1">// Override default collision SPI.</span>
<span class="n">cfg</span><span class="o">.</span><span class="na">setCollisionSpi</span><span class="o">(</span><span class="n">colSpi</span><span class="o">);</span>
<span class="c1">// Start a node.</span>
<span class="nc">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="nc">Ignition</span><span class="o">.</span><span class="na">start</span><span class="o">(</span><span class="n">cfg</span><span class="o">);</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='C#/.NET' data-unavailable='true'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code>This API is not presently available for C#/.NET. You can use XML configuration.</code></pre>
</div>
</div></code-tab><code-tab data-tab='C++' data-unavailable='true'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code>This API is not presently available for C++. You can use XML configuration.</code></pre>
</div>
</div></code-tab></code-tabs>
<div class="paragraph">
<p>Task priorities are set in the <a href="/docs/2.9.0/distributed-computing/map-reduce#distributed-task-session">task session</a> via the <code>grid.task.priority</code> attribute. If no priority is assigned to a task, then the default priority of 0 is used.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyUrgentTask</span> <span class="kd">extends</span> <span class="nc">ComputeTaskSplitAdapter</span><span class="o">&lt;</span><span class="nc">Object</span><span class="o">,</span> <span class="nc">Object</span><span class="o">&gt;</span> <span class="o">{</span>
<span class="c1">// Auto-injected task session.</span>
<span class="nd">@TaskSessionResource</span>
<span class="kd">private</span> <span class="nc">ComputeTaskSession</span> <span class="n">taskSes</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="nc">Collection</span><span class="o">&lt;</span><span class="nc">ComputeJob</span><span class="o">&gt;</span> <span class="nf">split</span><span class="o">(</span><span class="kt">int</span> <span class="n">gridSize</span><span class="o">,</span> <span class="nc">Object</span> <span class="n">arg</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// Set high task priority.</span>
<span class="n">taskSes</span><span class="o">.</span><span class="na">setAttribute</span><span class="o">(</span><span class="s">"grid.task.priority"</span><span class="o">,</span> <span class="mi">10</span><span class="o">);</span>
<span class="nc">List</span><span class="o">&lt;</span><span class="nc">ComputeJob</span><span class="o">&gt;</span> <span class="n">jobs</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ArrayList</span><span class="o">&lt;&gt;(</span><span class="n">gridSize</span><span class="o">);</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;=</span> <span class="n">gridSize</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="n">jobs</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="k">new</span> <span class="nc">ComputeJobAdapter</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="nc">Object</span> <span class="nf">execute</span><span class="o">()</span> <span class="kd">throws</span> <span class="nc">IgniteException</span> <span class="o">{</span>
<span class="c1">//your implementation goes here</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="o">}</span>
<span class="c1">// These jobs will be executed with higher priority.</span>
<span class="k">return</span> <span class="n">jobs</span><span class="o">;</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="nc">Object</span> <span class="nf">reduce</span><span class="o">(</span><span class="nc">List</span><span class="o">&lt;</span><span class="nc">ComputeJobResult</span><span class="o">&gt;</span> <span class="n">results</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">IgniteException</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span></code></pre>
</div>
</div>
</div>
</div>
</article>
<nav class="right-nav" data-swiftype-index='false'>
<ul class="sectlevel1">
<li><a href="#fifo-ordering">FIFO Ordering</a></li>
<li><a href="#priority-ordering">Priority Ordering</a></li>
</ul>
<footer>
</footer>
</nav>
</section>
<script type='module' src='/assets/js/code-copy-to-clipboard.js' async crossorigin></script>
<script>
// inits deep anchors -- needs to be done here because of https://www.bryanbraun.com/anchorjs/#dont-run-it-too-late
anchors.add('.page-docs h1, .page-docs h2, .page-docs h3:not(.discrete), .page-docs h4, .page-docs h5');
anchors.options = {
placement: 'right',
visible: 'always'
};
</script>
<!-- load google fonts async -->
<script type="text/javascript">
WebFontConfig = {
google: { families: [ 'Open+Sans:300,400,600,700&display=swap' ] }
};
(function() {
var wf = document.createElement('script');
wf.src = 'https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
wf.type = 'text/javascript';
wf.async = 'true';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(wf, s);
})(); </script>
<script src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
<script>
docsearch({
// Your apiKey and indexName will be given to you once
// we create your config
apiKey: '25626fae796133dc1e734c6bcaaeac3c',
indexName: 'docsearch',
//appId: '<APP_ID>', // Should be only included if you are running DocSearch on your own.
// Replace inputSelector with a CSS selector
// matching your search input
inputSelector: '#search-input',
// Set debug to true to inspect the dropdown
debug: true,
});
</script>
<script type='module' src='/assets/js/index.js?1598500266' async crossorigin></script>
<script type='module' src='/assets/js/versioning.js?1598500266' async crossorigin></script>
</body>
</html>