title: Apache Accumulo 1.9.0 archived_critical: true

Apache Accumulo 1.9.0 is a minor release on the 1.x branch. This release would be considered a maintenance release on 1.8 branch except there are some API additions which resulted in a new minor release. Users of 1.8.x versions of Accumulo should upgrade to 1.9.0. There will be no more bug fix releases on the 1.8 branch. This release contains changes for nearly a hundred issues. See GitHub and JIRA for a list of changes.

Below are resources for this release:

  • [User Manual][user_manual] - In-depth developer and administrator documentation.
  • [Javadocs][javadoc] - Accumulo 1.9.0 API
  • [Examples][examples] - Code with corresponding readme files that give step by step instructions for running example code.

Notable Changes

Deprecated ClientConfiguration API using commons config

In [ACCUMULO-4611], public API in ClientConfiguration using commons config types was deprecated to better support Hadoop 3 in the future. New methods were added to replace these methods which cause this release to be a 1.9.0 release. These changes allow removal of commons config from Accumulo's API in 2.0.0. If using ClientConfiguration, then switching from existing constructors to the new static methods [create()], [fromFile()], or [fromMap()] will ensure your code works in 2.0.0.

Performance Improvements

Accumulo was profiled while running lots of concurrent small scans. During this exercise these performance bugs were found and fixed: [#379], [ACCUMULO-4778], [ACCUMULO-4779], [ACCUMULO-4781], [ACCUMULO-4782], [ACCUMULO-4788], [ACCUMULO-4789], [ACCUMULO-4790], [ACCUMULO-4797], [ACCUMULO-4798], [ACCUMULO-4799], [ACCUMULO-4800], [ACCUMULO-4801], [ACCUMULO-4805], and [ACCUMULO-4809]

Below are other significant performance improvements in 1.9.0:

  • [ACCUMULO-4636] - System iterator performance improvements
  • [ACCUMULO-4657] - Avoided expensive BulkImport logging
  • [ACCUMULO-4667] - Avoided unnecessary recomputation in LocalityGroupIterator
  • [#410] - Fixed inefficient auths check

Fixed upgrade process to set version on all volumes

During upgrades, only one volume in a multiple HDFS volume was updated with the correct version. This would cause all tablet servers to complain and ultimately fail. [ACCUMULO-4686] fixes this by setting the version on all volumes.

Updated Accumulo to work with new releases of Guava

In [ACCUMULO-4702], dependencies on Beta-annotated Guava classes and methods were removed. While Accumulo still includes Guava 14 in its tarball, it will work with newer versions of Guava in client code. It has been tested to work with Guava 23.

Updated RFile to prevent very large blocks

RFiles now use windowed statistics ([ACCUMULO-4669]) to prevent very large blocks. In 1.8.0 a bug was introduced that caused RFile data block sizes to grow very large in the case where key sizes slowly increased. This could lead to degraded query performance or out of memory exceptions on tablet servers.

Allow iterators to yield

In [ACCUMULO-4643] added capability for an iterator to yield control in a seek or next call prior to finding a key/value. Yielding avoids starvation of other scans when iterators take a long time to return a key/value. To use this feature, implement YieldingKeyValueIterator.

Disallow dots (.) in iterator names

In [ACCUMULO-3389], we added a check to prevent iterators from being created by our API which contained the dot (.) character. In some cases, the presence of a dot character could be parsed incorrectly as an iterator option rather than part of its name. This caused unexpected problems. Iterator names are no longer allowed to contain dots. Any user code doing that will break with an IllegalArgumentException.

Various security-related improvements

  • [#417] - Make TLSv1.2 the default for TLS RPC connections
  • [ACCUMULO-2806] - accumulo init sets the correct permissions on /accumulo to 700
  • [ACCUMULO-4587] - use a newer version of JQuery (3.2.1)
  • [ACCUMULO-4660] - sanitized incoming values from HTTP parameters
  • [ACCUMULO-4665] and [ACCUMULO-4666] - Kerberos improvements
  • [ACCUMULO-4676] - set the HTTPOnly flags for JSESSSIONID in monitor

Other Notable Changes

  • [#403] - Enabled more metrics reporting
  • [ACCUMULO-4528] - Add import/export table info to docs
  • [ACCUMULO-4655] - Added a Response Time column to the monitor
  • [ACCUMULO-4693] - Add process name to metrics
  • [ACCUMULO-4721] - Document rfile-info in the user manual

Upgrading

View the [Upgrading Accumulo documentation][upgrade] for guidance.

Testing

Continuous ingest, random walk, and all integration test were run against RC1. Randomwalk was run for 2 days with 7 walkers. Continuous ingest was run with 9 nodes for 24 hours followed by a successful verification.

[upgrade]: {{ site.baseurl }}/docs/2.x/administration/upgrading [user_manual]: {{ site.baseurl }}/1.9/accumulo_user_manual.html [javadoc]: {{ site.baseurl }}/1.9/apidocs/ [examples]: {{ site.baseurl }}/1.9/examples/ [create()]: {{ site.baseurl }}/1.9/apidocs/org/apache/accumulo/core/client/ClientConfiguration.html#create-- [fromFile()]: {{ site.baseurl }}/1.9/apidocs/org/apache/accumulo/core/client/ClientConfiguration.html#fromFile-java.io.File- [fromMap()]: {{ site.baseurl }}/1.9/apidocs/org/apache/accumulo/core/client/ClientConfiguration.html#fromMap-java.util.Map- [#379]: https://github.com/apache/accumulo/issues/379 [#393]: https://github.com/apache/accumulo/issues/393 [#401]: https://github.com/apache/accumulo/issues/401 [#403]: https://github.com/apache/accumulo/issues/403 [#410]: https://github.com/apache/accumulo/issues/410 [#416]: https://github.com/apache/accumulo/issues/416 [#417]: https://github.com/apache/accumulo/issues/417 [ACCUMULO-1972]: https://issues.apache.org/jira/browse/ACCUMULO-1972 [ACCUMULO-2806]: https://issues.apache.org/jira/browse/ACCUMULO-2806 [ACCUMULO-3208]: https://issues.apache.org/jira/browse/ACCUMULO-3208 [ACCUMULO-3283]: https://issues.apache.org/jira/browse/ACCUMULO-3283 [ACCUMULO-3389]: https://issues.apache.org/jira/browse/ACCUMULO-3389 [ACCUMULO-3827]: https://issues.apache.org/jira/browse/ACCUMULO-3827 [ACCUMULO-4170]: https://issues.apache.org/jira/browse/ACCUMULO-4170 [ACCUMULO-4365]: https://issues.apache.org/jira/browse/ACCUMULO-4365 [ACCUMULO-4432]: https://issues.apache.org/jira/browse/ACCUMULO-4432 [ACCUMULO-4482]: https://issues.apache.org/jira/browse/ACCUMULO-4482 [ACCUMULO-4506]: https://issues.apache.org/jira/browse/ACCUMULO-4506 [ACCUMULO-4528]: https://issues.apache.org/jira/browse/ACCUMULO-4528 [ACCUMULO-4546]: https://issues.apache.org/jira/browse/ACCUMULO-4546 [ACCUMULO-4555]: https://issues.apache.org/jira/browse/ACCUMULO-4555 [ACCUMULO-4576]: https://issues.apache.org/jira/browse/ACCUMULO-4576 [ACCUMULO-4585]: https://issues.apache.org/jira/browse/ACCUMULO-4585 [ACCUMULO-4587]: https://issues.apache.org/jira/browse/ACCUMULO-4587 [ACCUMULO-4591]: https://issues.apache.org/jira/browse/ACCUMULO-4591 [ACCUMULO-4600]: https://issues.apache.org/jira/browse/ACCUMULO-4600 [ACCUMULO-4602]: https://issues.apache.org/jira/browse/ACCUMULO-4602 [ACCUMULO-4611]: https://issues.apache.org/jira/browse/ACCUMULO-4611 [ACCUMULO-4619]: https://issues.apache.org/jira/browse/ACCUMULO-4619 [ACCUMULO-4627]: https://issues.apache.org/jira/browse/ACCUMULO-4627 [ACCUMULO-4633]: https://issues.apache.org/jira/browse/ACCUMULO-4633 [ACCUMULO-4634]: https://issues.apache.org/jira/browse/ACCUMULO-4634 [ACCUMULO-4636]: https://issues.apache.org/jira/browse/ACCUMULO-4636 [ACCUMULO-4639]: https://issues.apache.org/jira/browse/ACCUMULO-4639 [ACCUMULO-4640]: https://issues.apache.org/jira/browse/ACCUMULO-4640 [ACCUMULO-4643]: https://issues.apache.org/jira/browse/ACCUMULO-4643 [ACCUMULO-4648]: https://issues.apache.org/jira/browse/ACCUMULO-4648 [ACCUMULO-4654]: https://issues.apache.org/jira/browse/ACCUMULO-4654 [ACCUMULO-4655]: https://issues.apache.org/jira/browse/ACCUMULO-4655 [ACCUMULO-4656]: https://issues.apache.org/jira/browse/ACCUMULO-4656 [ACCUMULO-4657]: https://issues.apache.org/jira/browse/ACCUMULO-4657 [ACCUMULO-4658]: https://issues.apache.org/jira/browse/ACCUMULO-4658 [ACCUMULO-4660]: https://issues.apache.org/jira/browse/ACCUMULO-4660 [ACCUMULO-4662]: https://issues.apache.org/jira/browse/ACCUMULO-4662 [ACCUMULO-4665]: https://issues.apache.org/jira/browse/ACCUMULO-4665 [ACCUMULO-4666]: https://issues.apache.org/jira/browse/ACCUMULO-4666 [ACCUMULO-4667]: https://issues.apache.org/jira/browse/ACCUMULO-4667 [ACCUMULO-4669]: https://issues.apache.org/jira/browse/ACCUMULO-4669 [ACCUMULO-4676]: https://issues.apache.org/jira/browse/ACCUMULO-4676 [ACCUMULO-4682]: https://issues.apache.org/jira/browse/ACCUMULO-4682 [ACCUMULO-4684]: https://issues.apache.org/jira/browse/ACCUMULO-4684 [ACCUMULO-4685]: https://issues.apache.org/jira/browse/ACCUMULO-4685 [ACCUMULO-4686]: https://issues.apache.org/jira/browse/ACCUMULO-4686 [ACCUMULO-4687]: https://issues.apache.org/jira/browse/ACCUMULO-4687 [ACCUMULO-4693]: https://issues.apache.org/jira/browse/ACCUMULO-4693 [ACCUMULO-4699]: https://issues.apache.org/jira/browse/ACCUMULO-4699 [ACCUMULO-4702]: https://issues.apache.org/jira/browse/ACCUMULO-4702 [ACCUMULO-4713]: https://issues.apache.org/jira/browse/ACCUMULO-4713 [ACCUMULO-4716]: https://issues.apache.org/jira/browse/ACCUMULO-4716 [ACCUMULO-4721]: https://issues.apache.org/jira/browse/ACCUMULO-4721 [ACCUMULO-4741]: https://issues.apache.org/jira/browse/ACCUMULO-4741 [ACCUMULO-4744]: https://issues.apache.org/jira/browse/ACCUMULO-4744 [ACCUMULO-4751]: https://issues.apache.org/jira/browse/ACCUMULO-4751 [ACCUMULO-4774]: https://issues.apache.org/jira/browse/ACCUMULO-4774 [ACCUMULO-4775]: https://issues.apache.org/jira/browse/ACCUMULO-4775 [ACCUMULO-4776]: https://issues.apache.org/jira/browse/ACCUMULO-4776 [ACCUMULO-4777]: https://issues.apache.org/jira/browse/ACCUMULO-4777 [ACCUMULO-4778]: https://issues.apache.org/jira/browse/ACCUMULO-4778 [ACCUMULO-4779]: https://issues.apache.org/jira/browse/ACCUMULO-4779 [ACCUMULO-4780]: https://issues.apache.org/jira/browse/ACCUMULO-4780 [ACCUMULO-4781]: https://issues.apache.org/jira/browse/ACCUMULO-4781 [ACCUMULO-4782]: https://issues.apache.org/jira/browse/ACCUMULO-4782 [ACCUMULO-4787]: https://issues.apache.org/jira/browse/ACCUMULO-4787 [ACCUMULO-4788]: https://issues.apache.org/jira/browse/ACCUMULO-4788 [ACCUMULO-4789]: https://issues.apache.org/jira/browse/ACCUMULO-4789 [ACCUMULO-4790]: https://issues.apache.org/jira/browse/ACCUMULO-4790 [ACCUMULO-4791]: https://issues.apache.org/jira/browse/ACCUMULO-4791 [ACCUMULO-4797]: https://issues.apache.org/jira/browse/ACCUMULO-4797 [ACCUMULO-4798]: https://issues.apache.org/jira/browse/ACCUMULO-4798 [ACCUMULO-4799]: https://issues.apache.org/jira/browse/ACCUMULO-4799 [ACCUMULO-4800]: https://issues.apache.org/jira/browse/ACCUMULO-4800 [ACCUMULO-4801]: https://issues.apache.org/jira/browse/ACCUMULO-4801 [ACCUMULO-4805]: https://issues.apache.org/jira/browse/ACCUMULO-4805 [ACCUMULO-4809]: https://issues.apache.org/jira/browse/ACCUMULO-4809 [ACCUMULO-4817]: https://issues.apache.org/jira/browse/ACCUMULO-4817 [ACCUMULO-4826]: https://issues.apache.org/jira/browse/ACCUMULO-4826 [ACCUMULO-4828]: https://issues.apache.org/jira/browse/ACCUMULO-4828 [ACCUMULO-4832]: https://issues.apache.org/jira/browse/ACCUMULO-4832 [ACCUMULO-4833]: https://issues.apache.org/jira/browse/ACCUMULO-4833 [ACCUMULO-4834]: https://issues.apache.org/jira/browse/ACCUMULO-4834 [ACCUMULO-4835]: https://issues.apache.org/jira/browse/ACCUMULO-4835 [ACCUMULO-4836]: https://issues.apache.org/jira/browse/ACCUMULO-4836 [ACCUMULO-4847]: https://issues.apache.org/jira/browse/ACCUMULO-4847