Apache Accumulo 1.7.3

06 Apr 2017

Apache Accumulo 1.7.3 is a maintenance release on the 1.7 version branch. This release contains changes from 79 issues, comprised of bug-fixes, performance improvements, build quality improvements, and more. See JIRA for a complete list.

Below are resources for this release:

  • User Manual : In-depth developer and administrator documentation.
  • Javadocs : Accumulo 1.7.3 API
  • Examples : Code with corresponding readme files that give step by step instructions for running example code.

Accumulo follows Semantic Versioning guidelines. This release is a “patch version”, which means that only backwards compatible bug fixes are introduced in this version. A bug fix is defined as an internal change that fixes incorrect behavior. Users of any previous 1.7.x release are strongly encouraged to update as soon as possible to benefit from the bug fixes with very little concern in change of underlying functionality. As always, the Accumulo developers take API compatibility very seriously and have invested much time to ensure that we meet the promises set forth to our users. Users of 1.6 or earlier that are seeking to upgrade to 1.7 should consider 1.7.3 as a starting point.

Major Changes

Tablet Server Performance Improvement

ACCUMULO-4458 mitigated some contention on the Hadoop configuration instance backing the XML configs read for SiteConfiguration. This should improve overall Tablet Server performance.

Synchronization issue with deep copies of sources

Deep copies of iterator sources were not thread safe and threw exceptions, mostly down in the ZlibDecompressor library. The real bug was in the BoundedRangeFileInputStream. The read() method synchronizes on the underlying FSDataInputStream, however the available() method did not. See ACCUMULO-4391.

System permission bug in Thrift Proxy

The Accumulo Proxy lacked support for the following system permissions:

  • System.CREATE_NAMESPACE
  • System.DROP_NAMESPACE
  • System.ALTER_NAMESPACE
  • System.OBTAIN_DELEGATION_TOKEN

Without these permissions, proxy users would get an AccumuloException if attempting any of those operations. Fixed in ticket ACCUMULO-4519.

HostRegexTableLoadBalancer used stale information

The HostRegexTableLoadBalancer maintains an internal mapping of tablet server pools and tablet server status. It was updated at a configurable interval initially as an optimization. Unfortunately it had the negative side effect of providing the assignment and balance operations with stale information. This lead to a constant shuffling of tablets. The configuration property was removed so that assign/balance methods get updated information every time. See ACCUMULO-4576.

Modify TableOperations online to check for table state

The table operations online operation executes as a fate operation. If a transaction lock for the table is currently held, this operation will block even if no action is needed. ACCUMULO-4574 changes the behavior of the online operation to a NOOP if the table is already in the requested state. This returns immediately without queuing a fate operation.

Other Notable Changes

  • ACCUMULO-4600 Shell does not fall back to accumulo-site.xml when on classpath
  • ACCUMULO-4597 NPE from RFile PrintInfo when RF has more than 1,000 column families.
  • ACCUMULO-4488 Fix gap in user manual on Kerberos for clients
  • ACCUMULO-2724 CollectTabletStats had multiple -t parameter
  • ACCUMULO-4431 Log what random is chosen for a tserver.
  • ACCUMULO-4549 Remove duplicate init functions in TabletBalancer
  • ACCUMULO-4467 Random Walk broken because of unmet dependency on commons-math
  • ACCUMULO-4578 Cancel compaction FATE operation does not release namespace lock
  • ACCUMULO-4505 Shell still reads accumulo-site.xml when using Zookeeper CLI options
  • ACCUMULO-4535 HostRegexTableLoadBalancer fails with NullPointerException
  • ACCUMULO-4575 Concurrent table delete operations leave orphan fate transaction locks

Upgrading

The recommended way to upgrade from a prior 1.7.x release is to stop Accumulo, upgrade to 1.7.3 and then start 1.7.3.

When upgrading, there is a known issue if the upgrade fails due to outstanding FATE operations, see ACCUMULO-4496 The work around if this situation is encountered:

  • Start tservers
  • Start shell
  • Run fate print to list all
  • If completed, just delete with fate delete
  • Start masters once there are no more fate operations

If any of the FATE operations are not complete, you should rollback the upgrade and troubleshoot completing them with your prior version. When performing an upgrade between major versions, the upgrade is one-way, therefore it is important that you do not have any outstanding FATE operations before starting the upgrade.

From 1.6 to 1.7

Upgrades from 1.6 to 1.7 are be possible with little effort as no changes were made at the data layer and RPC changes were made in a backwards-compatible way. The recommended way is to stop Accumulo 1.6, perform the Accumulo upgrade to 1.7, and then start 1.7. Like previous versions, after 1.7.0 is started on a 1.6 instance, a one-time upgrade will happen by the Master which will prevent a downgrade back to 1.6. Upgrades are still one way. Upgrades from versions prior to 1.6 to 1.7 should follow the below path to 1.6 and then perform the upgrade to 1.7 – direct upgrades to 1.7 for versions other than 1.6 are untested.

After upgrading to 1.7.0, users will notice the addition of a replication table in the accumulo namespace. This table is created and put offline to avoid any additional maintenance if the data-center replication feature is not in use.

Existing configuration files from 1.6 should be compared against the examples provided in 1.7. The 1.6 configuration files should all function with 1.7 code, but you will likely want to include a new file (hadoop-metrics2-accumulo.properties) to enable the new metrics subsystem. Read the section on Hadoop Metrics2 in the Administration chapter of the Accumulo User Manual.

For each of the other new features, new configuration properties exist to support the feature. Refer to the added sections in the User Manual for the feature for information on how to properly configure and use the new functionality.

Testing

Each unit and functional test only runs on a single node, while the RandomWalk and Continuous Ingest tests run on any number of nodes. Agitation refers to randomly restarting Accumulo processes and Hadoop Datanode processes, and, in HDFS High-Availability instances, forcing NameNode failover.

OS/Environment Hadoop Nodes ZooKeeper HDFS HA Tests
CentOS 7, openJDK 1.8 from CentOS yum repo, EC2; 1 leader m3.xlarge, 8 workers d2.xlarge 2.7.3 9 3.4.9 No 24 HR Continuous Ingest without Agitation
CentOS 7, openJDK 1.8 from CentOS yum repo, EC2; 1 leader m3.xlarge, 8 workers d2.xlarge 2.7.3 9 3.4.9 No 24 HR Continuous Ingest Agitation

View all releases in the archive