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:
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.
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:
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.
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.
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.
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.
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.
accumulo init
sets the correct permissions on /accumulo to 700View the [Upgrading Accumulo documentation][upgrade] for guidance.
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