You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2021/02/10 00:14:52 UTC

[accumulo-website] branch next-release updated (73f66ef -> d02d8b0)

This is an automated email from the ASF dual-hosted git repository.

ctubbsii pushed a change to branch next-release
in repository https://gitbox.apache.org/repos/asf/accumulo-website.git.


 discard 73f66ef  Update Compaction documentation apache/accumulo#1613 (#232)
 discard c513be3  Update 2.x docs for master to manager rename (#263)
     new b7ce444  Extract safe changes from #232 and #263
     new 800331d  Update 2.x docs for master to manager rename (#263)
     new d02d8b0  Update Compaction documentation apache/accumulo#1613 (#232)

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (73f66ef)
            \
             N -- N -- N   refs/heads/next-release (d02d8b0)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:


[accumulo-website] 01/02: Update 2.x docs for master to manager rename (#263)

Posted by ct...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ctubbsii pushed a commit to branch next-release
in repository https://gitbox.apache.org/repos/asf/accumulo-website.git

commit 800331d268dfd2b9ee30b8802f899d02c53eaa54
Author: Brian Loss <br...@apache.org>
AuthorDate: Tue Feb 9 18:55:07 2021 -0500

    Update 2.x docs for master to manager rename (#263)
    
    * Update server-properties.md with updated (renamed) properties.
    * Update references to master under _docs-2 to manager (not including
      apidocs).
    * Document binary/wire incompatibility between 2.0.x and 2.1.
    * Update 2.1 release notes with specifics about master/manager renaming.
---
 _docs-2/administration/fate.md               |   4 +-
 _docs-2/administration/in-depth-install.md   |  42 ++++----
 _docs-2/administration/monitoring-metrics.md |   4 +-
 _docs-2/administration/replication.md        |  14 +--
 _docs-2/administration/upgrading.md          |  26 +++++
 _docs-2/configuration/files.md               |  10 +-
 _docs-2/configuration/overview.md            |   4 +-
 _docs-2/configuration/server-properties.md   | 146 ++++++++++++++++-----------
 _docs-2/development/high_speed_ingest.md     |   2 +-
 _docs-2/development/proxy.md                 |   2 +-
 _docs-2/getting-started/design.md            |  24 ++---
 _docs-2/getting-started/features.md          |  20 ++--
 _docs-2/getting-started/glossary.md          |   4 +
 _docs-2/getting-started/quickstart.md        |  20 ++--
 _docs-2/security/kerberos.md                 |  22 ++--
 _docs-2/troubleshooting/advanced.md          |   8 +-
 _docs-2/troubleshooting/basic.md             |  14 +--
 _docs-2/troubleshooting/tools.md             |   6 +-
 18 files changed, 219 insertions(+), 153 deletions(-)

diff --git a/_docs-2/administration/fate.md b/_docs-2/administration/fate.md
index 0dd4920..208df9e 100644
--- a/_docs-2/administration/fate.md
+++ b/_docs-2/administration/fate.md
@@ -14,7 +14,7 @@ very difficult to achieve. Accumulo includes a Fault-Tolerant Executor (FATE) wh
 is widely used server-side to implement the client API safely and correctly.
 
 Fault-Tolerant Executor (FATE) is the implementation detail which ensures that tables in creation when the
-Master dies will be successfully created when another Master process is started.
+Manager dies will be successfully created when another Manager process is started.
 This alleviates the need for any external tools to correct some bad state -- Accumulo can
 undo the failure and self-heal without any external intervention.
 
@@ -22,7 +22,7 @@ undo the failure and self-heal without any external intervention.
 
 FATE consists of two primary components: a repeatable, persisted operation (REPO), a storage
 layer for REPOs and an execution system to run REPOs. Accumulo uses ZooKeeper as the storage
-layer for FATE and the Accumulo Master acts as the execution system to run REPOs.
+layer for FATE and the Accumulo Manager acts as the execution system to run REPOs.
 
 The important characteristic of REPOs are that they implemented in a way that is idempotent:
 every operation must be able to undo or replay a partial execution of itself. Requiring the
diff --git a/_docs-2/administration/in-depth-install.md b/_docs-2/administration/in-depth-install.md
index a70187e..8f4f605 100644
--- a/_docs-2/administration/in-depth-install.md
+++ b/_docs-2/administration/in-depth-install.md
@@ -41,10 +41,10 @@ their value in [accumulo.properties].
 |9995 | Accumulo HTTP monitor | [monitor.port.client]
 |9997 | Tablet Server | [tserver.port.client]
 |9998 | Accumulo GC | [gc.port.client]
-|9999 | Master Server | [master.port.client]
+|9999 | Manager Server | [manager.port.client]
 |12234 | Accumulo Tracer | [trace.port.client]
 |42424 | Accumulo Proxy Server | n/a
-|10001 | Master Replication service | [master.replication.coordinator.port]
+|10001 | Manager Replication service | [manager.replication.coordinator.port]
 |10002 | TabletServer Replication service | [replication.receipt.service.port]
 
 In addition, the user can provide `0` and an ephemeral port will be chosen instead. This
@@ -81,7 +81,7 @@ These scripts will be used in the remaining instructions to configure and run Ac
 
 Accumulo requires HDFS and ZooKeeper to be configured and running
 before starting. Password-less SSH should be configured between at least the
-Accumulo master and TabletServer machines. It is also a good idea to run Network
+Accumulo manager and TabletServer machines. It is also a good idea to run Network
 Time Protocol (NTP) within the cluster to ensure nodes' clocks don't get too out of
 sync, which can cause problems with automatically timestamped data.
 
@@ -94,12 +94,12 @@ installed Accumulo using downstream packaging, the `conf/` could be something el
 Before starting Accumulo, the configuration files [accumulo-env.sh] and [accumulo.properties] must
 exist in `conf/` and be properly configured. If you are using `accumulo-cluster` to launch a
 cluster, the `conf/` directory must also contain host files for Accumulo services (i.e [gc],
-[masters], [monitor][monitor-host], [tservers], [tracers]). You can either create these files
+[managers], [monitor][monitor-host], [tservers], [tracers]). You can either create these files
 manually or run `accumulo-cluster create-config`.
 
 Logging is configured in [accumulo-env.sh] to use three log4j configuration files in `conf/`. The
 file used depends on the Accumulo command or service being run. Logging for most Accumulo services
-(i.e Master, TabletServer, Garbage Collector) is configured by [log4j-service.properties] except for
+(i.e Manager, TabletServer, Garbage Collector) is configured by [log4j-service.properties] except for
 the Monitor which is configured by [log4j-monitor.properties]. All Accumulo commands (i.e `init`,
 `shell`, etc) are configured by [log4j.properties].
 
@@ -123,7 +123,7 @@ by set in the `JAVA_OPTS` settings for 'tservers' in [accumulo-env.sh]. Note the
 syntax is that of the Java JVM command line options. This value should be less than the
 physical memory of the machines running TabletServers.
 
-There are similar options for the master's memory usage and the garbage collector
+There are similar options for the manager's memory usage and the garbage collector
 process. Reduce these if they exceed the physical RAM of your hardware and
 increase them, within the bounds of the physical RAM, if a process fails because of
 insufficient memory.
@@ -131,7 +131,7 @@ insufficient memory.
 Note that you will be specifying the Java heap space in [accumulo-env.sh]. You should
 make sure that the total heap space used for the Accumulo tserver and the Hadoop
 DataNode and TaskTracker is less than the available memory on each worker node in
-the cluster. On large clusters, it is recommended that the Accumulo master, Hadoop
+the cluster. On large clusters, it is recommended that the Accumulo manager, Hadoop
 NameNode, secondary NameNode, and Hadoop JobTracker all be run on separate
 machines to allow them to use more heap space. If you are running these on the
 same machine on a small cluster, likewise make sure their heap space settings fit
@@ -199,10 +199,10 @@ performance to the write-ahead log file which will slow ingest.
 ### Cluster Specification
 
 If you are using `accumulo-cluster` to start a cluster, configure the following on the
-machine that will serve as the Accumulo master:
+machine that will serve as the Accumulo manager:
 
-1. Run `accumulo-cluster create-config` to create the [masters] and [tservers] files.
-2. Write the IP address or domain name of the Accumulo Master to the [masters] file in `conf/`.
+1. Run `accumulo-cluster create-config` to create the [managers] and [tservers] files.
+2. Write the IP address or domain name of the Accumulo Manager to the [managers] file in `conf/`.
 3. Write the IP addresses or domain name of the machines that will be TabletServers to the
    [tservers] file in `conf/`, one per line.
 
@@ -228,7 +228,7 @@ documentation for details.
 ### Hostnames in configuration files
 
 Accumulo has a number of configuration files which can contain references to other hosts in your
-network. All of the "host" configuration files for Accumulo ([gc], [masters], [tservers],
+network. All of the "host" configuration files for Accumulo ([gc], [managers], [tservers],
 [monitor][monitor-host], [tracers]) as well as [instance.volumes] in [accumulo.properties] must
 contain some host reference.
 
@@ -238,7 +238,7 @@ cluster. Failing to consistently use FQDNs can have unexpected consequences in h
 the FileSystem.
 
 A common way for this problem can be observed is via applications that use Bulk Ingest. The Accumulo
-Master coordinates moving the input files to Bulk Ingest to an Accumulo-managed directory. However,
+Manager coordinates moving the input files to Bulk Ingest to an Accumulo-managed directory. However,
 Accumulo cannot safely move files across different Hadoop FileSystems. This is problematic because
 Accumulo also cannot make reliable assertions across what is the same FileSystem which is specified
 with different names. Naively, while 127.0.0.1:8020 might be a valid identifier for an HDFS
@@ -246,7 +246,7 @@ instance, Accumulo identifies `localhost:8020` as a different HDFS instance than
 
 ### Deploy Configuration
 
-Copy [accumulo-env.sh] and [accumulo.properties] from the `conf/` directory on the master to all
+Copy [accumulo-env.sh] and [accumulo.properties] from the `conf/` directory on the manager to all
 Accumulo tablet servers. The "host" configuration files files `accumulo-cluster` only need to be on
 servers where that command is run.
 
@@ -389,7 +389,7 @@ can provide some information about the status of tables via reading the metadata
 
 ### Stopping Accumulo
 
-To shutdown cleanly, run `accumulo-cluster stop` and the master will orchestrate the
+To shutdown cleanly, run `accumulo-cluster stop` and the manager will orchestrate the
 shutdown of all the tablet servers. Shutdown waits for all minor compactions to finish, so it may
 take some time for particular configurations.
 
@@ -434,7 +434,7 @@ can be use to start/stop processes on a node.
 #### A note on rolling restarts
 
 For sufficiently large Accumulo clusters, restarting multiple TabletServers within a short window
-can place significant load on the Master server. If slightly lower availability is acceptable, this
+can place significant load on the Manager server. If slightly lower availability is acceptable, this
 load can be reduced by globally setting [table.suspend.duration] to a positive value.
 
 With [table.suspend.duration] set to, say, `5m`, Accumulo will wait for 5 minutes for any dead
@@ -511,7 +511,7 @@ demonstrates basic audit logging with example configuration options for log4j.
 In the event of TabletServer failure or error on shutting Accumulo down, some
 mutations may not have been minor compacted to HDFS properly. In this case,
 Accumulo will automatically reapply such mutations from the write-ahead log
-either when the tablets from the failed server are reassigned by the Master (in the
+either when the tablets from the failed server are reassigned by the Manager (in the
 case of a single TabletServer failure) or the next time Accumulo starts (in the event of
 failure during shutdown).
 
@@ -612,7 +612,7 @@ kernel panic when provisioning a memory page. This often happens in VMs due to
 the large number of processes that must run in a small memory footprint. In
 addition to the Linux core processes, a single-node Accumulo setup requires a
 Hadoop Namenode, a Hadoop Secondary Namenode a Hadoop Datanode, a Zookeeper
-server, an Accumulo Master, an Accumulo GC and an Accumulo TabletServer.
+server, an Accumulo Manager, an Accumulo GC and an Accumulo TabletServer.
 Typical setups also include an Accumulo Monitor, an Accumulo Tracer, a Hadoop
 ResourceManager, a Hadoop NodeManager, provisioning software, and client
 applications. Between all of these processes, it is not uncommon to
@@ -666,7 +666,7 @@ requirements, it is a good idea to reduce maximum heap limits and turn off
 unnecessary processes. If you're not using YARN in your application, you can
 turn off the ResourceManager and NodeManager. If you're not expecting to
 re-provision the cluster frequently you can turn off or reduce provisioning
-processes such as Salt Stack minions and masters.
+processes such as Salt Stack minions and managers.
 
 #### Disk Space
 
@@ -730,10 +730,10 @@ Please check the release notes for your Accumulo version or use the
 [monitor.port.client]: {% purl monitor.port.client %}
 [tserver.port.client]: {% purl tserver.port.client %}
 [gc.port.client]: {% purl gc.port.client %}
-[master.port.client]: {% purl master.port.client %}
+[manager.port.client]: {% purl manager.port.client %}
 [trace.port.client]: {% purl trace.port.client %}
 [table.suspend.duration]: {% purl table.suspend.duration %}
-[master.replication.coordinator.port]: {% purl master.replication.coordinator.port %}
+[manager.replication.coordinator.port]: {% purl manager.replication.coordinator.port %}
 [replication.receipt.service.port]: {% purl replication.receipt.service.port %}
 [tserver.memory.maps.native.enabled]: {% purl tserver.memory.maps.native.enabled %}
 [tserver.memory.maps.max]: {% purl tserver.memory.maps.max %}
@@ -751,7 +751,7 @@ Please check the release notes for your Accumulo version or use the
 [accumulo-client.properties]: {% durl configuration/files#accumulo-clientproperties %}
 [gc]: {% durl configuration/files#gc %}
 [monitor-host]: {% durl configuration/files#monitor %}
-[masters]: {% durl configuration/files#masters %}
+[managers]: {% durl configuration/files#managers %}
 [tservers]: {% durl configuration/files#tservers %}
 [tracers]: {% durl configuration/files#tracers %}
 [log4j-service.properties]: {% durl configuration/files#log4j-serviceproperties %}
diff --git a/_docs-2/administration/monitoring-metrics.md b/_docs-2/administration/monitoring-metrics.md
index a56624e..071254e 100644
--- a/_docs-2/administration/monitoring-metrics.md
+++ b/_docs-2/administration/monitoring-metrics.md
@@ -21,13 +21,13 @@ displaying various metrics over time. These include ingest and scan performance
 <img src="{{ site.baseurl }}/images/accumulo-monitor-1.png" alt="monitor overview"/>
 </a>
 
-The Master Server, Tablet Servers, and Tables pages display metrics grouped in different ways (e.g. by tablet server or by table).
+The Manager Server, Tablet Servers, and Tables pages display metrics grouped in different ways (e.g. by tablet server or by table).
 Metrics typically include number of entries (key/value pairs), ingest and query rates.
 The number of running scans, major and minor compactions are in the form _number_running_ (_number_queued_).
 Another important metric is hold time, which is the amount of time a tablet has been waiting but unable to flush its memory in a minor compaction.
 
 <a class="thumbnail" href="{{ site.baseurl }}/images/accumulo-monitor-2.png">
-<img src="{{ site.baseurl }}/images/accumulo-monitor-2.png" alt="monitor master"/>
+<img src="{{ site.baseurl }}/images/accumulo-monitor-2.png" alt="monitor manager"/>
 </a>
 
 The Server Activity page graphically displays tablet server status, with each server represented as a circle or square.
diff --git a/_docs-2/administration/replication.md b/_docs-2/administration/replication.md
index b849cd0..ff3a5fe 100644
--- a/_docs-2/administration/replication.md
+++ b/_docs-2/administration/replication.md
@@ -31,14 +31,14 @@ the system wants to send.
 
 Data is replicated by using the Write-Ahead logs (WAL) that each TabletServer is
 already maintaining. TabletServers record which WALs have data that need to be
-replicated to the `accumulo.metadata` table. The Master uses these records,
+replicated to the `accumulo.metadata` table. The Manager uses these records,
 combined with the local Accumulo table that the WAL was used with, to create records
 in the `replication` table which track which peers the given WAL should be
-replicated to. The Master latter uses these work entries to assign the actual
+replicated to. The Manager latter uses these work entries to assign the actual
 replication task to a local TabletServer using ZooKeeper. A TabletServer will get
 a lock in ZooKeeper for the replication of this file to a peer, and proceed to
 replicate to the peer, recording progress in the `replication` table as
-data is successfully replicated on the peer. Later, the Master and Garbage Collector
+data is successfully replicated on the peer. Later, the Manager and Garbage Collector
 will remove records from the `accumulo.metadata` and `replication` tables
 and files from HDFS, respectively, after replication to all peers is complete.
 
@@ -133,14 +133,14 @@ and the full class name for the implementation. This can be configured via the s
 
 Two implementations of [WorkAssigner] are provided:
 
-1. The {% jlink org.apache.accumulo.master.replication.UnorderedWorkAssigner %} can be used to overcome the limitation
+1. The {% jlink org.apache.accumulo.manager.replication.UnorderedWorkAssigner %} can be used to overcome the limitation
 of only a single WAL being replicated to a target and peer at any time. Depending on the table schema,
 it's possible that multiple versions of the same Key with different values are infrequent or nonexistent.
 In this case, parallel replication to a peer and target is possible without any downsides. In the case
 where this implementation is used were column updates are frequent, it is possible that there will be
 an inconsistency between the primary and the peer.
 
-2. The {% jlink org.apache.accumulo.master.replication.SequentialWorkAssigner %} is configured for an
+2. The {% jlink org.apache.accumulo.manager.replication.SequentialWorkAssigner %} is configured for an
 instance. The SequentialWorkAssigner ensures that, per peer and each remote identifier, each WAL is
 replicated in the order in which they were created. This is sufficient to ensure that updates to a table
 will be replayed in the correct order on the peer. This implementation has the downside of only replicating
@@ -159,7 +159,7 @@ section of this document. Theoretically, an implementation of this interface cou
 
 The [AccumuloReplicaSystem] uses Thrift to communicate with a peer Accumulo instance
 and replicate the necessary data. The TabletServer running on the primary will communicate
-with the Master on the peer to request the address of a TabletServer on the peer which
+with the Manager on the peer to request the address of a TabletServer on the peer which
 this TabletServer will use to replicate the data.
 
 The TabletServer on the primary will then replicate data in batches of a configurable
@@ -211,7 +211,7 @@ replication.name=primary
 replication.name=peer
 ```
 
-### masters and tservers files
+### managers and tservers files
 
 Be *sure* to use non-local IP addresses. Other nodes need to connect to it and using localhost will likely result in
 a local node talking to another local node.
diff --git a/_docs-2/administration/upgrading.md b/_docs-2/administration/upgrading.md
index 040f1ab..5f524d2 100644
--- a/_docs-2/administration/upgrading.md
+++ b/_docs-2/administration/upgrading.md
@@ -4,6 +4,32 @@ category: administration
 order: 7
 ---
 
+## Upgrading from 1.10.x or 2.0.x to 2.1
+
+The recommended way to upgrade from a prior 1.10.x or 2.0.x release is to stop Accumulo, upgrade
+to 2.1 and then start 2.1. To upgrade from a release prior to 1.10, follow the
+[below steps](#upgrading-from-189-to-20) to upgrade to 2.0 and then perform the upgrade to 2.1. A
+direct upgrade from releases prior to 1.10 has not been tested.
+
+### Rename master Properties, Config Files, and Script References
+
+Although not required until at least release 3.0, it is strongly recommended as a part of the
+upgrade to rename any properties in `accumulo.properties` (or properties specified on the command
+line) starting with `master.`. `master` should be replaced with `manager`.
+
+The configuration file `masters` which identifies the hostnames of the hosts running the manager
+server(s) should be renamed to `managers`.
+
+Any reference to `master` in other scripts (e.g., invoking `accumulo-service master` from an init
+script) should be renamed to `manager` (`accumulo-service manager` for the previous example).
+
+If the manager is not started using the provided `accumulo-cluster` or `accumulo-service` scripts,
+then a one-time upgrade step will need to be performed. Run the `RenameMasterDirInZK` utility
+after installing 2.1 but before starting it.
+```
+${ACCUMULO_HOME}/bin/accumulo org.apache.accumulo.manager.upgrade.RenameMasterDirInZK
+```
+
 ## Upgrading from 1.8/9 to 2.0
 
 Follow the steps below to upgrade your Accumulo instance and client to 2.0.
diff --git a/_docs-2/configuration/files.md b/_docs-2/configuration/files.md
index ba4e211..03f8493 100644
--- a/_docs-2/configuration/files.md
+++ b/_docs-2/configuration/files.md
@@ -40,7 +40,7 @@ Accumulo processes. See the [quick start] for help with configuring this file.
 ### log4j-service.properties
 
 The {% ghc assemble/conf/log4j-service.properties %} file configures logging for most Accumulo services
-(i.e [Master], [Tablet Server], [Garbage Collector]) except for the Monitor.
+(i.e [Manager], [Tablet Server], [Garbage Collector]) except for the Monitor.
 
 ### log4j-monitor.properties
 
@@ -62,10 +62,10 @@ the command `accumulo-cluster create-config`.
 Contains a list of hosts where [Garbage Collector] processes should run. While only one host is needed, others can be specified
 to run standby Garbage Collectors that can take over if the lead Garbage Collector fails.
 
-### masters
+### managers
 
-Contains a list of hosts where [Master] processes should run. While only one host is needed, others can be specified
-to run on standby Masters that can take over if the lead Master fails.
+Contains a list of hosts where [Manager] processes should run. While only one host is needed, others can be specified
+to run on standby Managers that can take over if the lead Manager fails.
 
 ### monitor
 
@@ -83,7 +83,7 @@ Contains a list of hosts where [Tracer] processes should run. While only one hos
 to run standby Tracers that can take over if the lead Tracer fails.
 
 [Garbage Collector]: {% durl getting-started/design#garbage-collector %}
-[Master]: {% durl getting-started/design#master %}
+[Manager]: {% durl getting-started/design#manager %}
 [Tablet Server]: {% durl getting-started/design#tablet-server %}
 [Monitor]: {% durl getting-started/design#monitor %}
 [Tracer]: {% durl getting-started/design#tracer %}
diff --git a/_docs-2/configuration/overview.md b/_docs-2/configuration/overview.md
index 588af20..f819000 100644
--- a/_docs-2/configuration/overview.md
+++ b/_docs-2/configuration/overview.md
@@ -13,7 +13,7 @@ Configuration is managed differently for Accumulo clients and servers.
 
 ## Server Configuration
 
-Accumulo processes (i.e master, tablet server, monitor, etc) are configured by [server properties] whose values can be
+Accumulo processes (i.e manager, tablet server, monitor, etc) are configured by [server properties] whose values can be
 set in the following configuration locations (with increasing precedence):
 
 1. [Default](#default) - All properties have a default value
@@ -34,7 +34,7 @@ While default values have the lowest precedence, they are usually optimal.  Howe
 ### Site
 
 Site configuration refers to [server properties] set in the [accumulo.properties] file which can be found in the `conf/` directory. Site configuration will override the default value
-of a property. If you are running Accumulo on a cluster, any updates to accumulo.properties must be synced across the cluster. Accumulo processes (master, tserver, etc) read their
+of a property. If you are running Accumulo on a cluster, any updates to accumulo.properties must be synced across the cluster. Accumulo processes (manager, tserver, etc) read their
 local [accumulo.properties] on start up so processes must be restarted to apply changes. Certain properties can only be set in accumulo.properties. These properties have **zk mutable: no**
 in their description. Setting properties in accumulo.properties allows you to configure tablet servers with different settings.
 
diff --git a/_docs-2/configuration/server-properties.md b/_docs-2/configuration/server-properties.md
index ee1ea79..ed1a7a1 100644
--- a/_docs-2/configuration/server-properties.md
+++ b/_docs-2/configuration/server-properties.md
@@ -6,19 +6,24 @@ order: 4
 
 <!-- WARNING: Do not edit this file. It is a generated file that is copied from Accumulo build (from core/target/generated-docs) -->
 
-Below are properties set in `accumulo.properties` or the Accumulo shell that configure Accumulo servers (i.e tablet server, master, etc). Properties labeled 'Experimental' could be part of an incomplete feature or have a higher risk of changing in the future.
+Below are properties set in `accumulo.properties` or the Accumulo shell that configure Accumulo servers (i.e tablet server, manager, etc). Properties labeled 'Experimental' could be part of an incomplete feature or have a higher risk of changing in the future.
 
 | Property | Description |
 |--------------|-------------|
 | <a name="gc_prefix" class="prop"></a> **gc.*** | Properties in this category affect the behavior of the accumulo garbage collector. |
+| <a name="gc_candidate_batch_size" class="prop"></a> gc.candidate.batch.size | The batch size used for garbage collection.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `8M` |
 | <a name="gc_cycle_delay" class="prop"></a> gc.cycle.delay | Time between garbage collection cycles. In each cycle, old RFiles or write-ahead logs no longer in use are removed from the filesystem.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
 | <a name="gc_cycle_start" class="prop"></a> gc.cycle.start | Time to wait before attempting to garbage collect any old RFiles or write-ahead logs.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `30s` |
+| <a name="gc_metrics_enabled" class="prop"></a> gc.metrics.enabled | Enable detailed gc metrics reporting with hadoop metrics.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `true` |
 | <a name="gc_port_client" class="prop"></a> gc.port.client | The listening port for the garbage collector's monitor service<br>**type:** PORT, **zk mutable:** yes but requires restart of the gc, **default value:** `9998` |
+| <a name="gc_post_metadata_action" class="prop"></a> gc.post.metadata.action | When the gc runs it can make a lot of changes to the metadata, on completion,  to force the changes to be written to disk, the metadata and root tables can be flushed and possibly compacted. Legal values are: compact - which both flushes and compacts the metadata; flush - which flushes only (compactions may be triggered if required); or none<br>**type:** GC_POST_ACTION, **zk mutable:** yes, **default value:** [...]
+| <a name="gc_safemode" class="prop"></a> gc.safemode | Provides listing of files to be deleted but does not delete any files<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="gc_threads_delete" class="prop"></a> gc.threads.delete | The number of threads used to delete RFiles and write-ahead logs<br>**type:** COUNT, **zk mutable:** yes, **default value:** `16` |
 | <a name="gc_trace_percent" class="prop"></a> gc.trace.percent | Percent of gc cycles to trace<br>**type:** FRACTION, **zk mutable:** yes, **default value:** `0.01` |
 | <a name="gc_trash_ignore" class="prop"></a> gc.trash.ignore | Do not use the Trash, even if it is configured.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="general_prefix" class="prop"></a> **general.*** | Properties in this category affect the behavior of accumulo overall, but do not have to be consistent throughout a cloud. |
 | <a name="general_classpaths" class="prop"></a> general.classpaths | **Deprecated.** ~~This property is deprecated since 2.0.0. The class path should instead be configured by the launch environment (for example, accumulo-env.sh). A list of all of the places to look for a class. Order does matter, as it will look for the jar starting in the first location to the last. Supports full regex on filename alone.~~<br>~~**type:** STRING~~, ~~**zk mutable:** no~~, ~~**default value:** empty~~ |
+| <a name="general_context_class_loader_factory" class="prop"></a> general.context.class.loader.factory | Name of classloader factory to be used to create classloaders for named contexts, such as per-table contexts set by `table.class.loader.context`.<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** empty |
 | <a name="general_custom_prefix" class="prop"></a> **general.custom.*** | Prefix to be used for user defined system-wide properties. This may be particularly useful for system-wide configuration for various user-implementations of pluggable Accumulo features, such as the balancer or volume chooser. |
 | <a name="general_delegation_token_lifetime" class="prop"></a> general.delegation.token.lifetime | The length of time that delegation tokens and secret keys are valid<br>**type:** TIMEDURATION, **zk mutable:** no, **default value:** `7d` |
 | <a name="general_delegation_token_update_interval" class="prop"></a> general.delegation.token.update.interval | The length of time between generation of new secret keys<br>**type:** TIMEDURATION, **zk mutable:** no, **default value:** `1d` |
@@ -32,10 +37,10 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="general_security_credential_provider_paths" class="prop"></a> general.security.credential.provider.paths | Comma-separated list of paths to CredentialProviders<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
 | <a name="general_server_message_size_max" class="prop"></a> general.server.message.size.max | The maximum size of a message that can be sent to a server.<br>**type:** BYTES, **zk mutable:** no, **default value:** `1G` |
 | <a name="general_server_simpletimer_threadpool_size" class="prop"></a> general.server.simpletimer.threadpool.size | The number of threads to use for server-internal scheduled tasks<br>**type:** COUNT, **zk mutable:** no, **default value:** `1` |
-| <a name="general_vfs_cache_dir" class="prop"></a> general.vfs.cache.dir | The base directory to use for the vfs cache. The actual cached files will be located in a subdirectory, `accumulo-vfs-cache-<jvmProcessName>-${user.name}`, where `<jvmProcessName>` is determined by the JVM's internal management engine. The cache will keep a soft reference to all of the classes loaded in the VM. This should be on local disk on each node with sufficient space.<br>**type:** ABSOLUTEPATH, **zk mutabl [...]
-| <a name="general_vfs_classpaths" class="prop"></a> general.vfs.classpaths | Configuration for a system level vfs classloader. Accumulo jar can be configured here and loaded out of HDFS.<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
-| <a name="general_vfs_context_classpath_prefix" class="prop"></a> **general.vfs.context.classpath.*** | Properties in this category are define a classpath. These properties start  with the category prefix, followed by a context name. The value is a comma separated list of URIs. Supports full regex on filename alone. For example, general.vfs.context.classpath.cx1=hdfs://nn1:9902/mylibdir/*.jar. You can enable post delegation for a context, which will load classes from the context first i [...]
-| <a name="general_volume_chooser" class="prop"></a> general.volume.chooser | **Experimental.** The class that will be used to select which volume will be used to create new files.<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.server.fs.RandomVolumeChooser %} |
+| <a name="general_vfs_cache_dir" class="prop"></a> general.vfs.cache.dir | **Deprecated.** ~~The base directory to use for the vfs cache. The actual cached files will be located in a subdirectory, `accumulo-vfs-cache-<jvmProcessName>-${user.name}`, where `<jvmProcessName>` is determined by the JVM's internal management engine. The cache will keep a soft reference to all of the classes loaded in the VM. This should be on local disk on each node with sufficient space.~~<br>~~**type:** ABS [...]
+| <a name="general_vfs_classpaths" class="prop"></a> general.vfs.classpaths | **Deprecated.** ~~Configuration for a system level vfs classloader. Accumulo jar can be configured here and loaded out of HDFS.~~<br>~~**type:** STRING~~, ~~**zk mutable:** no~~, ~~**default value:** empty~~ |
+| <a name="general_vfs_context_classpath_prefix" class="prop"></a> **general.vfs.context.classpath.*** | **Deprecated.** ~~Properties in this category are define a classpath. These properties start  with the category prefix, followed by a context name. The value is a comma separated list of URIs. Supports full regex on filename alone. For example, general.vfs.context.classpath.cx1=hdfs://nn1:9902/mylibdir/*.jar. You can enable post delegation for a context, which will load classes from t [...]
+| <a name="general_volume_chooser" class="prop"></a> general.volume.chooser | **Experimental.** The class that will be used to select which volume will be used to create new files.<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.core.spi.fs.RandomVolumeChooser %} |
 | <a name="instance_prefix" class="prop"></a> **instance.*** | Properties in this category must be consistent throughout a cloud. This is enforced and servers won't be able to communicate if these differ. |
 | <a name="instance_crypto_opts_prefix" class="prop"></a> **instance.crypto.opts.*** | **Experimental.** Properties related to on-disk file encryption. |
 | <a name="instance_crypto_opts_sensitive_prefix" class="prop"></a> **instance.crypto.opts.sensitive.*** | **Experimental.** Sensitive properties related to on-disk file encryption. |
@@ -48,41 +53,45 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="instance_rpc_ssl_clientAuth" class="prop"></a> instance.rpc.ssl.clientAuth | Require clients to present certs signed by a trusted root<br>**type:** BOOLEAN, **zk mutable:** no, **default value:** `false` |
 | <a name="instance_rpc_ssl_enabled" class="prop"></a> instance.rpc.ssl.enabled | Use SSL for socket connections from clients and among accumulo services. Mutually exclusive with SASL RPC configuration.<br>**type:** BOOLEAN, **zk mutable:** no, **default value:** `false` |
 | <a name="instance_secret" class="prop"></a> instance.secret | A secret unique to a given instance that all servers must know in order to communicate with one another. It should be changed prior to the initialization of Accumulo. To change it after Accumulo has been initialized, use the ChangeSecret tool and then update accumulo.properties everywhere. Before using the ChangeSecret tool, make sure Accumulo is not running and you are logged in as the user that controls Accumulo files in H [...]
-| <a name="instance_security_authenticator" class="prop"></a> instance.security.authenticator | The authenticator class that accumulo will use to determine if a user has privilege to perform an action<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.server.security.handler.ZKAuthenticator %} |
-| <a name="instance_security_authorizor" class="prop"></a> instance.security.authorizor | The authorizor class that accumulo will use to determine what labels a user has privilege to see<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.server.security.handler.ZKAuthorizor %} |
-| <a name="instance_security_permissionHandler" class="prop"></a> instance.security.permissionHandler | The permission handler class that accumulo will use to determine if a user has privilege to perform an action<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.server.security.handler.ZKPermHandler %} |
-| <a name="instance_volumes" class="prop"></a> instance.volumes | A comma separated list of dfs uris to use. Files will be stored across these filesystems. If this is empty, then instance.dfs.uri will be used. After adding uris to this list, run 'accumulo init --add-volume' and then restart tservers. If entries are removed from this list then tservers will need to be restarted. After a uri is removed from the list Accumulo will not create new files in that location, however Accumulo can  [...]
+| <a name="instance_security_authenticator" class="prop"></a> instance.security.authenticator | **Experimental.** The authenticator class that accumulo will use to determine if a user has privilege to perform an action<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.server.security.handler.ZKAuthenticator %} |
+| <a name="instance_security_authorizor" class="prop"></a> instance.security.authorizor | **Experimental.** The authorizor class that accumulo will use to determine what labels a user has privilege to see<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.server.security.handler.ZKAuthorizor %} |
+| <a name="instance_security_permissionHandler" class="prop"></a> instance.security.permissionHandler | **Experimental.** The permission handler class that accumulo will use to determine if a user has privilege to perform an action<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.server.security.handler.ZKPermHandler %} |
+| <a name="instance_volumes" class="prop"></a> instance.volumes | A comma separated list of dfs uris to use. Files will be stored across these filesystems. In some situations, the first volume in this list may be treated differently, such as being preferred for writing out temporary files (for example, when creating a pre-split table). After adding uris to this list, run 'accumulo init --add-volume' and then restart tservers. If entries are removed from this list then tservers will need  [...]
 | <a name="instance_volumes_replacements" class="prop"></a> instance.volumes.replacements | Since accumulo stores absolute URIs changing the location of a namenode could prevent Accumulo from starting. The property helps deal with that situation. Provide a comma separated list of uri replacement pairs here if a namenode location changes. Each pair should be separated with a space. For example, if hdfs://nn1 was replaced with hdfs://nnA and hdfs://nn2 was replaced with hdfs://nnB, then se [...]
+| <a name="instance_volumes_upgrade_relative" class="prop"></a> instance.volumes.upgrade.relative | The volume dfs uri containing relative tablet file paths. Relative paths may exist in the metadata from versions prior to 1.6. This property is only required if a relative path is detected during the upgrade process and will only be used once.<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
 | <a name="instance_zookeeper_host" class="prop"></a> instance.zookeeper.host | Comma separated list of zookeeper servers<br>**type:** HOSTLIST, **zk mutable:** no, **default value:** `localhost:2181` |
 | <a name="instance_zookeeper_timeout" class="prop"></a> instance.zookeeper.timeout | Zookeeper session timeout; max value when represented as milliseconds should be no larger than 2147483647<br>**type:** TIMEDURATION, **zk mutable:** no, **default value:** `30s` |
-| <a name="master_prefix" class="prop"></a> **master.*** | Properties in this category affect the behavior of the master server |
-| <a name="master_bulk_rename_threadpool_size" class="prop"></a> master.bulk.rename.threadpool.size | The number of threads to use when moving user files to bulk ingest directories under accumulo control<br>**type:** COUNT, **zk mutable:** yes, **default value:** `20` |
-| <a name="master_bulk_retries" class="prop"></a> master.bulk.retries | The number of attempts to bulk import a RFile before giving up.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `3` |
-| <a name="master_bulk_threadpool_size" class="prop"></a> master.bulk.threadpool.size | The number of threads to use when coordinating a bulk import.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `5` |
-| <a name="master_bulk_timeout" class="prop"></a> master.bulk.timeout | The time to wait for a tablet server to process a bulk import request<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
-| <a name="master_bulk_tserver_regex" class="prop"></a> master.bulk.tserver.regex | Regular expression that defines the set of Tablet Servers that will perform bulk imports<br>**type:** STRING, **zk mutable:** yes, **default value:** empty |
-| <a name="master_fate_metrics_enabled" class="prop"></a> master.fate.metrics.enabled | Enable reporting of FATE metrics in JMX (and logging with Hadoop Metrics2<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
-| <a name="master_fate_metrics_min_update_interval" class="prop"></a> master.fate.metrics.min.update.interval | Limit calls from metric sinks to zookeeper to update interval<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `60s` |
-| <a name="master_fate_threadpool_size" class="prop"></a> master.fate.threadpool.size | The number of threads used to run fault-tolerant executions (FATE). These are primarily table operations like merge.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `4` |
-| <a name="master_lease_recovery_interval" class="prop"></a> master.lease.recovery.interval | The amount of time to wait after requesting a write-ahead log to be recovered<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5s` |
-| <a name="master_metadata_suspendable" class="prop"></a> master.metadata.suspendable | Allow tablets for the accumulo.metadata table to be suspended via table.suspend.duration.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
-| <a name="master_port_client" class="prop"></a> master.port.client | The port used for handling client connections on the master<br>**type:** PORT, **zk mutable:** yes but requires restart of the master, **default value:** `9999` |
-| <a name="master_recovery_delay" class="prop"></a> master.recovery.delay | When a tablet server's lock is deleted, it takes time for it to completely quit. This delay gives it time before log recoveries begin.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `10s` |
-| <a name="master_replication_coordinator_minthreads" class="prop"></a> master.replication.coordinator.minthreads | Minimum number of threads dedicated to answering coordinator requests<br>**type:** COUNT, **zk mutable:** yes, **default value:** `4` |
-| <a name="master_replication_coordinator_port" class="prop"></a> master.replication.coordinator.port | Port for the replication coordinator service<br>**type:** PORT, **zk mutable:** yes, **default value:** `10001` |
-| <a name="master_replication_coordinator_threadcheck_time" class="prop"></a> master.replication.coordinator.threadcheck.time | The time between adjustments of the coordinator thread pool<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5s` |
-| <a name="master_replication_status_scan_interval" class="prop"></a> master.replication.status.scan.interval | Amount of time to sleep before scanning the status section of the replication table for new data<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `30s` |
-| <a name="master_server_threadcheck_time" class="prop"></a> master.server.threadcheck.time | The time between adjustments of the server thread pool.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1s` |
-| <a name="master_server_threads_minimum" class="prop"></a> master.server.threads.minimum | The minimum number of threads to use to handle incoming requests.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `20` |
-| <a name="master_startup_tserver_avail_max_wait" class="prop"></a> master.startup.tserver.avail.max.wait | Maximum time master will wait for tserver available threshold to be reached before continuing. When set to 0 or less, will block indefinitely. Default is 0 to block indefinitely. Only valid when tserver available threshold is set greater than 0. Added with version 2.0<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0` |
-| <a name="master_startup_tserver_avail_min_count" class="prop"></a> master.startup.tserver.avail.min.count | Minimum number of tservers that need to be registered before master will start tablet assignment - checked at master initialization, when master gets lock.  When set to 0 or less, no blocking occurs. Default is 0 (disabled) to keep original  behaviour. Added with version 2.0<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
-| <a name="master_status_threadpool_size" class="prop"></a> master.status.threadpool.size | The number of threads to use when fetching the tablet server status for balancing.  Zero indicates an unlimited number of threads will be used.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
-| <a name="master_tablet_balancer" class="prop"></a> master.tablet.balancer | The balancer class that accumulo will use to make tablet assignment and migration decisions.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.server.master.balancer.TableLoadBalancer %} |
-| <a name="master_walog_closer_implementation" class="prop"></a> master.walog.closer.implementation | A class that implements a mechanism to steal write access to a write-ahead log<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.server.master.recovery.HadoopLogCloser %} |
+| <a name="manager_prefix" class="prop"></a> **manager.*** | Properties in this category affect the behavior of the manager server. |
+| <a name="manager_bulk_rename_threadpool_size" class="prop"></a> manager.bulk.rename.threadpool.size | **Deprecated.** ~~This property is deprecated since 2.1.0. The number of threads to use when moving user files to bulk ingest directories under accumulo control~~<br>~~**type:** COUNT~~, ~~**zk mutable:** yes~~, ~~**default value:** `20`~~ |
+| <a name="manager_bulk_retries" class="prop"></a> manager.bulk.retries | The number of attempts to bulk import a RFile before giving up.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `3` |
+| <a name="manager_bulk_threadpool_size" class="prop"></a> manager.bulk.threadpool.size | The number of threads to use when coordinating a bulk import.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `5` |
+| <a name="manager_bulk_threadpool_timeout" class="prop"></a> manager.bulk.threadpool.timeout | The time after which bulk import threads terminate with no work available.  Zero (0) will keep the threads alive indefinitely.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
+| <a name="manager_bulk_timeout" class="prop"></a> manager.bulk.timeout | The time to wait for a tablet server to process a bulk import request<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
+| <a name="manager_bulk_tserver_regex" class="prop"></a> manager.bulk.tserver.regex | Regular expression that defines the set of Tablet Servers that will perform bulk imports<br>**type:** STRING, **zk mutable:** yes, **default value:** empty |
+| <a name="manager_fate_metrics_enabled" class="prop"></a> manager.fate.metrics.enabled | Enable reporting of FATE metrics in JMX (and logging with Hadoop Metrics2<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `true` |
+| <a name="manager_fate_metrics_min_update_interval" class="prop"></a> manager.fate.metrics.min.update.interval | Limit calls from metric sinks to zookeeper to update interval<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `60s` |
+| <a name="manager_fate_threadpool_size" class="prop"></a> manager.fate.threadpool.size | The number of threads used to run fault-tolerant executions (FATE). These are primarily table operations like merge.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `4` |
+| <a name="manager_lease_recovery_interval" class="prop"></a> manager.lease.recovery.interval | The amount of time to wait after requesting a write-ahead log to be recovered<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5s` |
+| <a name="manager_metadata_suspendable" class="prop"></a> manager.metadata.suspendable | Allow tablets for the accumulo.metadata table to be suspended via table.suspend.duration.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
+| <a name="manager_port_client" class="prop"></a> manager.port.client | The port used for handling client connections on the manager<br>**type:** PORT, **zk mutable:** yes but requires restart of the manager, **default value:** `9999` |
+| <a name="manager_recovery_delay" class="prop"></a> manager.recovery.delay | When a tablet server's lock is deleted, it takes time for it to completely quit. This delay gives it time before log recoveries begin.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `10s` |
+| <a name="manager_rename_threadpool_size" class="prop"></a> manager.rename.threadpool.size | The number of threads to use when renaming user files during table import or bulk ingest.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `20` |
+| <a name="manager_replication_coordinator_minthreads" class="prop"></a> manager.replication.coordinator.minthreads | Minimum number of threads dedicated to answering coordinator requests<br>**type:** COUNT, **zk mutable:** yes, **default value:** `4` |
+| <a name="manager_replication_coordinator_port" class="prop"></a> manager.replication.coordinator.port | Port for the replication coordinator service<br>**type:** PORT, **zk mutable:** yes, **default value:** `10001` |
+| <a name="manager_replication_coordinator_threadcheck_time" class="prop"></a> manager.replication.coordinator.threadcheck.time | The time between adjustments of the coordinator thread pool<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5s` |
+| <a name="manager_replication_status_scan_interval" class="prop"></a> manager.replication.status.scan.interval | Amount of time to sleep before scanning the status section of the replication table for new data<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `30s` |
+| <a name="manager_server_threadcheck_time" class="prop"></a> manager.server.threadcheck.time | The time between adjustments of the server thread pool.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1s` |
+| <a name="manager_server_threads_minimum" class="prop"></a> manager.server.threads.minimum | The minimum number of threads to use to handle incoming requests.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `20` |
+| <a name="manager_server_threads_timeout" class="prop"></a> manager.server.threads.timeout | The time after which incoming request threads terminate with no work available.  Zero (0) will keep the threads alive indefinitely.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
+| <a name="manager_startup_tserver_avail_max_wait" class="prop"></a> manager.startup.tserver.avail.max.wait | Maximum time manager will wait for tserver available threshold to be reached before continuing. When set to 0 or less, will block indefinitely. Default is 0 to block indefinitely. Only valid when tserver available threshold is set greater than 0. Added with version 1.10<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0` |
+| <a name="manager_startup_tserver_avail_min_count" class="prop"></a> manager.startup.tserver.avail.min.count | Minimum number of tservers that need to be registered before manager will start tablet assignment - checked at manager initialization, when manager gets lock.  When set to 0 or less, no blocking occurs. Default is 0 (disabled) to keep original  behaviour. Added with version 1.10<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
+| <a name="manager_status_threadpool_size" class="prop"></a> manager.status.threadpool.size | The number of threads to use when fetching the tablet server status for balancing.  Zero indicates an unlimited number of threads will be used.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
+| <a name="manager_tablet_balancer" class="prop"></a> manager.tablet.balancer | The balancer class that accumulo will use to make tablet assignment and migration decisions.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.core.spi.balancer.TableLoadBalancer %} |
+| <a name="manager_walog_closer_implementation" class="prop"></a> manager.walog.closer.implementation | A class that implements a mechanism to steal write access to a write-ahead log<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.server.manager.recovery.HadoopLogCloser %} |
+| <a name="master_prefix" class="prop"></a> **master.*** | **Deprecated.** ~~Properties in this category affect the behavior of the manager (formerly named master) server. Since 2.1.0, all properties in this category are deprecated and replaced with corresponding `manager.*` properties. The old `master.*` names can still be used until at release 3.0, but a warning will be emitted. Configuration files should be updated to use the new property names.~~ |
 | <a name="monitor_prefix" class="prop"></a> **monitor.*** | Properties in this category affect the behavior of the monitor web server. |
 | <a name="monitor_lock_check_interval" class="prop"></a> monitor.lock.check.interval | The amount of time to sleep between checking for the Montior ZooKeeper lock<br>**type:** TIMEDURATION, **zk mutable:** no, **default value:** `5s` |
 | <a name="monitor_port_client" class="prop"></a> monitor.port.client | The listening port for the monitor's http service<br>**type:** PORT, **zk mutable:** no, **default value:** `9995` |
-| <a name="monitor_port_log4j" class="prop"></a> monitor.port.log4j | The listening port for the monitor's log4j logging collection.<br>**type:** PORT, **zk mutable:** no, **default value:** `4560` |
 | <a name="monitor_resources_external" class="prop"></a> monitor.resources.external | A JSON Map of Strings. Each String should be an HTML tag of an external resource (JS or CSS) to be imported by the Monitor. Be sure to wrap with CDATA tags. If this value is set, all of the external resources in the `<head>` tag of the Monitor will be replaced with the tags set here. Be sure the jquery tag is first since other scripts will depend on it. The resources that are used by default can be seen [...]
 | <a name="monitor_ssl_exclude_ciphers" class="prop"></a> monitor.ssl.exclude.ciphers | A comma-separated list of disallowed SSL Ciphers, see monitor.ssl.include.ciphers to allow ciphers<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
 | <a name="monitor_ssl_include_ciphers" class="prop"></a> monitor.ssl.include.ciphers | A comma-separated list of allows SSL Ciphers, see monitor.ssl.exclude.ciphers to disallow ciphers<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
@@ -95,7 +104,7 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="monitor_ssl_trustStorePassword" class="prop"></a> monitor.ssl.trustStorePassword | The truststore password for enabling monitor SSL.<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
 | <a name="monitor_ssl_trustStoreType" class="prop"></a> monitor.ssl.trustStoreType | Type of SSL truststore<br>**type:** STRING, **zk mutable:** no, **default value:** `jks` |
 | <a name="replication_prefix" class="prop"></a> **replication.*** | Properties in this category affect the replication of data to other Accumulo instances. |
-| <a name="replication_driver_delay" class="prop"></a> replication.driver.delay | Amount of time to wait before the replication work loop begins in the master.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
+| <a name="replication_driver_delay" class="prop"></a> replication.driver.delay | Amount of time to wait before the replication work loop begins in the manager.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
 | <a name="replication_max_unit_size" class="prop"></a> replication.max.unit.size | Maximum size of data to send in a replication message<br>**type:** BYTES, **zk mutable:** yes, **default value:** `64M` |
 | <a name="replication_max_work_queue" class="prop"></a> replication.max.work.queue | Upper bound of the number of files queued for replication<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1000` |
 | <a name="replication_name" class="prop"></a> replication.name | Name of this cluster with respect to replication. Used to identify this instance from other peers<br>**type:** STRING, **zk mutable:** yes, **default value:** empty |
@@ -108,7 +117,7 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="replication_receiver_threadcheck_time" class="prop"></a> replication.receiver.threadcheck.time | The time between adjustments of the replication thread pool.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `30s` |
 | <a name="replication_rpc_timeout" class="prop"></a> replication.rpc.timeout | Amount of time for a single replication RPC call to last before failing the attempt. See replication.work.attempts.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `2m` |
 | <a name="replication_trace_percent" class="prop"></a> replication.trace.percent | The sampling percentage to use for replication traces<br>**type:** FRACTION, **zk mutable:** yes, **default value:** `0.1` |
-| <a name="replication_work_assigner" class="prop"></a> replication.work.assigner | Replication WorkAssigner implementation to use<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.master.replication.UnorderedWorkAssigner %} |
+| <a name="replication_work_assigner" class="prop"></a> replication.work.assigner | Replication WorkAssigner implementation to use<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.manager.replication.UnorderedWorkAssigner %} |
 | <a name="replication_work_assignment_sleep" class="prop"></a> replication.work.assignment.sleep | Amount of time to sleep between replication work assignment<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `30s` |
 | <a name="replication_work_attempts" class="prop"></a> replication.work.attempts | Number of attempts to try to replicate some data before giving up and letting it naturally be retried later<br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
 | <a name="replication_work_processor_delay" class="prop"></a> replication.work.processor.delay | Amount of time to wait before first checking for replication work, not useful outside of tests<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
@@ -127,33 +136,40 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="rpc_ssl_server_enabled_protocols" class="prop"></a> rpc.ssl.server.enabled.protocols | Comma separated list of protocols that can be used to accept connections<br>**type:** STRING, **zk mutable:** no, **default value:** `TLSv1.2` |
 | <a name="rpc_useJsse" class="prop"></a> rpc.useJsse | Use JSSE system properties to configure SSL rather than the rpc.javax.net.ssl.* Accumulo properties<br>**type:** BOOLEAN, **zk mutable:** no, **default value:** `false` |
 | <a name="table_prefix" class="prop"></a> **table.*** | Properties in this category affect tablet server treatment of tablets, but can be configured on a per-table basis. Setting these properties in accumulo.properties will override the default globally for all tables and not any specific table. However, both the default and the global setting can be overridden per table using the table operations API or in the shell, which sets the overridden value in zookeeper. Restarting accumulo tab [...]
-| <a name="table_balancer" class="prop"></a> table.balancer | This property can be set to allow the LoadBalanceByTable load balancer to change the called Load Balancer for this table<br>**type:** STRING, **zk mutable:** yes, **default value:** `org.apache.accumulo.server.master.balancer.DefaultLoadBalancer` |
+| <a name="table_balancer" class="prop"></a> table.balancer | This property can be set to allow the LoadBalanceByTable load balancer to change the called Load Balancer for this table<br>**type:** STRING, **zk mutable:** yes, **default value:** `org.apache.accumulo.core.spi.balancer.SimpleLoadBalancer` |
 | <a name="table_bloom_enabled" class="prop"></a> table.bloom.enabled | Use bloom filters on this table.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="table_bloom_error_rate" class="prop"></a> table.bloom.error.rate | Bloom filter error rate.<br>**type:** FRACTION, **zk mutable:** yes, **default value:** `0.5%` |
 | <a name="table_bloom_hash_type" class="prop"></a> table.bloom.hash.type | The bloom filter hash type<br>**type:** STRING, **zk mutable:** yes, **default value:** `murmur` |
 | <a name="table_bloom_key_functor" class="prop"></a> table.bloom.key.functor | A function that can transform the key prior to insertion and check of bloom filter. org.apache.accumulo.core.file.keyfunctor.RowFunctor, org.apache.accumulo.core.file.keyfunctor.ColumnFamilyFunctor, and org.apache.accumulo.core.file.keyfunctor.ColumnQualifierFunctor are allowable values. One can extend any of the above mentioned classes to perform specialized parsing of the key. <br>**type:** CLASSNAME, **zk  [...]
 | <a name="table_bloom_load_threshold" class="prop"></a> table.bloom.load.threshold | This number of seeks that would actually use a bloom filter must occur before a RFile's bloom filter is loaded. Set this to zero to initiate loading of bloom filters when a RFile is opened.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
 | <a name="table_bloom_size" class="prop"></a> table.bloom.size | Bloom filter size, as number of keys.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1048576` |
+| <a name="table_bulk_max_tablets" class="prop"></a> table.bulk.max.tablets | The maximum number of tablets allowed for one bulk import file. Value of 0 is Unlimited. This property is only enforced in the new bulk import API<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
 | <a name="table_cache_block_enable" class="prop"></a> table.cache.block.enable | Determines whether data block cache is enabled for a table.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="table_cache_index_enable" class="prop"></a> table.cache.index.enable | Determines whether index block cache is enabled for a table.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `true` |
-| <a name="table_classpath_context" class="prop"></a> table.classpath.context | Per table classpath context<br>**type:** STRING, **zk mutable:** yes, **default value:** empty |
-| <a name="table_compaction_major_everything_idle" class="prop"></a> table.compaction.major.everything.idle | After a tablet has been idle (no mutations) for this time period it may have all of its RFiles compacted into one. There is no guarantee an idle tablet will be compacted. Compactions of idle tablets are only started when regular compactions are not running. Idle compactions only take place for tablets that have one or more RFiles.<br>**type:** TIMEDURATION, **zk mutable:** yes, * [...]
-| <a name="table_compaction_major_ratio" class="prop"></a> table.compaction.major.ratio | Minimum ratio of total input size to maximum input RFile size for running a major compaction. When adjusting this property you may want to also adjust table.file.max. Want to avoid the situation where only merging minor compactions occur.<br>**type:** FRACTION, **zk mutable:** yes, **default value:** `3` |
+| <a name="table_class_loader_context" class="prop"></a> table.class.loader.context | The context to use for loading per-table resources, such as iterators from the configured factory in `general.context.class.loader.factory`.<br>**type:** STRING, **zk mutable:** yes, **default value:** empty |
+| <a name="table_classpath_context" class="prop"></a> table.classpath.context | **Deprecated.** ~~Per table classpath context~~<br>~~**type:** STRING~~, ~~**zk mutable:** yes~~, ~~**default value:** empty~~ |
+| <a name="table_compaction_configurer" class="prop"></a> table.compaction.configurer | A plugin that can dynamically configure compaction output files based on input files.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** empty |
+| <a name="table_compaction_configurer_opts_prefix" class="prop"></a> **table.compaction.configurer.opts.*** | Options for the table compaction configuror |
+| <a name="table_compaction_dispatcher" class="prop"></a> table.compaction.dispatcher | A configurable dispatcher that decides what comaction service a table should use.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.core.spi.compaction.SimpleCompactionDispatcher %} |
+| <a name="table_compaction_dispatcher_opts_prefix" class="prop"></a> **table.compaction.dispatcher.opts.*** | Options for the table compaction dispatcher |
+| <a name="table_compaction_major_everything_idle" class="prop"></a> table.compaction.major.everything.idle | **Deprecated.** ~~After a tablet has been idle (no mutations) for this time period it may have all of its RFiles compacted into one. There is no guarantee an idle tablet will be compacted. Compactions of idle tablets are only started when regular compactions are not running. Idle compactions only take place for tablets that have one or more RFiles.~~<br>~~**type:** TIMEDURATION~~ [...]
+| <a name="table_compaction_major_ratio" class="prop"></a> table.compaction.major.ratio | Minimum ratio of total input size to maximum input RFile size for running a major compaction. <br>**type:** FRACTION, **zk mutable:** yes, **default value:** `3` |
 | <a name="table_compaction_minor_idle" class="prop"></a> table.compaction.minor.idle | After a tablet has been idle (no mutations) for this time period it may have its in-memory map flushed to disk in a minor compaction. There is no guarantee an idle tablet will be compacted.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
 | <a name="table_compaction_minor_logs_threshold" class="prop"></a> table.compaction.minor.logs.threshold | **Deprecated.** ~~This property is deprecated since 2.0.0.~~<br>~~**type:** COUNT~~, ~~**zk mutable:** yes~~, ~~**default value:** `3`~~ |
-| <a name="table_compaction_minor_merge_file_size_max" class="prop"></a> table.compaction.minor.merge.file.size.max | The max RFile size used for a merging minor compaction. The default value of 0 disables a max file size.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `0` |
+| <a name="table_compaction_selector" class="prop"></a> table.compaction.selector | A configurable selector for a table that can periodically select file for mandatory compaction, even if the files do not meet the compaction ratio.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** empty |
+| <a name="table_compaction_selector_opts_prefix" class="prop"></a> **table.compaction.selector.opts.*** | Options for the table compaction dispatcher |
 | <a name="table_constraint_prefix" class="prop"></a> **table.constraint.*** | Properties in this category are per-table properties that add constraints to a table. These properties start with the category prefix, followed by a number, and their values correspond to a fully qualified Java class that implements the Constraint interface.<br>For example:<br>table.constraint.1 = org.apache.accumulo.core.constraints.MyCustomConstraint<br>and:<br> table.constraint.2 = my.package.constraints.My [...]
 | <a name="table_custom_prefix" class="prop"></a> **table.custom.*** | Prefix to be used for user defined arbitrary properties. |
 | <a name="table_delete_behavior" class="prop"></a> table.delete.behavior | **Experimental.** This determines what action to take when a delete marker is seen. Valid values are `process` and `fail` with `process` being the default.  When set to `process`, deletes will supress data.  When set to `fail`, any deletes seen will cause an exception. The purpose of `fail` is to support tables that never delete data and need fast seeks within the timestamp range of a column. When setting this to [...]
 | <a name="table_durability" class="prop"></a> table.durability | The durability used to write to the write-ahead log. Legal values are: none, which skips the write-ahead log; log, which sends the data to the write-ahead log, but does nothing to make it durable; flush, which pushes data to the file system; and sync, which ensures the data is written to disk.<br>**type:** DURABILITY, **zk mutable:** yes, **default value:** `sync` |
 | <a name="table_failures_ignore" class="prop"></a> table.failures.ignore | If you want queries for your table to hang or fail when data is missing from the system, then set this to false. When this set to true missing data will be reported but queries will still run possibly returning a subset of the data.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="table_file_blocksize" class="prop"></a> table.file.blocksize | The HDFS block size used when writing RFiles. When set to 0B, the value/defaults of HDFS property 'dfs.block.size' will be used.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `0B` |
-| <a name="table_file_compress_blocksize" class="prop"></a> table.file.compress.blocksize | The maximum size of data blocks in RFiles before they are compressed and written.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `100K` |
-| <a name="table_file_compress_blocksize_index" class="prop"></a> table.file.compress.blocksize.index | The maximum size of index blocks in RFiles before they are compressed and written.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `128K` |
+| <a name="table_file_compress_blocksize" class="prop"></a> table.file.compress.blocksize | The maximum size of data blocks in RFiles before they are compressed and written.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `100k` |
+| <a name="table_file_compress_blocksize_index" class="prop"></a> table.file.compress.blocksize.index | The maximum size of index blocks in RFiles before they are compressed and written.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `128k` |
 | <a name="table_file_compress_type" class="prop"></a> table.file.compress.type | Compression algorithm used on index and data blocks before they are written. Possible values: zstd, gz, snappy, lzo, none<br>**type:** STRING, **zk mutable:** yes, **default value:** `gz` |
 | <a name="table_file_max" class="prop"></a> table.file.max | The maximum number of RFiles each tablet in a table can have. When adjusting this property you may want to consider adjusting table.compaction.major.ratio also. Setting this property to 0 will make it default to tserver.scan.files.open.max-1, this will prevent a tablet from having more RFiles than can be opened. Setting this property low may throttle ingest and increase query performance.<br>**type:** COUNT, **zk mutable:** ye [...]
 | <a name="table_file_replication" class="prop"></a> table.file.replication | The number of replicas for a table's RFiles in HDFS. When set to 0, HDFS defaults are used.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
-| <a name="table_file_summary_maxSize" class="prop"></a> table.file.summary.maxSize | The maximum size summary that will be stored. The number of RFiles that had summary data exceeding this threshold is reported by Summary.getFileStatistics().getLarge(). When adjusting this consider the expected number RFiles with summaries on each tablet server and the summary cache size.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `256K` |
+| <a name="table_file_summary_maxSize" class="prop"></a> table.file.summary.maxSize | The maximum size summary that will be stored. The number of RFiles that had summary data exceeding this threshold is reported by Summary.getFileStatistics().getLarge(). When adjusting this consider the expected number RFiles with summaries on each tablet server and the summary cache size.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `256k` |
 | <a name="table_file_type" class="prop"></a> table.file.type | Change the type of file a table writes<br>**type:** STRING, **zk mutable:** yes, **default value:** `rf` |
 | <a name="table_formatter" class="prop"></a> table.formatter | The Formatter class to apply on results in the shell<br>**type:** STRING, **zk mutable:** yes, **default value:** `org.apache.accumulo.core.util.format.DefaultFormatter` |
 | <a name="table_group_prefix" class="prop"></a> **table.group.*** | Properties in this category are per-table properties that define locality groups in a table. These properties start with the category prefix, followed by a name, followed by a period, and followed by a property for that group.<br>For example table.group.group1=x,y,z sets the column families for a group called group1. Once configured, group1 can be enabled by adding it to the list of groups in the table.groups.enabled pr [...]
@@ -163,17 +179,17 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="table_iterator_majc_prefix" class="prop"></a> **table.iterator.majc.*** | Convenience prefix to find options for the majc iterator scope |
 | <a name="table_iterator_minc_prefix" class="prop"></a> **table.iterator.minc.*** | Convenience prefix to find options for the minc iterator scope |
 | <a name="table_iterator_scan_prefix" class="prop"></a> **table.iterator.scan.*** | Convenience prefix to find options for the scan iterator scope |
-| <a name="table_majc_compaction_strategy" class="prop"></a> table.majc.compaction.strategy | A customizable major compaction strategy.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.tserver.compaction.DefaultCompactionStrategy %} |
-| <a name="table_majc_compaction_strategy_opts_prefix" class="prop"></a> **table.majc.compaction.strategy.opts.*** | Properties in this category are used to configure the compaction strategy. |
+| <a name="table_majc_compaction_strategy" class="prop"></a> table.majc.compaction.strategy | **Deprecated.** ~~Deprecated since 2.1.0 See {% jlink -f org.apache.accumulo.core.spi.compaction}~~<br>~~**type:** CLASSNAME~~, ~~**zk mutable:** yes~~, ~~**default value:** {% jlink -f org.apache.accumulo.tserver.compaction.DefaultCompactionStrategy %}~~ |
+| <a name="table_majc_compaction_strategy_opts_prefix" class="prop"></a> **table.majc.compaction.strategy.opts.*** | **Deprecated.** ~~Properties in this category are used to configure the compaction strategy.~~ |
 | <a name="table_replication" class="prop"></a> table.replication | Is replication enabled for the given table<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="table_replication_target_prefix" class="prop"></a> **table.replication.target.*** | Enumerate a mapping of other systems which this table should replicate their data to. The key suffix is the identifying cluster name and the value is an identifier for a location on the target system, e.g. the ID of the table on the target to replicate to |
 | <a name="table_sampler" class="prop"></a> table.sampler | The name of a class that implements org.apache.accumulo.core.Sampler. Setting this option enables storing a sample of data which can be scanned. Always having a current sample can useful for query optimization and data comprehension. After enabling sampling for an existing table, a compaction is needed to compute the sample for existing data. The compact command in the shell has an option to only compact RFiles without sample da [...]
 | <a name="table_sampler_opt_prefix" class="prop"></a> **table.sampler.opt.*** | The property is used to set options for a sampler. If a sample had two options like hasher and modulous, then the two properties table.sampler.opt.hasher=${hash algorithm} and table.sampler.opt.modulous=${mod} would be set. |
 | <a name="table_scan_dispatcher" class="prop"></a> table.scan.dispatcher | This class is used to dynamically dispatch scans to configured scan executors.  Configured classes must implement {% jlink org.apache.accumulo.core.spi.scan.ScanDispatcher %} See [scan executors]({% durl administration/scan-executors %}) for an overview of why and how to use this property. This property is ignored for the root and metadata table.  The metadata table always dispatches to a scan executor named `met [...]
 | <a name="table_scan_dispatcher_opts_prefix" class="prop"></a> **table.scan.dispatcher.opts.*** | Options for the table scan dispatcher |
-| <a name="table_scan_max_memory" class="prop"></a> table.scan.max.memory | The maximum amount of memory that will be used to cache results of a client query/scan. Once this limit is reached, the buffered data is sent to the client.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `512K` |
+| <a name="table_scan_max_memory" class="prop"></a> table.scan.max.memory | The maximum amount of memory that will be used to cache results of a client query/scan. Once this limit is reached, the buffered data is sent to the client.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `512k` |
 | <a name="table_security_scan_visibility_default" class="prop"></a> table.security.scan.visibility.default | The security label that will be assumed at scan time if an entry does not have a visibility expression.<br>Note: An empty security label is displayed as []. The scan results will show an empty visibility even if the visibility from this setting is applied to the entry.<br>CAUTION: If a particular key has an empty security label AND its table's default visibility is also empty, ac [...]
-| <a name="table_split_endrow_size_max" class="prop"></a> table.split.endrow.size.max | Maximum size of end row<br>**type:** BYTES, **zk mutable:** yes, **default value:** `10K` |
+| <a name="table_split_endrow_size_max" class="prop"></a> table.split.endrow.size.max | Maximum size of end row<br>**type:** BYTES, **zk mutable:** yes, **default value:** `10k` |
 | <a name="table_split_threshold" class="prop"></a> table.split.threshold | A tablet is split when the combined size of RFiles exceeds this amount.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `1G` |
 | <a name="table_summarizer_prefix" class="prop"></a> **table.summarizer.*** | Prefix for configuring summarizers for a table. Using this prefix multiple summarizers can be configured with options for each one. Each summarizer configured should have a unique id, this id can be anything. To add a summarizer set `table.summarizer.<unique id>=<summarizer class name>.` If the summarizer has options, then for each option set `table.summarizer.<unique id>.opt.<key>=<value>`. |
 | <a name="table_suspend_duration" class="prop"></a> table.suspend.duration | For tablets belonging to this table: When a tablet server dies, allow the tablet server this duration to revive before reassigning its tablets to other tablet servers.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
@@ -192,8 +208,8 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="tserver_assignment_concurrent_max" class="prop"></a> tserver.assignment.concurrent.max | The number of threads available to load tablets. Recoveries are still performed serially.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `2` |
 | <a name="tserver_assignment_duration_warning" class="prop"></a> tserver.assignment.duration.warning | The amount of time an assignment can run before the server will print a warning along with the current stack trace. Meant to help debug stuck assignments<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `10m` |
 | <a name="tserver_bloom_load_concurrent_max" class="prop"></a> tserver.bloom.load.concurrent.max | The number of concurrent threads that will load bloom filters in the background. Setting this to zero will make bloom filters load in the foreground.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `4` |
-| <a name="tserver_bulk_assign_threads" class="prop"></a> tserver.bulk.assign.threads | The master delegates bulk import RFile processing and assignment to tablet servers. After file has been processed, the tablet server will assign the file to the appropriate tablets on all servers. This property controls the number of threads used to communicate to the other servers.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
-| <a name="tserver_bulk_process_threads" class="prop"></a> tserver.bulk.process.threads | The master will task a tablet server with pre-processing a bulk import RFile prior to assigning it to the appropriate tablet servers. This configuration value controls the number of threads used to process the files.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
+| <a name="tserver_bulk_assign_threads" class="prop"></a> tserver.bulk.assign.threads | The manager delegates bulk import RFile processing and assignment to tablet servers. After file has been processed, the tablet server will assign the file to the appropriate tablets on all servers. This property controls the number of threads used to communicate to the other servers.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
+| <a name="tserver_bulk_process_threads" class="prop"></a> tserver.bulk.process.threads | The manager will task a tablet server with pre-processing a bulk import RFile prior to assigning it to the appropriate tablet servers. This configuration value controls the number of threads used to process the files.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
 | <a name="tserver_bulk_retry_max" class="prop"></a> tserver.bulk.retry.max | The number of times the tablet server will attempt to assign a RFile to a tablet as it migrates and splits.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `5` |
 | <a name="tserver_bulk_timeout" class="prop"></a> tserver.bulk.timeout | The time to wait for a tablet server to process a bulk import request.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
 | <a name="tserver_cache_data_size" class="prop"></a> tserver.cache.data.size | Specifies the size of the cache for RFile data blocks.<br>**type:** MEMORY, **zk mutable:** yes, **default value:** `10%` |
@@ -201,10 +217,23 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="tserver_cache_manager_class" class="prop"></a> tserver.cache.manager.class | Specifies the class name of the block cache factory implementation. Alternative implementation is org.apache.accumulo.core.file.blockfile.cache.tinylfu.TinyLfuBlockCacheManager<br>**type:** STRING, **zk mutable:** yes, **default value:** `org.apache.accumulo.core.file.blockfile.cache.lru.LruBlockCacheManager` |
 | <a name="tserver_cache_summary_size" class="prop"></a> tserver.cache.summary.size | Specifies the size of the cache for summary data on each tablet server.<br>**type:** MEMORY, **zk mutable:** yes, **default value:** `10%` |
 | <a name="tserver_client_timeout" class="prop"></a> tserver.client.timeout | Time to wait for clients to continue scans before closing a session.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `3s` |
-| <a name="tserver_compaction_major_concurrent_max" class="prop"></a> tserver.compaction.major.concurrent.max | The maximum number of concurrent major compactions for a tablet server<br>**type:** COUNT, **zk mutable:** yes, **default value:** `3` |
+| <a name="tserver_compaction_major_concurrent_max" class="prop"></a> tserver.compaction.major.concurrent.max | **Deprecated.** ~~The maximum number of concurrent major compactions for a tablet server~~<br>~~**type:** COUNT~~, ~~**zk mutable:** yes~~, ~~**default value:** `3`~~ |
 | <a name="tserver_compaction_major_delay" class="prop"></a> tserver.compaction.major.delay | Time a tablet server will sleep between checking which tablets need compaction.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `30s` |
-| <a name="tserver_compaction_major_thread_files_open_max" class="prop"></a> tserver.compaction.major.thread.files.open.max | Max number of RFiles a major compaction thread can open at once. <br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
-| <a name="tserver_compaction_major_throughput" class="prop"></a> tserver.compaction.major.throughput | Maximum number of bytes to read or write per second over all major compactions on a TabletServer, or 0B for unlimited.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `0B` |
+| <a name="tserver_compaction_major_service_prefix" class="prop"></a> **tserver.compaction.major.service.*** | Prefix for compaction services. |
+| <a name="tserver_compaction_major_service_default_planner" class="prop"></a> tserver.compaction.major.service.default.planner | Planner for default compaction service.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} |
+| <a name="tserver_compaction_major_service_default_planner_opts_executors" class="prop"></a> tserver.compaction.major.service.default.planner.opts.executors | See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} <br>**type:** STRING, **zk mutable:** yes, **default value:** `[{'name':'small','maxSize':'32M','numThreads':2},{'name':'medium','maxSize':'128M','numThreads':2},{"name":"large","numThreads":2}]` |
+| <a name="tserver_compaction_major_service_default_planner_opts_maxOpen" class="prop"></a> tserver.compaction.major.service.default.planner.opts.maxOpen | The maximum number of files a compaction will open<br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
+| <a name="tserver_compaction_major_service_default_rate_limit" class="prop"></a> tserver.compaction.major.service.default.rate.limit | Maximum number of bytes to read or write per second over all major compactions in this compaction service, or 0B for unlimited.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `0B` |
+| <a name="tserver_compaction_major_service_meta_planner" class="prop"></a> tserver.compaction.major.service.meta.planner | Compaction planner for metadata table<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} |
+| <a name="tserver_compaction_major_service_meta_planner_opts_executors" class="prop"></a> tserver.compaction.major.service.meta.planner.opts.executors | See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} <br>**type:** STRING, **zk mutable:** yes, **default value:** `[{'name':'small','maxSize':'32M','numThreads':2},{"name":"huge","numThreads":2}]` |
+| <a name="tserver_compaction_major_service_meta_planner_opts_maxOpen" class="prop"></a> tserver.compaction.major.service.meta.planner.opts.maxOpen | The maximum number of files a compaction will open<br>**type:** COUNT, **zk mutable:** yes, **default value:** `30` |
+| <a name="tserver_compaction_major_service_meta_rate_limit" class="prop"></a> tserver.compaction.major.service.meta.rate.limit | Maximum number of bytes to read or write per second over all major compactions in this compaction service, or 0B for unlimited.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `0B` |
+| <a name="tserver_compaction_major_service_root_planner" class="prop"></a> tserver.compaction.major.service.root.planner | Compaction planner for root tablet service<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} |
+| <a name="tserver_compaction_major_service_root_planner_opts_executors" class="prop"></a> tserver.compaction.major.service.root.planner.opts.executors | See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} <br>**type:** STRING, **zk mutable:** yes, **default value:** `[{'name':'small','maxSize':'32M','numThreads':1},{"name":"huge","numThreads":1}]` |
+| <a name="tserver_compaction_major_service_root_planner_opts_maxOpen" class="prop"></a> tserver.compaction.major.service.root.planner.opts.maxOpen | The maximum number of files a compaction will open<br>**type:** COUNT, **zk mutable:** yes, **default value:** `30` |
+| <a name="tserver_compaction_major_service_root_rate_limit" class="prop"></a> tserver.compaction.major.service.root.rate.limit | Maximum number of bytes to read or write per second over all major compactions in this compaction service, or 0B for unlimited.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `0B` |
+| <a name="tserver_compaction_major_thread_files_open_max" class="prop"></a> tserver.compaction.major.thread.files.open.max | **Deprecated.** ~~Max number of RFiles a major compaction thread can open at once. ~~<br>~~**type:** COUNT~~, ~~**zk mutable:** yes~~, ~~**default value:** `10`~~ |
+| <a name="tserver_compaction_major_throughput" class="prop"></a> tserver.compaction.major.throughput | **Deprecated.** ~~Maximum number of bytes to read or write per second over all major compactions within each compaction service, or 0B for unlimited.~~<br>~~**type:** BYTES~~, ~~**zk mutable:** yes~~, ~~**default value:** `0B`~~ |
 | <a name="tserver_compaction_major_trace_percent" class="prop"></a> tserver.compaction.major.trace.percent | The percent of major compactions to trace<br>**type:** FRACTION, **zk mutable:** yes, **default value:** `0.1` |
 | <a name="tserver_compaction_minor_concurrent_max" class="prop"></a> tserver.compaction.minor.concurrent.max | The maximum number of concurrent minor compactions for a tablet server<br>**type:** COUNT, **zk mutable:** yes, **default value:** `4` |
 | <a name="tserver_compaction_minor_trace_percent" class="prop"></a> tserver.compaction.minor.trace.percent | The percent of minor compactions to trace<br>**type:** FRACTION, **zk mutable:** yes, **default value:** `0.1` |
@@ -215,12 +244,11 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="tserver_hold_time_max" class="prop"></a> tserver.hold.time.max | The maximum time for a tablet server to be in the "memory full" state. If the tablet server cannot write out memory in this much time, it will assume there is some failure local to its node, and quit. A value of zero is equivalent to forever.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
 | <a name="tserver_log_busy_tablets_count" class="prop"></a> tserver.log.busy.tablets.count | Number of busiest tablets to log. Logged at interval controlled by tserver.log.busy.tablets.interval. If <= 0, logging of busy tablets is disabled<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
 | <a name="tserver_log_busy_tablets_interval" class="prop"></a> tserver.log.busy.tablets.interval | Time interval between logging out busy tablets information.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1h` |
-| <a name="tserver_memory_manager" class="prop"></a> tserver.memory.manager | An implementation of MemoryManger that accumulo will use.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** {% jlink -f org.apache.accumulo.server.tabletserver.LargestFirstMemoryManager %} |
 | <a name="tserver_memory_maps_max" class="prop"></a> tserver.memory.maps.max | Maximum amount of memory that can be used to buffer data written to a tablet server. There are two other properties that can effectively limit memory usage table.compaction.minor.logs.threshold and tserver.walog.max.size. Ensure that table.compaction.minor.logs.threshold * tserver.walog.max.size >= this property.<br>**type:** MEMORY, **zk mutable:** yes, **default value:** `33%` |
 | <a name="tserver_memory_maps_native_enabled" class="prop"></a> tserver.memory.maps.native.enabled | An in-memory data store for accumulo implemented in c++ that increases the amount of data accumulo can hold in memory and avoids Java GC pauses.<br>**type:** BOOLEAN, **zk mutable:** yes but requires restart of the tserver, **default value:** `true` |
 | <a name="tserver_metadata_readahead_concurrent_max" class="prop"></a> tserver.metadata.readahead.concurrent.max | **Deprecated.** ~~This property is deprecated since 2.0.0, use tserver.scan.executors.meta.threads instead. The maximum number of concurrent metadata read ahead that will execute.~~<br>~~**type:** COUNT~~, ~~**zk mutable:** yes~~, ~~**default value:** `8`~~ |
 | <a name="tserver_migrations_concurrent_max" class="prop"></a> tserver.migrations.concurrent.max | The maximum number of concurrent tablet migrations for a tablet server<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
-| <a name="tserver_monitor_fs" class="prop"></a> tserver.monitor.fs | When enabled the tserver will monitor file systems and kill itself when one switches from rw to ro. This is usually and indication that Linux has detected a bad disk.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `true` |
+| <a name="tserver_monitor_fs" class="prop"></a> tserver.monitor.fs | When enabled the tserver will monitor file systems and kill itself when one switches from rw to ro. This is usually and indication that Linux has detected a bad disk.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="tserver_port_client" class="prop"></a> tserver.port.client | The port used for handling client connections on the tablet servers<br>**type:** PORT, **zk mutable:** yes but requires restart of the tserver, **default value:** `9997` |
 | <a name="tserver_port_search" class="prop"></a> tserver.port.search | if the ports above are in use, search higher ports until one is available<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="tserver_readahead_concurrent_max" class="prop"></a> tserver.readahead.concurrent.max | **Deprecated.** ~~This property is deprecated since 2.0.0, use tserver.scan.executors.default.threads instead. The maximum number of concurrent read ahead that will execute. This effectively limits the number of long running scans that can run concurrently per tserver."~~<br>~~**type:** COUNT~~, ~~**zk mutable:** yes~~, ~~**default value:** `16`~~ |
@@ -236,13 +264,14 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="tserver_server_message_size_max" class="prop"></a> tserver.server.message.size.max | The maximum size of a message that can be sent to a tablet server.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `1G` |
 | <a name="tserver_server_threadcheck_time" class="prop"></a> tserver.server.threadcheck.time | The time between adjustments of the server thread pool.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1s` |
 | <a name="tserver_server_threads_minimum" class="prop"></a> tserver.server.threads.minimum | The minimum number of threads to use to handle incoming requests.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `20` |
+| <a name="tserver_server_threads_timeout" class="prop"></a> tserver.server.threads.timeout | The time after which incoming request threads terminate with no work available.  Zero (0) will keep the threads alive indefinitely.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
 | <a name="tserver_session_idle_max" class="prop"></a> tserver.session.idle.max | When a tablet server's SimpleTimer thread triggers to check idle sessions, this configurable option will be used to evaluate scan sessions to determine if they can be closed due to inactivity<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1m` |
 | <a name="tserver_session_update_idle_max" class="prop"></a> tserver.session.update.idle.max | When a tablet server's SimpleTimer thread triggers to check idle sessions, this configurable option will be used to evaluate update sessions to determine if they can be closed due to inactivity<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1m` |
 | <a name="tserver_slow_filepermit_time" class="prop"></a> tserver.slow.filepermit.time | If a thread blocks more than this period of time waiting to get file permits, debugging information will be written.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `100ms` |
 | <a name="tserver_slow_flush_time" class="prop"></a> tserver.slow.flush.time | If a flush to the write-ahead log takes longer than this period of time, debugging information will written, and may result in a log rollover.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `100ms` |
 | <a name="tserver_sort_buffer_size" class="prop"></a> tserver.sort.buffer.size | The amount of memory to use when sorting logs during recovery.<br>**type:** MEMORY, **zk mutable:** yes, **default value:** `10%` |
-| <a name="tserver_summary_partition_threads" class="prop"></a> tserver.summary.partition.threads | Summary data must be retrieved from RFiles. For a large number of RFiles, the files are broken into partitions of 100K files. This setting determines how many of these groups of 100K RFiles will be processed concurrently.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
-| <a name="tserver_summary_remote_threads" class="prop"></a> tserver.summary.remote.threads | For a partitioned group of 100K RFiles, those files are grouped by tablet server. Then a remote tablet server is asked to gather summary data. This setting determines how many concurrent request are made per partition.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `128` |
+| <a name="tserver_summary_partition_threads" class="prop"></a> tserver.summary.partition.threads | Summary data must be retrieved from RFiles. For a large number of RFiles, the files are broken into partitions of 100k files. This setting determines how many of these groups of 100k RFiles will be processed concurrently.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
+| <a name="tserver_summary_remote_threads" class="prop"></a> tserver.summary.remote.threads | For a partitioned group of 100k RFiles, those files are grouped by tablet server. Then a remote tablet server is asked to gather summary data. This setting determines how many concurrent request are made per partition.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `128` |
 | <a name="tserver_summary_retrieval_threads" class="prop"></a> tserver.summary.retrieval.threads | The number of threads on each tablet server available to retrieve summary data, that is not currently in cache, from RFiles.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
 | <a name="tserver_tablet_split_midpoint_files_max" class="prop"></a> tserver.tablet.split.midpoint.files.max | To find a tablets split points, all RFiles are opened and their indexes are read. This setting determines how many RFiles can be opened at once. When there are more RFiles than this setting multiple passes must be made, which is slower. However opening too many RFiles at once can cause problems.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `300` |
 | <a name="tserver_total_mutation_queue_max" class="prop"></a> tserver.total.mutation.queue.max | The amount of memory used to store write-ahead-log mutations before flushing them.<br>**type:** MEMORY, **zk mutable:** yes, **default value:** `5%` |
@@ -252,7 +281,7 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | <a name="tserver_wal_sync_method" class="prop"></a> tserver.wal.sync.method | **Deprecated.** ~~This property is deprecated since 1.7.0. Use table.durability instead.~~<br>~~**type:** STRING~~, ~~**zk mutable:** yes~~, ~~**default value:** `hsync`~~ |
 | <a name="tserver_walog_max_age" class="prop"></a> tserver.walog.max.age | The maximum age for each write-ahead log.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `24h` |
 | <a name="tserver_walog_max_referenced" class="prop"></a> tserver.walog.max.referenced | When a tablet server has more than this many write ahead logs, any tablet referencing older logs over this threshold is minor compacted.  Also any tablet referencing this many logs or more will be compacted.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `3` |
-| <a name="tserver_walog_max_size" class="prop"></a> tserver.walog.max.size | The maximum size for each write-ahead log. See comment for property tserver.memory.maps.max<br>**type:** BYTES, **zk mutable:** yes, **default value:** `1g` |
+| <a name="tserver_walog_max_size" class="prop"></a> tserver.walog.max.size | The maximum size for each write-ahead log. See comment for property tserver.memory.maps.max<br>**type:** BYTES, **zk mutable:** yes, **default value:** `1G` |
 | <a name="tserver_walog_maximum_wait_duration" class="prop"></a> tserver.walog.maximum.wait.duration | The maximum amount of time to wait after a failure to create or write a write-ahead log.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
 | <a name="tserver_walog_tolerated_creation_failures" class="prop"></a> tserver.walog.tolerated.creation.failures | The maximum number of failures tolerated when creating a new write-ahead log. Negative values will allow unlimited creation failures. Exceeding this number of failures consecutively trying to create a new write-ahead log causes the TabletServer to exit.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `50` |
 | <a name="tserver_walog_tolerated_wait_increment" class="prop"></a> tserver.walog.tolerated.wait.increment | The amount of time to wait between failures to create or write a write-ahead log.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1000ms` |
@@ -274,6 +303,7 @@ Below are properties set in `accumulo.properties` or the Accumulo shell that con
 | java class | A fully qualified java class name representing a class on the classpath.<br>An example is 'java.lang.String', rather than 'String' |
 | java class list | A list of fully qualified java class names representing classes on the classpath.<br>An example is 'java.lang.String', rather than 'String' |
 | durability | One of 'none', 'log', 'flush' or 'sync'. |
+| gc_post_action | One of 'none', 'flush', or 'compact'. |
 | string | An arbitrary string of characters whose format is unspecified and interpreted based on the context of the property to which it applies. |
 | boolean | Has a value of either 'true' or 'false' (case-insensitive) |
 | uri | A valid URI |
diff --git a/_docs-2/development/high_speed_ingest.md b/_docs-2/development/high_speed_ingest.md
index 40a7f74..55be2b5 100644
--- a/_docs-2/development/high_speed_ingest.md
+++ b/_docs-2/development/high_speed_ingest.md
@@ -14,7 +14,7 @@ performance.
 ## Pre-Splitting New Tables
 
 New tables consist of a single tablet by default. As mutations are applied, the table
-grows and splits into multiple tablets which are balanced by the Master across
+grows and splits into multiple tablets which are balanced by the Manager across
 TabletServers. This implies that the aggregate ingest rate will be limited to fewer
 servers than are available within the cluster until the table has reached the point
 where there are tablets on every TabletServer.
diff --git a/_docs-2/development/proxy.md b/_docs-2/development/proxy.md
index 3be74e9..ba58afb 100644
--- a/_docs-2/development/proxy.md
+++ b/_docs-2/development/proxy.md
@@ -13,7 +13,7 @@ without requiring access to all tablet servers in the cluster.
 ## Prerequisites
 
 The proxy server can live on any node in which the basic client API would work. That
-means it must be able to communicate with the Master, ZooKeepers, NameNode, and the
+means it must be able to communicate with the Manager, ZooKeepers, NameNode, and the
 DataNodes. A proxy client only needs the ability to communicate with the proxy server.
 
 ## Running the Proxy Server
diff --git a/_docs-2/getting-started/design.md b/_docs-2/getting-started/design.md
index 1a9127a..7081bf5 100644
--- a/_docs-2/getting-started/design.md
+++ b/_docs-2/getting-started/design.md
@@ -33,7 +33,7 @@ machines.
 ## Components
 
 An instance of Accumulo includes many TabletServers, one Garbage Collector process,
-one Master server and many Clients.
+one Manager server and many Clients.
 
 ### Tablet Server
 
@@ -55,17 +55,17 @@ Collector will identify files that are no longer needed by any process, and
 delete them. Multiple garbage collectors can be run to provide hot-standby support.
 They will perform leader election among themselves to choose a single active instance.
 
-### Master
+### Manager
 
-The Accumulo Master is responsible for detecting and responding to TabletServer
+The Accumulo Manager is responsible for detecting and responding to TabletServer
 failure. It tries to balance the load across TabletServer by assigning tablets carefully
-and instructing TabletServers to unload tablets when necessary. The Master ensures all
+and instructing TabletServers to unload tablets when necessary. The Manager ensures all
 tablets are assigned to one TabletServer each, and handles table creation, alteration,
-and deletion requests from clients. The Master also coordinates startup, graceful
+and deletion requests from clients. The Manager also coordinates startup, graceful
 shutdown and recovery of changes in write-ahead logs when Tablet servers fail.
 
-Multiple masters may be run. The masters will choose among themselves a single master,
-and the others will become backups if the master should fail.
+Multiple managers may be run. The managers will choose among themselves a single manager,
+and the others will become backups if the manager should fail.
 
 ### Tracer
 
@@ -97,11 +97,11 @@ data to/from Accumulo. See the [Accumulo clients documentation][clients] for mor
 
 Accumulo stores data in tables, which are partitioned into tablets. Tablets are
 partitioned on row boundaries so that all of the columns and values for a particular
-row are found together within the same tablet. The Master assigns Tablets to one
+row are found together within the same tablet. The Manager assigns Tablets to one
 TabletServer at a time. This enables row-level transactions to take place without
 using distributed locking or some other complicated synchronization mechanism. As
 clients insert and query data, and as machines are added and removed from the
-cluster, the Master migrates tablets to ensure they remain available and that the
+cluster, the Manager migrates tablets to ensure they remain available and that the
 ingest and query load is balanced across the cluster.
 
 ![data distribution]({{ site.baseurl }}/images/docs/data_distribution.png)
@@ -166,7 +166,7 @@ was introduced in Accumulo 1.4.
 
 ## Fault-Tolerance
 
-If a TabletServer fails, the Master detects it and automatically reassigns the tablets
+If a TabletServer fails, the Manager detects it and automatically reassigns the tablets
 assigned from the failed server to other servers. Any key-value pairs that were in
 memory at the time the TabletServer fails are automatically reapplied from the Write-Ahead
 Log(WAL) to prevent any loss of data.
@@ -176,8 +176,8 @@ servers for recovery. To make the recovery process efficient, the updates within
 grouped by tablet.  TabletServers can quickly apply the mutations from the sorted logs
 that are destined for the tablets they have now been assigned.
 
-TabletServer failures are noted on the Master's monitor page, accessible via
-`http://master-address:9995/monitor`.
+TabletServer failures are noted on the Manager's monitor page, accessible via
+`http://manager-address:9995/monitor`.
 
 ![failure handling]({{ site.baseurl }}/images/docs/failure_handling.png)
 
diff --git a/_docs-2/getting-started/features.md b/_docs-2/getting-started/features.md
index bddbac4..a85e22a 100644
--- a/_docs-2/getting-started/features.md
+++ b/_docs-2/getting-started/features.md
@@ -61,11 +61,11 @@ can share a pool of datanodes.
 
 ## Integrity/Availability
 
-### Master fail over
+### Manager fail over
 
-Multiple masters can be configured.  Zookeeper locks are used to determine
-which master is active.  The remaining masters simply wait for the current
-master to lose its lock.  Current master state is held in the metadata table
+Multiple managers can be configured.  Zookeeper locks are used to determine
+which manager is active.  The remaining managers simply wait for the current
+manager to lose its lock.  Current manager state is held in the metadata table
 and Zookeeper.
 
 ### Logical time
@@ -75,11 +75,11 @@ across the cluster is incorrect. This ensures that updates and deletes are not
 lost. If a tablet is served on machine with time a year in the future, then the
 tablet will continue to issue new timestamps a year in the future, even when it
 moves to another server. In this case the timestamps preserve ordering, but
-lose their meaning. In addition to logical time, Accumulo has master
-authoritative time. The master averages the time of all of the tablet servers
+lose their meaning. In addition to logical time, Accumulo has manager
+authoritative time. The manager averages the time of all of the tablet servers
 and sends this back to the tablet servers. Tablet servers use this information
 to adjust the timestamps they issue. So logical time ensures ordering is
-always correct and master authoritative time tries to ensure that timestamps
+always correct and manager authoritative time tries to ensure that timestamps
 are meaningful.
 
 ### Logical Time for bulk import
@@ -99,9 +99,9 @@ time.
 ### FATE
 
 [FATE] (short for **Fa**ult **T**olerant **E**xecutor) is a framework for executing
-operations in a fault tolerant manner. Before FATE, if the master process died in the
+operations in a fault tolerant manner. Before FATE, if the manager process died in the
 middle of creating a table it could leave the system in an inconsistent state.
-With this new framework, if the master dies in the middle of create table it
+With this new framework, if the manager dies in the middle of create table it
 will continue on restart. Also, the client requesting the create table operation
 will never know anything happened. The framework serializes work in Zookeeper
 before attempting to do the work. Clients start a FATE transaction, seed it
@@ -109,7 +109,7 @@ with work, and then wait for it to finish. Most table operations are executed
 using this framework. Persistent, per table, read-write locks are created in
 Zookeeper to synchronize operations across process faults.
 
-### Scalable master
+### Scalable manager
 
 Stores its metadata in an Accumulo table and Zookeeper.
 
diff --git a/_docs-2/getting-started/glossary.md b/_docs-2/getting-started/glossary.md
index 91ff353..345c106 100644
--- a/_docs-2/getting-started/glossary.md
+++ b/_docs-2/getting-started/glossary.md
@@ -78,6 +78,10 @@ major compaction
 merged into a single file, it is called a *full major compaction*.
 
 master
+: > the old name for the manager process. This process was renamed as of the
+2.1.0 release of Accumulo.
+
+manager
 : > process that detects and responds to tablet failures, balances load across
 tablet servers by assigning and migrating tablets when required, coordinates
 table operations, and handles tablet server logistics (startup, shutdown,
diff --git a/_docs-2/getting-started/quickstart.md b/_docs-2/getting-started/quickstart.md
index 0fd44db..eaaa9bd 100644
--- a/_docs-2/getting-started/quickstart.md
+++ b/_docs-2/getting-started/quickstart.md
@@ -14,6 +14,12 @@ The manual can now be
 searched using the [Search link][search] at the top of the website or navigated by clicking the links to the left. If you are new 
 to Accumulo, follow the instructions below to get started.  For detailed instructions, see the [in-depth installation guide][in-depth].
 
+## Master/Manager naming
+
+As of release 2.1, all references to "master" have been changed to "manager." If you are using/installing
+a release prior to 2.1, substitute "master" in place of "manager" for any property name, file name, or
+process name referenced in this documentation.
+
 ## Setup for testing or development
 
 If you are setting up Accumulo for **testing or development,** consider using the following tools:
@@ -53,7 +59,7 @@ properly for Accumulo. Please see the [Erasure Coding guide][ec-guide] for more
 The primary configuration files for Accumulo are [accumulo.properties], [accumulo-env.sh],
 and [accumulo-client.properties] which are located in the `conf/` directory.
 
-The [accumulo.properties] file configures Accumulo server processes (i.e. tablet server, master,
+The [accumulo.properties] file configures Accumulo server processes (i.e. tablet server, manager,
 monitor, etc). Follow these steps to set it up:
 
 1. Run `accumulo-util build-native` to build native code.  If this command fails, disable
@@ -87,7 +93,7 @@ The [accumulo-env.sh] file sets up environment variables needed by Accumulo:
     | Yes     | -Xmx384m -Xms384m | -Xmx768m -Xms768m | -Xmx1536m -Xms1536m | -Xmx2g -Xms2g |
     | No      | -Xmx512m -Xms512m | -Xmx1g -Xms1g     | -Xmx2g -Xms2g       | -Xmx3g -Xms3g |
 
-3. (Optional) Review the memory settings for the Accumulo master, garbage collector, and monitor
+3. (Optional) Review the memory settings for the Accumulo manager, garbage collector, and monitor
    in the `JAVA_OPTS` section of [accumulo-env.sh].
 
 The [accumulo-client.properties] file is used by the Accumulo shell and can be passed to Accumulo
@@ -135,7 +141,7 @@ Each method above has instructions below.
 
 ### Run Accumulo processes
 
-Start Accumulo processes (tserver, master, monitor, etc) using command below:
+Start Accumulo processes (tserver, manager, monitor, etc) using command below:
 
     accumulo tserver
 
@@ -143,7 +149,7 @@ The process will run in the foreground. Use ctrl-c to quit.
 
 ### Run Accumulo services
 
-Start Accumulo services (tserver, master, monitor, etc) using command below:
+Start Accumulo services (tserver, manager, monitor, etc) using command below:
 
     accumulo-service tserver start
 
@@ -154,7 +160,7 @@ to be created. Use the command below to create them:
 
     accumulo-cluster create-config
 
-This creates five files ([masters], [gc], [monitor], [tservers], & [tracers])
+This creates five files ([managers], [gc], [monitor], [tservers], & [tracers])
 in the `conf/` directory that contain the node names where Accumulo services
 are run on your cluster. By default, all files are configured to `localhost`. If
 you are running a single-node Accumulo cluster, these files do not need to be
@@ -165,7 +171,7 @@ changed and the next section should be skipped.
 If you are running an Accumulo cluster on multiple nodes, the following files
 in `conf/` should be configured with a newline separated list of node names:
 
- * [masters] : Accumulo primary coordinating process. Must specify one node. Can
+ * [managers] : Accumulo primary coordinating process. Must specify one node. Can
                specify a few for fault tolerance.
  * [gc]      : Accumulo garbage collector. Must specify one node. Can specify a
                few for fault tolerance.
@@ -221,7 +227,7 @@ When finished, use the following commands to stop Accumulo:
 [accumulo-client.properties]: {% durl configuration/files#accumulo-clientproperties %}
 [gc]: {% durl configuration/files#gc %}
 [monitor]: {% durl configuration/files#monitor %}
-[masters]: {% durl configuration/files#masters %}
+[managers]: {% durl configuration/files#managers %}
 [tservers]: {% durl configuration/files#tservers %}
 [tracers]: {% durl configuration/files#tracers %}
 [Uno]: https://github.com/apache/fluo-uno
diff --git a/_docs-2/security/kerberos.md b/_docs-2/security/kerberos.md
index 137d57a..4271e3b 100644
--- a/_docs-2/security/kerberos.md
+++ b/_docs-2/security/kerberos.md
@@ -74,7 +74,7 @@ A delegation token is nothing more than a short-term, on-the-fly password genera
 credentials.  In Hadoop itself, the Namenode and ResourceManager, for HDFS and YARN respectively, act as the gateway for
 delegation tokens requests. For example, before a YARN job is submitted, the implementation will request delegation
 tokens from the NameNode and ResourceManager so the YARN tasks can communicate with HDFS and YARN. In the same manner,
-support has been added in the Accumulo Master to generate delegation tokens to enable interaction with Accumulo via
+support has been added in the Accumulo Manager to generate delegation tokens to enable interaction with Accumulo via
 MapReduce when Kerberos authentication is enabled in a manner similar to HDFS and YARN.
 
 Generating an expiring password is, arguably, more secure than distributing the user's
@@ -99,7 +99,7 @@ a trace user with appropriate permissions.
 
 The first step is to obtain a Kerberos identity for the Accumulo server processes.
 When running Accumulo with Kerberos enabled, a valid Kerberos identity will be required
-to initiate any RPC between Accumulo processes (e.g. Master and TabletServer) in addition
+to initiate any RPC between Accumulo processes (e.g. Manager and TabletServer) in addition
 to any HDFS action (e.g. client to HDFS or TabletServer to HDFS).
 
 #### Generate Principal and Keytab
@@ -157,7 +157,7 @@ in `accumulo.properties`.
 Although it should be a prerequisite, it is ever important that you have DNS properly
 configured for your nodes and that Accumulo is configured to use the FQDN. It
 is extremely important to use the FQDN in each of the "hosts" files for each
-Accumulo process: `masters`, `monitors`, `tservers`, `tracers`, and `gc`.
+Accumulo process: `managers`, `monitors`, `tservers`, `tracers`, and `gc`.
 
 Normally, no changes are needed in `accumulo-env.sh` to enable Kerberos. Typically, the `krb5.conf`
 is installed on the local machine in `/etc/`, and the Java library implementations will look
@@ -267,12 +267,12 @@ Here, `$PROXY_USER` can impersonate user1 and user2 only from host1.domain.com o
 
 In these examples, the value `$PROXY_USER` is the Kerberos principal of the server which is acting on behalf of a user.
 Impersonation is enforced by the Kerberos principal and the host from which the RPC originated (from the perspective
-of the Accumulo TabletServers/Masters). An asterisk (*) can be used to specify all users or all hosts (depending on the context).
+of the Accumulo TabletServers/Managers). An asterisk (*) can be used to specify all users or all hosts (depending on the context).
 
 #### Delegation Tokens
 
 Within Accumulo services, the primary task to implement delegation tokens is the generation and distribution
-of a shared secret among all Accumulo tabletservers and the master. The secret key allows for generation
+of a shared secret among all Accumulo tabletservers and the manager. The secret key allows for generation
 of delegation tokens for users and verification of delegation tokens presented by clients. If a server
 process is unaware of the secret key used to create a delegation token, the client cannot be authenticated.
 As ZooKeeper distribution is an asynchronous operation (typically on the order of seconds), the
@@ -474,11 +474,11 @@ javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException:
         at org.apache.accumulo.core.rpc.UGIAssumingTransport.open(UGIAssumingTransport.java:49)
         at org.apache.accumulo.core.rpc.ThriftUtil.createClientTransport(ThriftUtil.java:357)
         at org.apache.accumulo.core.rpc.ThriftUtil.createTransport(ThriftUtil.java:255)
-        at org.apache.accumulo.server.master.LiveTServerSet$TServerConnection.getTableMap(LiveTServerSet.java:106)
-        at org.apache.accumulo.master.Master.gatherTableInformation(Master.java:996)
-        at org.apache.accumulo.master.Master.access$600(Master.java:160)
-        at org.apache.accumulo.master.Master$StatusThread.updateStatus(Master.java:911)
-        at org.apache.accumulo.master.Master$StatusThread.run(Master.java:901)
+        at org.apache.accumulo.server.manager.LiveTServerSet$TServerConnection.getTableMap(LiveTServerSet.java:106)
+        at org.apache.accumulo.manager.Manager.gatherTableInformation(Manager.java:996)
+        at org.apache.accumulo.manager.Manager.access$600(Manager.java:160)
+        at org.apache.accumulo.manager.Manager$StatusThread.updateStatus(Manager.java:911)
+        at org.apache.accumulo.manager.Manager$StatusThread.run(Manager.java:901)
 Caused by: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - LOOKING_UP_SERVER)
         at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:710)
         at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:248)
@@ -531,7 +531,7 @@ Caused by: org.apache.thrift.transport.TTransportException: Peer indicated failu
 on, is extremely important when negotiating an SASL connection. This problem commonly arises when the Accumulo
 servers are not configured to listen on the address denoted by their FQDN.
 
-The values in the Accumulo "hosts" files (In `accumulo/conf`: `masters`, `monitors`, `tservers`, `tracers`,
+The values in the Accumulo "hosts" files (In `accumulo/conf`: `managers`, `monitors`, `tservers`, `tracers`,
 and `gc`) should match the instance component of the Kerberos server principal (e.g. `host` in `accumulo/host@EXAMPLE.COM`).
 
 **Q**: After configuring my system for Kerberos, server processes come up normally and I can interact with the system. However,
diff --git a/_docs-2/troubleshooting/advanced.md b/_docs-2/troubleshooting/advanced.md
index 967b5e8..1d63e11 100644
--- a/_docs-2/troubleshooting/advanced.md
+++ b/_docs-2/troubleshooting/advanced.md
@@ -149,7 +149,7 @@ You can remove the WAL references in the metadata table.
 
 Note: the colon (`:`) is omitted when specifying the _row cf cq_ for the delete command.
 
-The master will automatically discover the tablet no longer has a bad WAL reference and will
+The manager will automatically discover the tablet no longer has a bad WAL reference and will
 assign the tablet.  You will need to remove the reference from all the tablets to get them
 online.
 
@@ -261,7 +261,7 @@ with the empty WAL.
     $ hdfs dfs -mv /user/accumulo/empty.wal /accumulo/wal/tserver-4.example.com+10011/26abec5b-63e7-40dd-9fa1-b8ad2436606e
 
 After the corrupt WAL file has been replaced, the system should automatically recover.
-It may be necessary to restart the Accumulo Master process as an exponential
+It may be necessary to restart the Accumulo Manager process as an exponential
 backup policy is used which could lead to a long wait before Accumulo will
 try to re-load the WAL file.
 
@@ -330,7 +330,7 @@ overridden by using the `--local-wal-directories` option on the tool. It can be
 
     accumulo org.apache.accumulo.tserver.log.LocalWALRecovery
 
-**I am trying to start the master after upgrading but the upgrade is aborting with the following message:**
+**I am trying to start the manager after upgrading but the upgrade is aborting with the following message:**
   `org.apache.accumulo.core.client.AccumuloException: Aborting upgrade because there are outstanding FATE transactions from a previous Accumulo version.`
 
 You can use the shell to delete completed FATE transactions using the following:
@@ -339,7 +339,7 @@ You can use the shell to delete completed FATE transactions using the following:
 * Start shell
 * Run `fate print` to list all
 * If completed, just delete with `fate delete`
-* Start masters once there are no more fate operations
+* Start managers once there are no more fate operations
 
 If any of the operations are not complete, you should rollback the upgrade and troubleshoot completing them with your prior version.
 
diff --git a/_docs-2/troubleshooting/basic.md b/_docs-2/troubleshooting/basic.md
index 87099b8..2285975 100644
--- a/_docs-2/troubleshooting/basic.md
+++ b/_docs-2/troubleshooting/basic.md
@@ -28,7 +28,7 @@ There's a small web server that collects information about all the
 components that make up a running Accumulo instance. It will highlight
 unusual or unexpected conditions.
 
-Point your browser to the monitor (typically the master host, on port 9995).  Is anything red or yellow?
+Point your browser to the monitor (typically the manager host, on port 9995).  Is anything red or yellow?
 
 **My browser is reporting connection refused, and I cannot get to the monitor**
 
@@ -53,11 +53,11 @@ monitor while on the machine running the monitor:
 
 Verify that you are not firewalled from the monitor if it is running on a remote host.
 
-**The monitor responds, but there are no numbers for tservers and tables.  The summary page says the master is down.**
+**The monitor responds, but there are no numbers for tservers and tables.  The summary page says the manager is down.**
 
-The monitor program gathers all the details about the master and the
-tablet servers through the master. It will be mostly blank if the
-master is down. Check for a running master.
+The monitor program gathers all the details about the manager and the
+tablet servers through the manager. It will be mostly blank if the
+manager is down. Check for a running manager.
 
 **The ZooKeeper information is not available on the Overview page.**
 
@@ -98,13 +98,13 @@ Sometimes you can kill a "stuck" tablet server by deleting its lock in zookeeper
     $ accumulo org.apache.accumulo.server.util.TabletServerLocks -list
                       127.0.0.1:9997             null
 
-You can find the master and instance id for any accumulo instances using the same zookeeper instance:
+You can find the manager and instance id for any accumulo instances using the same zookeeper instance:
 
 ```
 $ accumulo org.apache.accumulo.server.util.ListInstances
 INFO : Using ZooKeepers localhost:2181
 
- Instance Name       | Instance ID                          | Master
+ Instance Name       | Instance ID                          | Manager
 ---------------------+--------------------------------------+-------------------------------
               "test" | 6140b72e-edd8-4126-b2f5-e74a8bbe323b |                127.0.0.1:9999
 ```
diff --git a/_docs-2/troubleshooting/tools.md b/_docs-2/troubleshooting/tools.md
index 817524d..8f7454d 100644
--- a/_docs-2/troubleshooting/tools.md
+++ b/_docs-2/troubleshooting/tools.md
@@ -59,12 +59,12 @@ Likewise, `rfile-info` will dump the key-value pairs and show you the contents o
     row columnFamily:columnQualifier [visibility] timestamp deleteFlag -> Value
     ...
 
-## GetMasterStats
+## GetManagerStats
 
-The `GetMasterStats` tool can be used to retrieve Accumulo state and statistics:
+The `GetManagerStats` tool can be used to retrieve Accumulo state and statistics:
 
 
-    $ accumulo org.apache.accumulo.test.GetMasterStats | grep Load
+    $ accumulo org.apache.accumulo.test.GetManagerStats | grep Load
      OS Load Average: 0.27
 
 ## FindOfflineTablets


[accumulo-website] 02/02: Update Compaction documentation apache/accumulo#1613 (#232)

Posted by ct...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ctubbsii pushed a commit to branch next-release
in repository https://gitbox.apache.org/repos/asf/accumulo-website.git

commit d02d8b0fd20202d65b912c9fdb1d3192f1b06697
Author: Keith Turner <kt...@apache.org>
AuthorDate: Tue Feb 9 18:56:06 2021 -0500

    Update Compaction documentation apache/accumulo#1613 (#232)
    
    * Add throughput to example
---
 _docs-2/administration/compaction.md           | 119 +++++++++++++++++++++++++
 _docs-2/getting-started/table_configuration.md | 108 +---------------------
 2 files changed, 120 insertions(+), 107 deletions(-)

diff --git a/_docs-2/administration/compaction.md b/_docs-2/administration/compaction.md
new file mode 100644
index 0000000..18786a6
--- /dev/null
+++ b/_docs-2/administration/compaction.md
@@ -0,0 +1,119 @@
+---
+title: Compactions
+category: administration
+order: 6
+---
+
+In Accumulo each tablet has a list of files associated with it.  As data is
+written to Accumulo it is buffered in memory. The data buffered in memory is
+eventually written to files in DFS on a per tablet basis. Files can also be
+added to tablets directly by bulk import. In the background tablet servers run
+major compactions to merge multiple files into one. The tablet server has to
+decide which tablets to compact and which files within a tablet to compact.
+
+Within each tablet server there are one or more user configurable Comapction
+Services that compact tablets.  Each Accumulo table has a user configurable
+Compaction Dispatcher that decides which compaction services that table will
+use.  Accumulo generates metrics for each compaction service which enable users
+to adjust compaction service settings based on actual activity.
+
+Each compaction service has a compaction planner that decides which files to
+compact.  The default compaction planner uses the table property {% plink
+table.compaction.major.ratio %} to decide which files to compact.  The
+compaction ratio is real number >= 1.0.  Assume LFS is the size of the largest
+file in a set, CR is the compaction ratio,  and FSS is the sum of file sizes in
+a set. The default planner looks for file sets where LFS*CR <= FSS.  By only
+compacting sets of files that meet this requirement the amount of work done by
+compactions is O(N * log<sub>CR</sub>(N)).  Increasing the ratio will
+result in less compaction work and more files per tablet.  More files per
+tablet means more higher query latency. So adjusting this ratio is a trade off
+between ingest and query performance.
+
+When CR=1.0 this will result in a goal of a single per file tablet, but the
+amount of work is O(N<sup>2</sup>) so 1.0 should be used with caution.  For
+example if a tablet has a 1G file and 1M file is added, then a compaction of
+the 1G and 1M file would be queued. 
+
+Compaction services and dispatchers were introduced in Accumulo 2.1, so much
+of this documentation only applies to Accumulo 2.1 and later.  
+
+## Configuration
+
+Below are some Accumulo shell commands that do the following :
+
+ * Create a compaction service named `cs1` that has three executors.  The first executor named `small` has 8 threads and runs compactions less than 16M.  The second executor `medium` runs compactions less than 128M with 4 threads.  The last executor `large` runs all other compactions.
+ * Create a compaction service named `cs2` that has three executors.  It has similar config to `cs1`, but its executors have less threads. Limits total I/O of all compactions within the service to 40MB/s.
+* Configure table `ci` to use compaction service `cs1` for system compactions and service `cs2` for user compactions.
+
+```
+config -s tserver.compaction.major.service.cs1.planner=org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner
+config -s 'tserver.compaction.major.service.cs1.planner.opts.executors=[{"name":"small","maxSize":"16M","numThreads":8},{"name":"medium","maxSize":"128M","numThreads":4},{"name":"large","numThreads":2}]'
+config -s tserver.compaction.major.service.cs2.planner=org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner
+config -s 'tserver.compaction.major.service.cs2.planner.opts.executors=[{"name":"small","maxSize":"16M","numThreads":4},{"name":"medium","maxSize":"128M","numThreads":2},{"name":"large","numThreads":1}]'
+config -s tserver.compaction.major.service.cs2.throughput=40M
+config -t ci -s table.compaction.dispatcher=org.apache.accumulo.core.spi.compaction.SimpleCompactionDispatcher
+config -t ci -s table.compaction.dispatcher.opts.service=cs1
+config -t ci -s table.compaction.dispatcher.opts.service.user=cs2
+```
+
+For more information see the javadoc for {% jlink org.apache.accumulo.core.spi.compaction %}, 
+{% jlink org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} and 
+{% jlink org.apache.accumulo.core.spi.compaction.SimpleCompactionDispatcher %}
+
+The names of the compaction services and executors are used for logging and metrics.
+
+## Logging
+
+The names of compaction services and executors are used in logging.  The log
+messages below are from a tserver with the configuration above with data being
+written to the ci table.  Also a compaction of the table was forced from the
+shell.
+
+```
+2020-06-25T16:34:31,669 [tablet.files] DEBUG: Compacting 3;667;6 on cs1.small for SYSTEM from [C00001cm.rf, C00001a7.rf, F00001db.rf] size 15 MB
+2020-06-25T16:34:45,165 [tablet.files] DEBUG: Compacted 3;667;6 for SYSTEM created hdfs://localhost:8020/accumulo/tables/3/t-000006f/C00001de.rf from [C00001cm.rf, C00001a7.rf, F00001db.rf]
+2020-06-25T16:35:01,965 [tablet.files] DEBUG: Compacting 3;667;6 on cs1.medium for SYSTEM from [C00001de.rf, A000017v.rf, F00001e7.rf] size 33 MB
+2020-06-25T16:35:11,686 [tablet.files] DEBUG: Compacted 3;667;6 for SYSTEM created hdfs://localhost:8020/accumulo/tables/3/t-000006f/A00001er.rf from [C00001de.rf, A000017v.rf, F00001e7.rf]
+2020-06-25T16:37:12,521 [tablet.files] DEBUG: Compacting 3;667;6 on cs2.medium for USER from [F00001f8.rf, A00001er.rf] size 35 MB config []
+2020-06-25T16:37:17,917 [tablet.files] DEBUG: Compacted 3;667;6 for USER created hdfs://localhost:8020/accumulo/tables/3/t-000006f/A00001fr.rf from [F00001f8.rf, A00001er.rf]
+```
+
+## Metrics
+
+The numbers of major and minor compactions running and queued is visible on the
+Accumulo monitor page. This allows you to see if compactions are backing up
+and adjustments to the above settings are needed. When adjusting the number of
+threads available for compactions, consider the number of cores and other tasks
+running on the nodes.
+
+The numbers displayed on the Accumulo monitor are an aggregate of all
+compaction services and executors.  Accumulo emits metrics about the number of
+compactions queued and running on each compaction executor.  Accumulo also
+emits metrics about the number of files per tablets.  These metrics can be used
+to guide adjusting compaction ratios and compaction service configurations to ensure
+tablets do not have to many files.
+
+For example if metrics show that some compaction executors within a compaction
+service are under utilized while others are over utilized, then the
+configuration for compaction service may need to be adjusted.  If the metrics
+show that all compaction executors are fully utilized for long periods then
+maybe the compaction ratio on a table needs to be increased.
+
+## User compactions
+
+Compactions can be initiated manually for a table. To initiate a minor
+compaction, use the `flush` command in the shell. To initiate a major compaction,
+use the `compact` command in the shell:
+
+    user@myinstance mytable> compact -t mytable
+
+If needed, the compaction can be canceled using `compact --cancel -t mytable`.
+
+The `compact` command will compact all tablets in a table to one file. Even tablets
+with one file are compacted. This is useful for the case where a major compaction
+filter is configured for a table. In 1.4, the ability to compact a range of a table
+was added. To use this feature specify start and stop rows for the compact command.
+This will only compact tablets that overlap the given row range.
+
+
+
diff --git a/_docs-2/getting-started/table_configuration.md b/_docs-2/getting-started/table_configuration.md
index 09e384d..0044790 100644
--- a/_docs-2/getting-started/table_configuration.md
+++ b/_docs-2/getting-started/table_configuration.md
@@ -343,109 +343,7 @@ in reduced read latency. Read the [Caching] documentation to learn more.
 
 ## Compaction
 
-As data is written to Accumulo it is buffered in memory. The data buffered in
-memory is eventually written to HDFS on a per tablet basis. Files can also be
-added to tablets directly by bulk import. In the background tablet servers run
-major compactions to merge multiple files into one. The tablet server has to
-decide which tablets to compact and which files within a tablet to compact.
-This decision is made using the compaction ratio, which is configurable on a
-per table basis by the [table.compaction.major.ratio] property.
-
-Increasing this ratio will result in more files per tablet and less compaction
-work. More files per tablet means more higher query latency. So adjusting
-this ratio is a trade off between ingest and query performance. The ratio
-defaults to 3.
-
-The way the ratio works is that a set of files is compacted into one file if the
-sum of the sizes of the files in the set is larger than the ratio multiplied by
-the size of the largest file in the set. If this is not true for the set of all
-files in a tablet, the largest file is removed from consideration, and the
-remaining files are considered for compaction. This is repeated until a
-compaction is triggered or there are no files left to consider.
-
-The number of background threads tablet servers use to run major and minor
-compactions is configured by the [tserver.compaction.major.concurrent.max]
-and [tserver.compaction.minor.concurrent.max] properties respectively.
-
-The numbers of major and minor compactions running and queued is visible on the
-Accumulo monitor page. This allows you to see if compactions are backing up
-and adjustments to the above settings are needed. When adjusting the number of
-threads available for compactions, consider the number of cores and other tasks
-running on the nodes such as maps and reduces.
-
-If major compactions are not keeping up, then the number of files per tablet
-will grow to a point such that query performance starts to suffer. One way to
-handle this situation is to increase the compaction ratio. For example, if the
-compaction ratio were set to 1, then every new file added to a tablet by minor
-compaction would immediately queue the tablet for major compaction. So if a
-tablet has a 200M file and minor compaction writes a 1M file, then the major
-compaction will attempt to merge the 200M and 1M file. If the tablet server
-has lots of tablets trying to do this sort of thing, then major compactions
-will back up and the number of files per tablet will start to grow, assuming
-data is being continuously written. Increasing the compaction ratio will
-alleviate backups by lowering the amount of major compaction work that needs to
-be done.
-
-Another option to deal with the files per tablet growing too large is to adjust
-the [table.file.max] property. When a tablet reaches this number of files and needs
-to flush its in-memory data to disk, it will choose to do a merging minor compaction.
-A merging minor compaction will merge the tablet's smallest file with the data in memory at
-minor compaction time. Therefore the number of files will not grow beyond this
-limit. This will make minor compactions take longer, which will cause ingest
-performance to decrease. This can cause ingest to slow down until major
-compactions have enough time to catch up. When adjusting this property, also
-consider adjusting the compaction ratio. Ideally, merging minor compactions
-never need to occur and major compactions will keep up. It is possible to
-configure the file max and compaction ratio such that only merging minor
-compactions occur and major compactions never occur. This should be avoided
-because doing only merging minor compactions causes O(N<sup>2</sup>) work to be done.
-The amount of work done by major compactions is `O(N*log<sub>R</sub>(N))` where
-R is the compaction ratio.
-
-Compactions can be initiated manually for a table. To initiate a minor
-compaction, use the `flush` command in the shell. To initiate a major compaction,
-use the `compact` command in the shell:
-
-    user@myinstance mytable> compact -t mytable
-
-If needed, the compaction can be canceled using `compact --cancel -t mytable`.
-
-The `compact` command will compact all tablets in a table to one file. Even tablets
-with one file are compacted. This is useful for the case where a major compaction
-filter is configured for a table. In 1.4, the ability to compact a range of a table
-was added. To use this feature specify start and stop rows for the compact command.
-This will only compact tablets that overlap the given row range.
-
-### Compaction Strategies
-
-The default behavior of major compactions is defined in the class {% jlink org.apache.accumulo.tserver.compaction.DefaultCompactionStrategy %}.
-This behavior can be changed by overriding [table.majc.compaction.strategy] with a fully
-qualified class name.
-
-Custom compaction strategies can have additional properties that are specified with the
-{% plink table.majc.compaction.strategy.opts.\* %} prefix.
-
-Accumulo provides a few classes that can be used as an alternative compaction strategy. These classes are located in the 
-{% jlink -f org.apache.accumulo.tserver.compaction %} package. {% jlink org.apache.accumulo.tserver.compaction.EverythingCompactionStrategy %}
-will simply compact all files. This is the strategy used by the user `compact` command. 
-
-{% jlink org.apache.accumulo.tserver.compaction.strategies.BasicCompactionStrategy %} is
-a compaction strategy that supports a few options based on file size.  It
-supports filtering out large files from ever being included in a compaction.
-It also supports using a different compression algorithm for larger files.
-This allows frequent compactions of smaller files to use a fast algorithm and
-infrequent compactions of more data to use a slower algorithm.  Using this may
-enable an increase in throughput w/o using a lot more space.
-
-The following shell command configures a table to use snappy for small files,
-gzip for files over 100M, and avoid compacting any file larger than 250M.
-
-    config -t myTable -s table.file.compress.type=snappy
-    config -t myTable -s table.majc.compaction.strategy=org.apache.accumulo.tserver.compaction.strategies.BasicCompactionStrategy
-    config -t myTable -s table.majc.compaction.strategy.opts.filter.size=250M
-    config -t myTable -s table.majc.compaction.strategy.opts.large.compress.threshold=100M
-    config -t myTable -s table.majc.compaction.strategy.opts.large.compress.type=gzip
-
+See {% dlink administration/compaction %}
 ## Pre-splitting tables
 
 Accumulo will balance and distribute tables across servers. Before a
@@ -719,9 +617,5 @@ preserved.
 [Scanner]: {% jurl org.apache.accumulo.core.client.Scanner %}
 [BatchScanner]: {% jurl org.apache.accumulo.core.client.BatchScanner %}
 [Caching]: {% durl administration/caching %}
-[table.compaction.major.ratio]: {% purl table.compaction.major.ratio %}
-[tserver.compaction.major.concurrent.max]: {% purl tserver.compaction.major.concurrent.max %}
-[tserver.compaction.minor.concurrent.max]: {% purl tserver.compaction.minor.concurrent.max %}
-[table.file.max]: {% purl table.file.max %}
 [table.bloom.enabled]: {% purl table.bloom.enabled %}
 [table.file.compress.type]: {% purl table.file.compress.type %}