| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| [[prior_release_notes]] |
| = Apache Kudu Prior Version Release Notes |
| |
| :author: Kudu Team |
| :imagesdir: ./images |
| :icons: font |
| :toc: left |
| :toclevels: 3 |
| :doctype: book |
| :backend: html5 |
| :sectlinks: |
| :experimental: |
| |
| This section reproduces the release notes for new features and incompatible |
| changes in prior releases of Apache Kudu. |
| |
| |
| NOTE: The list of known issues and limitations for prior releases are not |
| reproduced on this page. Please consult the |
| link:http://kudu.apache.org/releases/[documentation of the appropriate release] |
| for a list of known issues and limitations. |
| |
| [[rn_1.12.0]] |
| = Apache Kudu 1.12.0 Release Notes |
| |
| [[rn_1.12.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| |
| [[rn_1.12.0_obsoletions]] |
| == Obsoletions |
| |
| * The Flume sink has been migrated to the Apache Flume project and removed |
| from Kudu. Users depending on the Flume integration can use the old |
| `kudu-flume` jars or migrate to the Flume jars containing the Kudu sink. |
| |
| * Support for Apache Sentry authorization has been deprecated and may be |
| removed in the next minor release. Users depending on the Sentry integration |
| should migrate to the Apache Ranger integration for fine-grained authorization. |
| |
| * Support for Python 2 has been deprecated and may be removed in the next minor |
| release. |
| |
| * Support for CentOS/RHEL 6, Debian 8, Ubuntu 14 has been deprecated and may |
| be removed in the next minor release. |
| |
| [[rn_1.12.0_deprecations]] |
| == Deprecations |
| |
| |
| [[rn_1.12.0_new_features]] |
| == New features |
| |
| * Kudu now supports native fine-grained authorization via integration with |
| Apache Ranger. Kudu may now enforce access control policies defined for |
| Kudu tables and columns stored in Ranger. See the |
| link:security.html#fine_grained_authz[authorization documentation] |
| for more details. |
| |
| * Kudu’s web UI now supports proxying via Apache Knox. Kudu may be deployed |
| in a firewalled state behind a Knox Gateway which will forward HTTP requests |
| and responses between clients and the Kudu web UI. |
| |
| * Kudu’s web UI now supports HTTP keep-alive. Operations that access multiple |
| URLs will now reuse a single HTTP connection, improving their performance. |
| |
| * The `kudu tserver quiesce` tool is added to quiesce tablet servers. While a |
| tablet server is quiescing, it will stop hosting tablet leaders and stop |
| serving new scan requests. This can be used to orchestrate a rolling restart |
| without stopping on-going Kudu workloads. |
| |
| * Introduced `auto` time source for HybridClock timestamps. With |
| `--time_source=auto` in AWS and GCE cloud environments, Kudu masters and |
| tablet servers use the built-in NTP client synchronized with dedicated NTP |
| servers available via host-only networks. With `--time_source=auto` in |
| environments other than AWS/GCE, Kudu masters and tablet servers rely on |
| their local machine's clock synchronized by NTP. The default setting for |
| the HybridClock time source (`--time_source=system`) is backward-compatible, |
| requiring the local machine's clock to be synchronized by the kernel's NTP |
| discipline. |
| |
| * The `kudu cluster rebalance` tool now supports moving replicas away from |
| specific tablet servers by supplying the `--ignored_tservers` and |
| `--move_replicas_from_ignored_tservers` arguments (see |
| link:https://issues.apache.org/jira/browse/KUDU-2914[KUDU-2914] for more |
| details). |
| |
| * The `kudu table create` tool is added to allow users to specify table |
| creation options using JSON. |
| |
| * Kudu now supports DATE and VARCHAR data types. See the |
| link:http://kudu.apache.org/docs/schema_design.html[schema design documentation] |
| for more details. |
| |
| |
| [[rn_1.12.0_improvements]] |
| == Optimizations and improvements |
| |
| * Write Ahead Log file segments and index chunks are now managed by Kudu’s file |
| cache. With that, all long-lived file descriptors used by Kudu are managed by |
| the file cache, and there’s no longer a need for capacity planning of file |
| descriptor usage. |
| |
| * Kudu no longer requires the running of `kudu fs update_dirs` to change a |
| directory configuration or recover from a disk failure |
| (see link:https://issues.apache.org/jira/browse/KUDU-2993[KUDU-2993]). |
| |
| * Kudu tablet servers and masters now expose a tablet-level metric |
| `num_raft_leaders` for the number of Raft leaders hosted on the server. |
| |
| * Kudu's maintenance operation scheduling has been updated to prioritize |
| reducing WAL retention under memory pressure. Kudu would previously prioritize |
| operations that yielded high-memory reduction, which could result in high WAL |
| disk usage in workloads that contained updates |
| (see link:https://issues.apache.org/jira/browse/KUDU-3002[KUDU-3002]). |
| |
| * A new maintenance operation is introduced to remove rowsets that have had all |
| of their rows deleted and whose newest delete operations are considered |
| ancient (see link:https://issues.apache.org/jira/browse/KUDU-1625[KUDU-1625]). |
| |
| * The built-in NTP client is now fully supported as the time source for Kudu's |
| HybridTime clock, i.e. it's no longer marked as experimental. To switch the |
| time source from the existing `system` time source (which is the default) |
| to the built-in NTP client, use `--time_source=builtin`. |
| |
| * Introduced additional metrics for the built-in NTP client |
| (see link:https://issues.apache.org/jira/browse/KUDU-3048[KUDU-3048]). |
| |
| * Updated `/config` page of masters' and tablet servers' web UI to display |
| configured and effective time source. In addition, the effective list of |
| reference servers for the built-in NTP client is shown there as well, |
| if applicable. |
| |
| * `chronyd` (version 3.4 and newer) is now supported as NTP server for |
| synchronizing the local machine's clock in a Kudu cluster. It's important to |
| have the `rtcsync` option enabled in the configuration of the `chronyd` NTP |
| daemon (see link:https://issues.apache.org/jira/browse/KUDU-2573[KUDU-2573]). |
| |
| * Kudu now supports building and running on RHEL/CentOS 8. This has been tested |
| with CentOS 8.1. |
| |
| * The processing of Raft consensus vote requests has been improved to be more |
| robust during high contention scenarios like election storms. |
| |
| * Added a validator to enforce consistency between the maximum size of an RPC |
| and the maximum size of tablet transaction memory, controlled by |
| `--rpc_max_message_size` and `--tablet_transaction_memory` flags |
| correspondingly. In prior releases, if the limit on the size of RPC requests |
| is increased and the limit on tablet transaction memory size is kept with the |
| default setting, certain Raft transactions could be committed but not applied |
| (see link:https://issues.apache.org/jira/browse/KUDU-3023[KUDU-3023]). |
| |
| * The metrics endpoint now supports filtering metrics by a metric severity level. |
| See the link:https://kudu.apache.org/docs/administration.html#_collecting_metrics_via_http[documentation] |
| for more details. |
| |
| * Many `kudu local_replica` tools are updated to not open the block manager, |
| which significantly reduces the amount of IO done when running them (see |
| link:https://issues.apache.org/jira/browse/KUDU-3070[KUDU-3070] for more |
| details). |
| |
| * The Kudu Java client now exposes a way to get the resource metrics associated |
| with a given scanner (see |
| link:https://issues.apache.org/jira/browse/KUDU-2162[KUDU-2162] for more |
| details). |
| |
| * Scan predicates are pushed down to RLE decoders, improving |
| predicate-evaluation-efficiency in some workloads (see |
| link:https://issues.apache.org/jira/browse/KUDU-2852[KUDU-2852] for more |
| details). |
| |
| * The log block manager will now attempt to use multiple threads to open blocks |
| in each data directory, in some tests reducing startup time by up to 20% (see |
| link:https://issues.apache.org/jira/browse/KUDU-2977[KUDU-2977] and |
| link:https://issues.apache.org/jira/browse/KUDU-3001[KUDU-3001] for more |
| details). |
| |
| * Kudu's tablet server web UI scans page is updated to show the number of round |
| trips per scanner. |
| |
| * Kudu's master and tablet server web UIs are updated to show critical |
| partition information, including tablet count and on-disk size. |
| |
| * Kudu servers now expose the `last_read_elapsed_seconds` and |
| `last_write_elapsed_seconds` tablet-level metrics that indicate how long ago |
| the most recent read and write operations to a given tablet were. |
| |
| * Kudu servers now expose the `transaction_memory_limit_rejections` |
| tablet-level metric that tracks the number of transactions rejected because a |
| given tablet's transactional memory limit was reached (see |
| link:https://issues.apache.org/jira/browse/KUDU-3021[KUDU-3021] for more |
| details). |
| |
| [[rn_1.12.0_fixed_issues]] |
| == Fixed Issues |
| |
| * Fixed a bug in which Kudu would not schedule compactions if a server were |
| under memory pressure |
| (see link:https://issues.apache.org/jira/browse/KUDU-2929[KUDU-2929]). |
| |
| * Fixed a bug where DDL operations like ALTER TABLE on tables with huge |
| number of partitions might result in a DoS situation for Kudu masters |
| (see link:https://issues.apache.org/jira/browse/KUDU-3036[KUDU-3036]). |
| |
| * Fixed a bug where Kudu Java client cannot negotiate a secure connection |
| with Kudu masters and tablet servers if using BouncyCastle JCE provider |
| (see link:https://issues.apache.org/jira/browse/KUDU-3106[KUDU-3106]). |
| |
| * Kudu masters will now crash immediately upon hitting a disk failure (see |
| link:https://issues.apache.org/jira/browse/KUDU-2904[KUDU-2904] for more details). |
| |
| * Fixed an issue in the Kudu master in which delays in receiving tablet server |
| heartbeats could result in an excess amount of RPC traffic between the |
| masters and tablet servers (see |
| link:https://issues.apache.org/jira/browse/KUDU-2992[KUDU-2992] for more |
| details). |
| |
| * Fixed an issue with Kudu's location placement policy that would place all |
| replicas in one location when two locations were available (see |
| link:https://issues.apache.org/jira/browse/KUDU-3008[KUDU-3008] for more |
| details). |
| |
| * The Java client will now correctly propagate timestamps when sending write |
| batches (see link:https://issues.apache.org/jira/browse/KUDU-3035[KUDU-3035] |
| for more detail). |
| |
| * Fixed an issue with the Kudu backup Spark jobs in which Kudu would return |
| with a non-zero exit if the job succeeded but backed up no rows (see |
| link:https://issues.apache.org/jira/browse/KUDU-3099[KUDU-3099] for more |
| details). |
| |
| * The `raft_term` and `time_since_last_leader_heartbeat` aggregated table |
| metrics will now return the maximum metric reported instead of the sum. |
| |
| [[rn_1.12.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.12.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.12 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| * Rolling upgrade between Kudu 1.11 and Kudu 1.12 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.12 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations |
| on wire compatibility between Kudu 1.12 and versions earlier than 1.3: |
| |
| * If a Kudu 1.12 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| * If a Kudu 1.12 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.12.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.12.0 |
| |
| |
| [[rn_1.12.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.12 Java client library is API- and ABI-compatible with Kudu 1.11. Applications |
| written against Kudu 1.11 will compile and run against the Kudu 1.12 client library and |
| vice-versa. |
| |
| * The Kudu 1.12 {cpp} client is API- and ABI-forward-compatible with Kudu 1.11. |
| Applications written and compiled against the Kudu 1.11 client library will run without |
| modification against the Kudu 1.12 client library. Applications written and compiled |
| against the Kudu 1.12 client library will run without modification against the Kudu 1.11 |
| client library. |
| |
| * The Kudu 1.12 Python client is API-compatible with Kudu 1.11. Applications |
| written against Kudu 1.11 will continue to run against the Kudu 1.12 client |
| and vice-versa. |
| |
| [[rn_1.12.0_known_issues]] |
| == Known Issues and Limitations |
| |
| Please refer to the link:known_issues.html[Known Issues and Limitations] section of the |
| documentation. |
| |
| [[rn_1.12.0_contributors]] |
| == Contributors |
| |
| Kudu 1.12 includes contributions from 33 people, including 8 first-time |
| contributors: |
| |
| * Andy Singer |
| * Michele Milesi |
| * Ning Wang |
| * Renhai Zhao |
| * Sheng Liu |
| * Thomas D'Silva |
| * Tianhua Huang |
| * Waleed Fateem |
| |
| Thank you for your help in making Kudu even better! |
| |
| [[rn_1.11.1]] |
| Apache Kudu 1.11.1 is a bug-fix release which fixes one critical licensing |
| issue in Kudu 1.11.0. |
| |
| [[rn_1.11.1_upgrade_notes]] |
| == Upgrade Notes |
| When upgrading from earlier versions of Kudu, if support for Kudu's NVM |
| (non-volatile memory) block cache is desired, install the `memkind` library |
| of version 1.8.0 or newer as documented in link:installation.html[Kudu |
| Installation] for corresponding platform. This is a mandatory step for existing |
| users of the NVM block cache (i.e. those who set `--block_cache_type=NVM` |
| for `kudu-master` and `kudu-tserver`): they must install `memkind`, otherwise |
| their Kudu processes will crash at startup. |
| |
| [[rn_1.11.1_fixed_issues]] |
| == Fixed Issues |
| * Fixed an issue with distributing `libnuma` dynamic library with `kudu-binary` |
| JAR artifact. Also, fixed the issue of statically compiling in `libnuma.a` |
| into `kudu-master` and `kudu-tserver` binaries when building Kudu |
| from source in release mode. The fix removes both `numactl` and `memkind` |
| projects from Kudu's thirdparty dependencies and makes the dependency on the |
| `libmemkind` library optional, opening the library using `dlopen()` and |
| resolving required symbols via `dlsym()` |
| (see link:https://issues.apache.org/jira/browse/KUDU-2990[KUDU-2990]). |
| |
| * Fixed an issue with `kudu cluster rebalancer` CLI tool crashing when running |
| against a location-aware cluster if a tablet server in one location doesn't |
| contain a single tablet replica |
| (see link:https://issues.apache.org/jira/browse/KUDU-2987[KUDU-2987]). |
| |
| * Fixed an issue with connection negotiation using SASL mechanism when server |
| FQDN is longer than 64 characters |
| (see link:https://issues.apache.org/jira/browse/KUDU-2989[KUDU-2989]). |
| |
| * Fixed an issue in the test harness of the kudu-binary JAR artifact. With this |
| fix, `kudu-master` and `kudu-tserver` processes of the mini-cluster's test |
| harness no longer rely on the test NTP server to synchronize their built-in |
| NTP client. Instead, the test harness relies on the local machine clock |
| synchronized by the system NTP daemon |
| (see link:https://issues.apache.org/jira/browse/KUDU-2994[KUDU-2994]). |
| |
| [[rn_1.11.0]] |
| = Apache Kudu 1.11.0 Release Notes |
| |
| [[rn_1.11.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| * Since link:https://issues.apache.org/jira/browse/KUDU-2625[KUDU-2625] is |
| addressed, tablet servers now reject individual write operations which |
| violate schema constraints in a batch of write operations. In prior versions |
| the behavior was to reject the whole batch of write operations if a violation |
| of the schema constraints is detected even for a single row. It's recommended |
| to revise applications which relied on the behavior mentioned above |
| upon upgrading to Kudu 1.11.0. |
| |
| [[rn_1.11.0_deprecations]] |
| == Deprecations |
| |
| * The Kudu Flume integration is deprecated and may be removed in the |
| next minor release. The integration will be moved to the Apache Flume |
| project going forward |
| (see link:https://issues.apache.org/jira/browse/FLUME-3345[FLUME-3345]). |
| |
| [[rn_1.11.0_new_features]] |
| == New features |
| |
| * Kudu now supports putting tablet servers into maintenance. While in this |
| mode, the tablet server's replicas will not be re-replicated if it fails. |
| Only upon exiting maintenance will re-replication be triggered for any |
| remaining under-replicated tablets. The `kudu tserver state enter_maintenance` |
| and `kudu tserver state exit_maintenance` tools are added to orchestrate |
| tablet server maintenance, and the `kudu tserver list` tool is amended with |
| a "state" column option to display current state of each tablet server |
| (see link:https://issues.apache.org/jira/browse/KUDU-2069[KUDU-2069]). |
| |
| * Kudu now has a built-in NTP client which maintains the internal wallclock |
| time used for generation of HybridTime timestamps. When enabled, system clock |
| synchronization for nodes running Kudu is no longer necessary. This is useful |
| for containerized deployments and in other cases when it's troublesome |
| to maintain properly configured system NTP service at each node of a Kudu |
| cluster. The list of NTP servers to synchronize against is specified with the |
| `--builtin_ntp_servers` flag. By default, Kudu masters and tablet servers use |
| public servers hosted by the NTP Pool project. To use the built-in NTP |
| client, set `--time_source=builtin` and reconfigure `--builtin_ntp_servers` |
| if necessary |
| (see link:https://issues.apache.org/jira/browse/KUDU-2935[KUDU-2935]). |
| |
| * Aggregated table statistics are now available to Kudu clients via |
| `KuduClient.getTableStatistics()` and `KuduTable.getTableStatistics()` |
| methods in the Kudu Java client and `KuduClient.GetTableStatistics()` |
| in the Kudu {cpp} client. This allows for various query optimizations. |
| For example, Spark now uses it to perform join optimizations. |
| The statistics are available via the API of both {cpp} and Java Kudu clients. |
| In addition, per-table statistics are available via `kudu table statistics` |
| CLI tool. The statistics are also available via master's Web UI at |
| `master:8051/metrics` and `master:8051/table?id=<uuid>` URIs |
| (see link:https://issues.apache.org/jira/browse/KUDU-2797[KUDU-2797] and |
| link:https://issues.apache.org/jira/browse/KUDU-2921[KUDU-2921]). |
| |
| * The `kudu` CLI tool now supports altering table columns. Use the newly |
| introduced sub-commands such as `kudu table column_set_default`, |
| `kudu table column_remove_default`, `kudu table column_set_compression`, |
| `kudu table column_set_encoding`, and `kudu table column_set_block_size` |
| to alter a column of the specified table. |
| |
| * The `kudu` CLI tool now supports dropping table columns. Use the newly |
| introduced `kudu table delete_column` sub-command to drop a column of the |
| specified table. |
| |
| * The `kudu` CLI tool now supports getting and setting extra |
| configuration properties for a table. Use `kudu table get_extra_configs` |
| and `kudu table set_extra_config` sub-commands to perform the corresponding |
| operations |
| (see link:https://issues.apache.org/jira/browse/KUDU-2514[KUDU-2514]). |
| |
| * The `kudu` CLI tool now supports creating and dropping range partitions |
| for a table. Use `kudu table add_range_partition` and |
| `kudu table drop_range_partition` sub-commands to perform the corresponding |
| operations |
| (see link:https://issues.apache.org/jira/browse/KUDU-2881[KUDU-2881]). |
| |
| [[rn_1.11.0_improvements]] |
| == Optimizations and improvements |
| |
| * The `kudu fs dump uuid` CLI tool is now significantly faster and consumes |
| significantly less IO. |
| |
| * The memory consumed by CFileReaders and BloomFileReaders is factored out and |
| accounted separately by the tablet server memory tracking. The stats are |
| available via Web UI as "CFileReaders" and "BloomFileReaders" entries. |
| |
| * `KuduScanBatch::const_iterator` in Kudu {cpp} client now supports |
| `operator->()` |
| (see link:https://issues.apache.org/jira/browse/KUDU-1561[KUDU-1561]). |
| |
| * Master server Web UI now supports sorting the list of tables by the columns |
| of "Table Name", "Create Time", and "Last Alter Time". |
| |
| * Tablet servers now expand a tablet's data directory group with available |
| healthy directories when all directories of the group are full |
| (see link:https://issues.apache.org/jira/browse/KUDU-2907[KUDU-2907]). |
| |
| * For scan operations run with `CLOSEST_REPLICA` selection mode, the Kudu Java |
| client now picks a random available replica in case no replica is located at |
| the same node with the client that initiated the scan operation. This helps |
| to spread the load generated by multiple scan requests to the same tablet |
| among all available replicas. In prior releases, all such scan requests might |
| end up fetching data from the same tablet replica |
| (see link:https://issues.apache.org/jira/browse/KUDU-2348[KUDU-2348]). |
| |
| * The serialization of in-memory rows to Kudu's wire format has been optimized |
| to be more CPU efficient |
| (see link:https://issues.apache.org/jira/browse/KUDU-2847[KUDU-2847]). |
| |
| * Tablet servers and masters can now aggregate metrics by the same attribute. |
| For example, it's now possible to fetch aggregated metrics from a tablet |
| server by retrieving data from URLs of form |
| `http://<host>:<port>/metrics?merge_rules=tablet|table|table_name` |
| |
| * Introduced Docker image for Python Kudu client |
| (see link:https://issues.apache.org/jira/browse/KUDU-2849[KUDU-2849]). |
| |
| * Tablet servers now consider available disk space when choosing a set of data |
| directories for a tablet's data directory group, and when deciding in which |
| data directory a new block should be written |
| (see link:https://issues.apache.org/jira/browse/KUDU-2901[KUDU-2901]). |
| |
| * Added a quick-start example of using Apache Spark to load, query, and modify |
| a real data set stored in Kudu. |
| |
| * Added a quick-start example of using Apache Nifi to ingest data into Kudu. |
| |
| * Tablet servers now reject individual write operations which violate schema |
| constraints in a batch of write operations received from a client. The |
| previous behavior was to reject the whole batch of write operations |
| if a violation of the schema constraints is detected even for a single row |
| (see link:https://issues.apache.org/jira/browse/KUDU-2625[KUDU-2625]). |
| |
| * Tablet replicas can now be optionally placed in accordance with a |
| dimension-based placement policy. To specify a dimension label for a table, |
| use the `KuduTableCreator::dimension_label()` and |
| `CreateTableOptions.setDimensionLabel()` methods of the {cpp} and Java Kudu |
| clients. To add a partition with a dimension label, use the |
| `KuduTableAlterer::AddRangePartitionWithDimension()` and |
| `AlterTableOptions.addRangePartition()` methods of the {cpp} and Java Kudu |
| clients |
| (see link:https://issues.apache.org/jira/browse/KUDU-2823[KUDU-2823]). |
| |
| * Kudu RPC now enables TCP keepalive for all outbound connections for faster |
| detection of no-longer-reachable nodes |
| (see link:https://issues.apache.org/jira/browse/KUDU-2192[KUDU-2192]). |
| |
| * The `kudu table scan` and `kudu table copy` CLI tools now fail gracefully |
| rather than crashing upon hitting an error |
| (see link:https://issues.apache.org/jira/browse/KUDU-2851[KUDU-2851]). |
| |
| * Optimized decoding of deltas' timestamps |
| (see link:https://issues.apache.org/jira/browse/KUDU-2867[KUDU-2867]). |
| |
| * Optimized the initialization of DeltaMemStore for the case when no matching |
| deltas are present |
| (see link:https://issues.apache.org/jira/browse/KUDU-2381[KUDU-2381]). |
| |
| * Improved the rehydration of scan tokens. Now a scan token created |
| before renaming a column can be used even after the column has been renamed. |
| |
| * The memory reserved by tcmalloc is now released to OS periodically to avoid |
| potential OOM issues in the case of read-only workloads |
| (see link:https://issues.apache.org/jira/browse/KUDU-2836[KUDU-2836]). |
| |
| * Optimized evaluation of predicates on columns of primitive types and |
| `NULL`/`NOT NULL` predicates to leverage SIMD instructions |
| (see link:https://issues.apache.org/jira/browse/KUDU-2846[KUDU-2846]). |
| |
| [[rn_1.11.0_fixed_issues]] |
| == Fixed Issues |
| |
| * Fixed an issue of fault-tolerant scan operation failing for a projection |
| with key columns specified in other than the table schema's order |
| (see link:https://issues.apache.org/jira/browse/KUDU-2980[KUDU-2980]). |
| |
| * Fixed an issue that would cause frequent leader elections in case when |
| persisting Raft transactions to the WAL took longer than the leader |
| election timeout. The issue was contributing to election storms |
| (see link:https://issues.apache.org/jira/browse/KUDU-2947[KUDU-2947]). |
| |
| * Fixed a tablet server crash in cases where blocks were not removed due to IO |
| error. This issue may have surfaced after recovering from a disk failure |
| (see link:https://issues.apache.org/jira/browse/KUDU-2635[KUDU-2635]). |
| |
| * Fixed a crash in master and tablet server by validating the size of default |
| values when de-serializing `ColumnSchemaPB` |
| (see link:https://issues.apache.org/jira/browse/KUDU-2622[KUDU-2622]). |
| |
| * Fixed RPC negotiation failure in the case when TLS v1.3 is supported at |
| both the client and the server side. This is a temporary workaround before |
| the connection negotiation code is properly updated to support 1.5-RTT |
| handshake used in TLS v1.3. The issue affected Linux distributions shipped |
| or updated with OpenSSL version 1.0.2 and newer |
| (see link:https://issues.apache.org/jira/browse/KUDU-2871[KUDU-2871]). |
| |
| * Fixed a race between `GetTabletLocations()` and tablet report processing. |
| The race could crash the Kudu master |
| (see link:https://issues.apache.org/jira/browse/KUDU-2842[KUDU-2842]). |
| |
| * Fixed a bug in `AlterSchemaTransactionState::ToString()` that led to a crash |
| of tablet server when removing a tablet replica with a pending `AlterSchema` |
| transaction. |
| |
| [[rn_1.11.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.11.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.11 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| * Rolling upgrade between Kudu 1.10 and Kudu 1.11 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.11 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations |
| on wire compatibility between Kudu 1.11 and versions earlier than 1.3: |
| |
| * If a Kudu 1.11 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| * If a Kudu 1.11 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.11.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.11 Java client library is API- and ABI-compatible with Kudu 1.10. Applications |
| written against Kudu 1.10 will compile and run against the Kudu 1.11 client library and |
| vice-versa. |
| |
| * The Kudu 1.11 {cpp} client is API- and ABI-forward-compatible with Kudu 1.10. |
| Applications written and compiled against the Kudu 1.10 client library will run without |
| modification against the Kudu 1.11 client library. Applications written and compiled |
| against the Kudu 1.11 client library will run without modification against the Kudu 1.10 |
| client library. |
| |
| * The Kudu 1.11 Python client is API-compatible with Kudu 1.10. Applications |
| written against Kudu 1.10 will continue to run against the Kudu 1.11 client |
| and vice-versa. |
| |
| [[rn_1.11.0_known_issues]] |
| == Known Issues and Limitations |
| |
| Please refer to the link:known_issues.html[Known Issues and Limitations] section of the |
| documentation. |
| |
| [[rn_1.11.0_contributors]] |
| == Contributors |
| Kudu 1.11 includes contributions from 24 people, including 8 first-time |
| contributors: |
| |
| * Hannah Nguyen |
| * lingbin |
| * Ritwik Yadav |
| * Scott Reynolds |
| * Volodymyr Verovkin |
| * Xiaokai Wang |
| * Xin He |
| * Yao Wang |
| |
| Thank you for your help in making Kudu even better! |
| |
| [[rn_1.10.1]] |
| Apache Kudu 1.10.1 is a bug-fix release which fixes one critical licensing |
| issue in Kudu 1.10.0. |
| |
| [[rn_1.10.1_upgrade_notes]] |
| == Upgrade Notes |
| When upgrading from earlier versions of Kudu, if support for Kudu's NVM |
| (non-volatile memory) block cache is desired, install the `memkind` library |
| of version 1.6.0 or newer as documented in link:installation.html[Kudu |
| Installation] for corresponding platform. This is a mandatory step for existing |
| users of the NVM block cache (i.e. those who set `--block_cache_type=NVM` |
| for `kudu-master` and `kudu-tserver`): they must install `memkind`, otherwise |
| their Kudu processes will crash at startup. |
| |
| [[rn_1.10.1_fixed_issues]] |
| == Fixed Issues |
| * Fixed an issue with distributing `libnuma` dynamic library with `kudu-binary` |
| JAR artifact. Also, fixed the issue of statically compiling in `libnuma.a` |
| into `kudu-master` and `kudu-tserver` binaries when building Kudu |
| from source in release mode. The fix removes both `numactl` and `memkind` |
| projects from Kudu's thirdparty dependencies and makes the dependency on the |
| `libmemkind` library optional, opening the library using `dlopen()` and |
| resolving required symbols via `dlsym()` |
| (see link:https://issues.apache.org/jira/browse/KUDU-2990[KUDU-2990]). |
| |
| [[rn_1.10.0]] |
| == Release Notes Specific to 1.10.0 |
| |
| [[rn_1.10.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| * The default tablet history retention time has been raised from 15 minutes to |
| 7 days to better support touchless incremental backups |
| (see link:https://issues.apache.org/jira/browse/KUDU-2677[KUDU-2677]). |
| |
| [[rn_1.10.0_obsoletions]] |
| == Obsoletions |
| |
| |
| [[rn_1.10.0_deprecations]] |
| == Deprecations |
| |
| |
| [[rn_1.10.0_new_features]] |
| == New features |
| |
| * Kudu now supports both full and incremental table backups via a job |
| implemented using Apache Spark. Additionally it supports restoring |
| tables from full and incremental backups via a restore job implemented using |
| Apache Spark. See the link:administration.html#backup[backup documentation] |
| for more details. |
| |
| * Kudu can now synchronize its internal catalog with the Apache Hive Metastore, |
| automatically updating Hive Metastore table entries upon table creation, |
| deletion, and alterations in Kudu. See the |
| link:hive_metastore.html#metadata_sync[HMS synchronization documentation] |
| for more details. |
| |
| * Kudu now supports native fine-grained authorization via integration with |
| Apache Sentry. Kudu may now enforce access control policies defined for Kudu |
| tables and columns, as well as policies defined on Hive servers and databases |
| that may store Kudu tables. See the |
| link:security.html#fine_grained_authz[authorization documentation] for more |
| details. |
| |
| * Kudu’s web UI now supports SPNEGO, a protocol for securing HTTP requests with |
| Kerberos by passing negotiation through HTTP headers. To enable, set the |
| `--webserver_require_spnego` command line flag. |
| |
| * Column comments can now be stored in Kudu tables, and can be updated using |
| the AlterTable API |
| (see link:https://issues.apache.org/jira/browse/KUDU-1711[KUDU-1711]). |
| |
| * The Java scan token builder can now create multiple tokens per tablet. |
| To use this functionality, call `setSplitSizeBytes()` to specify how many bytes |
| of data each token should scan. The same API is also available in Kudu’s |
| Spark integration, where it can be used to spawn multiple Spark tasks per |
| scanned tablet |
| (see link:https://issues.apache.org/jira/browse/KUDU-2670[KUDU-2670]). |
| |
| * Experimental Kudu Docker images are now published on |
| link:https://hub.docker.com/r/apache/kudu[Docker Hub]. |
| |
| * Kudu now has an experimental Kubernetes StatefulSet manifest and Helm chart, |
| which can be used to define and provision Kudu clusters using Kubernetes |
| (see link:https://issues.apache.org/jira/browse/KUDU-2398[KUDU-2398]). |
| |
| * The Kudu CLI now has rudimentary YAML-based configuration file support, |
| which can be used to provide cluster connection information via cluster name |
| instead of keying in comma-separated lists of master addresses. |
| See the link:https://kudu.apache.org/docs/administration.html#using_cluster_names_in_kudu_tool[cluster name documentation] |
| for more details. |
| |
| * `kudu perf table_scan` scans a table and displays a table’s row count as well |
| as the time it took to run the scan. |
| |
| * `kudu table copy` copies data from one table to another, within the same |
| cluster or across clusters. Note, this implementation leverages a single client, |
| therefore it may not be suitable for large tables. |
| |
| * Tablet history retention time can now be configured on a table-by-table basis. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2514[KUDU-2514]). |
| |
| [[rn_1.10.0_improvements]] |
| == Optimizations and improvements |
| |
| * The performance of mutations (i.e. UPDATE, DELETE, and re-INSERT) to |
| not-yet-flushed Kudu data has been significantly optimized |
| (see link:https://issues.apache.org/jira/browse/KUDU-2826[KUDU-2826] and |
| link:https://github.com/apache/kudu/commit/f9f9526d3[f9f9526d3]). |
| |
| * Predicate performance for primitive columns has been optimized |
| (see link:https://issues.apache.org/jira/browse/KUDU-2846[KUDU-2846]). |
| |
| * IS NULL and IS NOT NULL predicate performance has been optimized |
| (see link:https://issues.apache.org/jira/browse/KUDU-2846[KUDU-2846]). |
| |
| * Optimized the performance of fetching tablet locations from the master for |
| tables with large numbers of partitions. This can improve the performance of |
| short-running Spark or Impala queries as well as user applications which make |
| use of short-lived client instances |
| (see link:https://issues.apache.org/jira/browse/KUDU-2711[KUDU-2711]). |
| |
| * The `tableExists()` (Java) and `TableExists()` (C++) APIs are now more performant |
| (see link:https://issues.apache.org/jira/browse/KUDU-2802[KUDU-2802]). |
| |
| * Fault tolerant scans are now much more performant and consume far less memory |
| (see link:https://issues.apache.org/jira/browse/KUDU-2466[KUDU-2466]). |
| |
| * `kudu cluster ksck` now sends more requests in parallel, which should result |
| in a speed-up when running against clusters with many tables or when there’s |
| high latency between the node running the CLI and the cluster nodes. |
| |
| * Kudu’s block manager now deletes spent block containers when needed instead of |
| just at server startup. This should reduce server startup times somewhat |
| (see link:https://issues.apache.org/jira/browse/KUDU-2636[KUDU-2636]). |
| |
| * DNS resolutions are now cached by Kudu masters, tablet servers, and |
| Kudu C++ clients. The TTL for a resolved DNS entry in the cache is 15 seconds |
| by default |
| (see link:https://issues.apache.org/jira/browse/KUDU-2791[KUDU-2791]). |
| |
| * Tables created in Kudu 1.10.0 or later will show their creation time as well |
| as their last alteration time in the web UI |
| (see link:https://issues.apache.org/jira/browse/KUDU-2750[KUDU-2750]). |
| |
| * The Kudu CLI and C++ client now support overriding the local username using |
| the ‘KUDU_USER_NAME’ environment variable. This allows operating against a |
| Kudu cluster using an identity which differs from the local Unix user on the |
| client. Note that this has no effect on secure clusters, where client identity |
| is determined by Kerberos authentication |
| (see link:https://issues.apache.org/jira/browse/KUDU-2717[KUDU-2717]). |
| |
| * Kudu C++ client now performs stricter verification on the input data of |
| INSERT and UPSERT operations w.r.t. table schema constraints. This helps |
| spotting schema violations before sending the data to a tablet server. |
| |
| * The `KuduScanner` in the Java client is now iterable. Additionally the |
| `KuduScannerIterator` will automatically make scanner keep alive calls to |
| ensure scanners do not time out while iterating. |
| |
| * A `KuduPartitioner` API was added to the Java client. The `KuduPartitioner` |
| API allows a client to determine which partition a row falls into without |
| actually writing that row. For example, the `KuduPartitioner` is used in the |
| Spark integration to optionally repartition and pre-sort the data before |
| writing to Kudu |
| (see link:https://issues.apache.org/jira/browse/KUDU-2674[KUDU-2674] and |
| link:https://issues.apache.org/jira/browse/KUDU-2672[KUDU-2672]). |
| |
| * The `PartialRow` and `RowResult` Java API have new methods that accept and return |
| Java Objects. These methods are useful when you don't care about autoboxing |
| and your existing type handling logic is based on Java types. See the javadoc |
| for more details. |
| |
| * The Kudu Java client now logs RPC trace summaries instead of full RPC traces when |
| the log level is `INFO` or higher. This reduces log noise and makes RPC issues |
| more visible in a more compact format |
| (see link:https://issues.apache.org/jira/browse/KUDU-2830[KUDU-2830]). |
| |
| * Kudu servers now display the time at which they were started in their web UIs. |
| |
| * Kudu tablet servers now display a table’s total column count in the web UI. |
| |
| * The `/metrics` web UI endpoint now supports filtering on entity types, |
| entity IDs, entity attributes, and metric names. This can be used to more |
| efficiently collect important metrics when there is a large number of tablets |
| on a tablet server. |
| |
| * The Kudu rebalancer now accepts the `--ignored_tservers` command line |
| argument, which can be used to ignore the health status of specific tablet |
| servers (i.e. if they are down) when deciding whether or not it’s safe to |
| rebalance the cluster. |
| |
| * `kudu master list` now displays the Raft consensus role of each master in the |
| cluster (i.e. LEADER or FOLLOWER) |
| (see link:https://issues.apache.org/jira/browse/KUDU-2825[KUDU-2825]). |
| |
| * `kudu table scan` no longer interleaves its output, and now projects all |
| columns without having to manually list the column names. |
| |
| * `kudu perf loadgen` now supports creating empty tables. The semantics of the |
| special value of 0 for `--num_rows_per_thread` flag has changed. A value of 0 |
| now indicates that no rows should be generated, and a value of -1 indicates |
| there should be no limit to the number of rows generated. |
| |
| * Running `make install` after building Kudu from source will now install the |
| Kudu binaries into appropriate locations. |
| (see link:https://issues.apache.org/jira/browse/KUDU-1344[KUDU-1344]). |
| |
| [[rn_1.10.0_fixed_issues]] |
| == Fixed Issues |
| |
| * Fixed an issue where the Java client would fail scans that took a very long |
| time to return a single block of rows, such as highly selective scans over a |
| large amount of data |
| (see link:https://issues.apache.org/jira/browse/KUDU-1868[KUDU-1868]). |
| |
| * Fixed the handling of SERVICE_UNAVAILABLE errors that caused the Java client |
| to do unnecessary master lookups. |
| |
| * Kudu scan tokens now work correctly when the target table is renamed between |
| when the scan token is created and when it is rehydrated into a scanner. |
| |
| * Kudu’s “NTP synchronization wait” behavior at startup now works properly when |
| Kudu is run in a containerized environment. |
| |
| * Fixed a crash when a flush or compaction overlapped with another compaction |
| (see link:https://issues.apache.org/jira/browse/KUDU-2807[KUDU-2807]). |
| |
| * Fixed a rare race at startup where the leader master would fruitlessly try to |
| tablet copy to a healthy follower master, causing the cluster to operate as if |
| it had two masters until master leadership changed |
| (see link:https://issues.apache.org/jira/browse/KUDU-2748[KUDU-2748]). |
| |
| * Under rare circumstances, it was possible for Kudu to crash in libkrb5 when |
| negotiating multiple TLS connections concurrently. This crash has been fixed |
| (see link:https://issues.apache.org/jira/browse/KUDU-2706[KUDU-2706]). |
| |
| * Kudu no longer crashes at startup on machines with disabled CPUs |
| (see link:https://issues.apache.org/jira/browse/KUDU-2721[KUDU-2721]). |
| |
| [[rn_1.10.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.10.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.10 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| * Rolling upgrade between Kudu 1.9 and Kudu 1.10 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.10 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations |
| on wire compatibility between Kudu 1.10 and versions earlier than 1.3: |
| |
| * If a Kudu 1.10 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| * If a Kudu 1.10 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.10.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.10.0 |
| |
| * Support for building and running with Java 7 has been dropped in this release. |
| It had been deprecated since Kudu 1.5.0. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2099[KUDU-2099]). |
| |
| [[rn_1.10.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.10 Java client library is API- and ABI-compatible with Kudu 1.9. Applications |
| written against Kudu 1.9 will compile and run against the Kudu 1.10 client library and |
| vice-versa. |
| |
| * The Kudu 1.10 {cpp} client is API- and ABI-forward-compatible with Kudu 1.9. |
| Applications written and compiled against the Kudu 1.9 client library will run without |
| modification against the Kudu 1.10 client library. Applications written and compiled |
| against the Kudu 1.10 client library will run without modification against the Kudu 1.9 |
| client library. |
| |
| * The Kudu 1.10 Python client is API-compatible with Kudu 1.9. Applications |
| written against Kudu 1.9 will continue to run against the Kudu 1.10 client |
| and vice-versa. |
| |
| [[rn_1.10.0_known_issues]] |
| == Known Issues and Limitations |
| |
| Please refer to the link:known_issues.html[Known Issues and Limitations] section of the |
| documentation. |
| |
| [[rn_1.10.0_contributors]] |
| == Contributors |
| |
| Kudu 1.10 includes contributions from 27 people, including 6 first-time contributors: |
| |
| * Csaba Fulop |
| * Florentino Sainz |
| * Guangchao Deng |
| * Jia Hongchao |
| * Ye Yuqiang |
| * Yifan Zhang |
| |
| Thank you for your help in making Kudu even better! |
| |
| [[rn_1.9.0]] |
| == Release Notes Specific to 1.9.0 |
| |
| [[rn_1.9.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| * Flume 1.8+ requires Java 8 at runtime even though the Kudu Flume integration |
| is Java 7 compatible. Flume 1.9 is the default dependency version as of |
| Kudu 1.9.0. |
| |
| * Hadoop 3.0+ requires Java 8 at runtime even though the Kudu Hadoop integration |
| is Java 7 compatible. Hadoop 3.2 is the default dependency version as of |
| Kudu 1.9.0. |
| |
| [[rn_1.9.0_obsoletions]] |
| == Obsoletions |
| |
| |
| [[rn_1.9.0_deprecations]] |
| == Deprecations |
| |
| * Support for Java 7 has been deprecated since Kudu 1.5.0 and may be removed in |
| the next major release. |
| |
| [[rn_1.9.0_new_features]] |
| == New features |
| * Kudu now supports location awareness. When configured, Kudu will make a best |
| effort to avoid placing a majority of replicas for a given tablet at the same |
| location. The `kudu cluster rebalance` tool has been updated to act in |
| accordance with the placement policy of a location-aware Kudu. The |
| link:https://kudu.apache.org/releases/1.9.0/docs/administration.html#rack_awareness[administrative |
| documentation] has been updated to detail the usage of this feature. |
| |
| * Docker scripts have been introduced to build and run Kudu on various operating |
| systems. See the `/docker` subdirectory of the source repository for more |
| details. An link:https://hub.docker.com/r/apache/kudu[official repository] has |
| been created for Apache Kudu Docker artifacts. |
| |
| * Developers integrating with Kudu can now write Java tests that start a Kudu |
| mini cluster without having to first locally build and install Kudu. This is |
| made possible by the Kudu team providing platform-specific binaries available |
| to Gradle or Maven for download and install at test time. More information on |
| this feature can be found <<developing.adoc#,here>>. This binary test |
| artifact is currently considered to be experimental. |
| |
| [[rn_1.9.0_improvements]] |
| == Optimizations and improvements |
| * When creating a table, the master now enforces a restriction on the total |
| number of replicas rather than the total number of partitions. If manually |
| overriding `--max_create_tablets_per_ts`, the maximum size of a new table |
| has effectively been cut by a factor of its replication factor. Note that |
| partitions can still be added after table creation. |
| |
| * The compaction policy has been updated to favor reducing the number of |
| rowsets. This can lead to faster scans and lower bootup times, particularly |
| in the face of a “trickling inserts” workload, where rows are inserted slowly |
| in primary key order (see |
| link:https://issues.apache.org/jira/browse/KUDU-1400[KUDU-1400]). |
| |
| * A tablet-level metric `average_diskrowset_height` has been added to indicate |
| how much a replica needs to be compacted, as indicated by the average number |
| of rowsets per unit of keyspace. |
| |
| * Scans which read multiple columns of tables undergoing a heavy `UPDATE` |
| workload are now more CPU efficient. In some cases, scan performance of such |
| tables may be several times faster upon upgrading to this release. |
| |
| * Kudu-Spark users can now provide the short “kudu” format alias to Spark. This |
| enables using `.format(“kudu”)` in places where you would have needed to |
| provide the fully qualified name like `.format(“org.apache.kudu.spark.kudu")` |
| or imported `org.apache.kudu.spark.kudu._` and used the implicit `.kudu` |
| functions. The |
| link:https://kudu.apache.org/releases/1.9.0/docs/developing.html#_kudu_integration_with_spark[Spark |
| integration documentation] has been updated to reflect this improvement. |
| |
| * The `KuduSink` class has been added to the Spark integration as a |
| `StreamSinkProvider`, allowing structured streaming writes into Kudu (see |
| link:https://issues.apache.org/jira/browse/KUDU-2640[KUDU-2640]). |
| |
| * The amount of server-side logging has been greatly reduced for Kudu's |
| consensus implementation and background processes. This logging was determined |
| to be not useful and unnecessarily verbose. |
| |
| * The web UI now more obviously depicts which columns are a part of the primary |
| key (see link:https://issues.apache.org/jira/browse/KUDU-2477[KUDU-2477]). |
| |
| * The `kudu table describe` tool has been added to support describing table |
| attributes, including schema, partitioning, replication factor, column |
| encodings, compressions, and default values. |
| |
| * The `kudu table scan` tool has been added to scan rows from a table, |
| supporting comparison, in-list, and is-null predicates. |
| |
| * The `kudu locate_row` tool has been added to allow users to determine what |
| tablet a given primary key belongs to, and whether a row exists for that |
| primary key. |
| |
| * The `kudu diagnose dump_mem_trackers` tool is added to allow users to output |
| the contents of the `/mem-trackers` web UI page in a CSV format. |
| |
| [[rn_1.9.0_fixed_issues]] |
| == Fixed Issues |
| * To avoid glitches and undefined behavior, the Kudu Python client now |
| detects and reports on conflicting/incorrect initialization of the OpenSSL |
| library. |
| |
| * Fixed a crash caused by a race between altering tablet schemas and deleting |
| tablet replicas (see |
| link:https://issues.apache.org/jira/browse/KUDU-1678[KUDU-1678]). |
| |
| * Fixed an issue that would prevent the `kudu fs update_dirs` tool from |
| removing directories in the presence of tablet tombstones (see |
| link:https://issues.apache.org/jira/browse/KUDU-2680[KUDU-2680]). |
| |
| * The `--cmeta_force_fsync` flag may be used to fsync Kudu's consensus |
| metadata more aggressively. Setting this to `true` may decrease Kudu's |
| performance, but improve its durability in the face of power failures and |
| forced shutdowns (see |
| link:https://issues.apache.org/jira/browse/KUDU-2195[KUDU-2195]). |
| |
| * Fixed an issue that would cause an excessive amount of RPC traffic from Kudu |
| masters if the tablet servers were configured with duplicated master addresses |
| (see link:https://issues.apache.org/jira/browse/KUDU-2684[KUDU-2684]). |
| |
| * Fixed an issue that would cause the `kudu cluster rebalance` tool to run |
| indefinitely in the case of tables with a replication factor of 2 (see |
| link:https://issues.apache.org/jira/browse/KUDU-2688[KUDU-2688]). |
| |
| * Fixed an issue that could lead to a failure to bootstrap tablet replicas |
| that were a part of workloads with many alter table operations |
| (see link:https://issues.apache.org/jira/browse/KUDU-2690[KUDU-2690]). |
| |
| * Fixed an issue with the Java scanner's `keepAlive` that could lead to a |
| permanent hang in the scanner (see |
| link:https://issues.apache.org/jira/browse/KUDU-2710[KUDU-2710]). |
| |
| * Fixed an issue that would cause undefined behavior upon connecting to a |
| secure cluster concurrently from multiple C++ clients (see |
| link:https://issues.apache.org/jira/browse/KUDU-2706[KUDU-2706]). |
| |
| [[rn_1.9.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.9.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.9 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| * Rolling upgrade between Kudu 1.8 and Kudu 1.9 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.9 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations |
| on wire compatibility between Kudu 1.9 and versions earlier than 1.3: |
| |
| * If a Kudu 1.9 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| * If a Kudu 1.9 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.9.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.9.0 |
| |
| |
| [[rn_1.9.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.9 Java client library is API- and ABI-compatible with Kudu 1.8. Applications |
| written against Kudu 1.8 will compile and run against the Kudu 1.9 client library and |
| vice-versa. |
| |
| * The Kudu 1.9 {cpp} client is API- and ABI-forward-compatible with Kudu 1.8. |
| Applications written and compiled against the Kudu 1.8 client library will run without |
| modification against the Kudu 1.9 client library. Applications written and compiled |
| against the Kudu 1.9 client library will run without modification against the Kudu 1.8 |
| client library. |
| |
| * The Kudu 1.9 Python client is API-compatible with Kudu 1.8. Applications |
| written against Kudu 1.8 will continue to run against the Kudu 1.9 client |
| and vice-versa. |
| |
| [[rn_1.9.0_known_issues]] |
| == Known Issues and Limitations |
| |
| Please refer to the link:known_issues.html[Known Issues and Limitations] section of the |
| documentation. |
| |
| [[rn_1.9.0_contributors]] |
| == Contributors |
| Kudu 1.9 includes contributions from 24 people, including 5 first-time contributors: |
| |
| * Bankim Bhavsar |
| * Mike Parker |
| * Mitch Barnett |
| * Tim Armstrong |
| * Yingchun Lai |
| |
| Thank you for your help in making Kudu even better! |
| |
| [[rn_1.8.0]] |
| == Release Notes Specific to 1.8.0 |
| |
| [[rn_1.8.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| - Upgrading directly from Kudu 1.7.0 is supported and no special upgrade steps are |
| required. A rolling upgrade may work, however it has not been tested. When upgrading |
| Kudu, it is recommended to first shut down all Kudu processes across the cluster, then |
| upgrade the software on all servers, then restart the Kudu processes on all servers in |
| the cluster. |
| |
| - Kudu Flume Sink released with Kudu 1.8.0 is compiled against Apache Flume 1.8 and might |
| not function with earlier versions of Flume. Note that Flume 1.8 requires Java 1.8 or |
| higher. |
| |
| - Hadoop 3.0+ requires Java 8 at runtime even though the Kudu Hadoop integration is Java 7 |
| compatible. Hadoop 3.1 is the default dependency version as of Kudu 1.8.0, used by |
| certain features in the Java client. |
| |
| [[rn_1.8.0_obsoletions]] |
| == Obsoletions |
| |
| - The `-table_num_buckets` configuration option of the `kudu perf loadgen` tool is now |
| removed in favor of `-table_num_hash_partitions` and `-table_num_range_partitions` |
| (see link:https://issues.apache.org/jira/browse/KUDU-1861[KUDU-1861]). |
| |
| [[rn_1.8.0_deprecations]] |
| == Deprecations |
| |
| - Support for Java 7 has been deprecated since Kudu 1.5.0 and may be removed in the next |
| major release. |
| |
| - The `producer.skipMissingColumn`, `producer.skipBadColumnValue`, and |
| `producer.warnUnmatchedRows` Kudu Flume sink configuration parameters have been |
| deprecated in favor of `producer.missingColumnPolicy`, `producer.badColumnValuePolicy`, |
| and `producer.unmatchedRowPolicy` respectively (see |
| link:https://issues.apache.org/jira/browse/KUDU-1882[KUDU-1882]). |
| |
| [[rn_1.8.0_new_features]] |
| == New features |
| |
| - Examples showcasing functionality in {cpp}, Java, and Python, previously |
| hosted in a separate repository have been added. They can be found in the |
| `link:https://github.com/apache/kudu/tree/master/examples[examples/]` |
| top-level subdirectory. |
| |
| - Added `kudu diagnose parse_stacks`, a tool to parse sampled stack traces out of a |
| diagnostics log (see link:https://issues.apache.org/jira/browse/KUDU-2353[KUDU-2353]). |
| |
| - Added support for `IS NULL` and `IS NOT NULL` predicates to the Kudu Python client (see |
| link:https://issues.apache.org/jira/browse/KUDU-2399[KUDU-2399]). |
| |
| - Introduced <<administration.adoc#rebalancer_tool,manual data rebalancer>> into the kudu |
| CLI tool. The rebalancer can be used to redistribute table replicas among tablet |
| servers. The rebalancer can be run via `kudu cluster rebalance` sub-command. Using the |
| new tool, it's possible to rebalance Kudu clusters of version 1.4.0 and newer. |
| |
| - Added `kudu tserver get_flags` and `kudu master get_flags`, two tools that allow |
| superusers to retrieve all the values of command line flags from remote Kudu processes. |
| The `get_flags` tools support filtering the returned flags by tag, and by default will |
| return only flags that were explicitly set. |
| |
| - Added `kudu tablet unsafe_replace_tablet`, a tool to replace a tablet with a new one. |
| This tool is meant to be used to recover a table when one of its tablets has permanently |
| lost all replicas. The data in the tablet that is replaced is lost, so this tool should |
| only be used as a last resort (see |
| link:https://issues.apache.org/jira/browse/KUDU-2290[KUDU-2290]). |
| |
| [[rn_1.8.0_improvements]] |
| == Optimizations and improvements |
| |
| - There is a new metric for each tablet replica tracking the number of election failures |
| since the last successful election attempt and the time since the last heartbeat from |
| the leader (see link:https://issues.apache.org/jira/browse/KUDU-2287[KUDU-2287]). |
| |
| - Kudu now supports building and running on Ubuntu 18.04 (“Bionic Beaver”) (see |
| link:https://issues.apache.org/jira/browse/KUDU-2427[KUDU-2427]). |
| |
| - Kudu now supports building and running against OpenSSL 1.1 (see |
| link:https://issues.apache.org/jira/browse/KUDU-1889[KUDU-1889]). |
| |
| - Added Kerberos support to the Kudu Flume sink (see |
| link:https://issues.apache.org/jira/browse/KUDU-2012[KUDU-2012]). |
| |
| - The Kudu Spark connector now supports Spark Streaming DataFrames (see |
| link:https://issues.apache.org/jira/browse/KUDU-2539[KUDU-2539]). |
| |
| - Added `-tables` filtering argument to `kudu table list` (see |
| link:https://issues.apache.org/jira/browse/KUDU-2529[KUDU-2529]). |
| |
| - Clients now support setting a limit on the number of returned rows in scans (see |
| link:https://issues.apache.org/jira/browse/KUDU-16[KUDU-16]). |
| |
| - Added Pandas support to the Python client (see |
| link:https://issues.apache.org/jira/browse/KUDU-1276[KUDU-1276]). |
| |
| - Enabled configuration of mutation buffer in the Python client (see |
| link:https://issues.apache.org/jira/browse/KUDU-2441[KUDU-2441]). |
| |
| - Added a `keepAlive` API call to the `KuduScanner` and `AsyncKuduScanner` in the Java |
| client. This API can be used to keep the scanners alive on the server when processing |
| of messages will take longer than the scanner TTL (see |
| link:https://issues.apache.org/jira/browse/KUDU-2095[KUDU-2095]). |
| |
| - The Kudu Spark integration now uses the keepAlive API when reading data. By default it |
| will call keepAlive on a scanner with a period of 15 seconds. This will ensure that |
| Spark jobs with large batch sizes or slow processing times do not fail with scanner not |
| found errors (see link:https://issues.apache.org/jira/browse/KUDU-2563[KUDU-2563]). |
| |
| - Number of reactor threads in the {cpp} client is now configurable (see |
| link:https://issues.apache.org/jira/browse/KUDU-2368[KUDU-2368]). |
| |
| - Added an optimization to reduce CPU consumption when performing hot metadata lookups in |
| the {cpp} client (see link:https://issues.apache.org/jira/browse/KUDU-1977[KUDU-1977]). |
| |
| - Added an optimization to avoid bottlenecks on `getpwuid_r()` in libnss during a Raft |
| leader election storm (see |
| link:https://issues.apache.org/jira/browse/KUDU-2395[KUDU-2395]). |
| |
| - Improved rowset tree pruning making scans with open-ended intervals on primary key (see |
| link:https://issues.apache.org/jira/browse/KUDU-2566[KUDU-2566]). |
| |
| - The `kudu perf loadgen` tool now supports generating range-partitioned tables. The |
| `-table_num_buckets` configuration is now removed in favor of |
| `-table_num_hash_partitions` and `-table_num_range_partitions` (see |
| link:https://issues.apache.org/jira/browse/KUDU-1861[KUDU-1861]). |
| |
| - CFile checksum failures will now cause the affected tablet replicas to be failed and |
| re-replicated elsewhere (see |
| link:https://issues.apache.org/jira/browse/KUDU-2469[KUDU-2469]). |
| |
| - Servers are now able to start up with data directories missing on disk (see |
| link:https://issues.apache.org/jira/browse/KUDU-2359[KUDU-2359]). |
| |
| - The `kudu perf loadgen` tool now creates tables with a period-separated database name, |
| for example `default.loadgen_auto_abc123`. This new behavior does not take effect if the |
| `--table` flag is provided. The database of the table can be changed using a new |
| `--auto_database` flag. This change is made in anticipation of an eventual Kudu/HMS |
| integration (see link:https://jira.apache.org/jira/browse/KUDU-2191[KUDU-2191]). |
| |
| - Introduced `FAILED_UNRECOVERABLE` replica health status. This is to mark replicas which |
| are not able to catch up with the leader due to GC-collected segments of WAL and other |
| unrecoverable cases like disk failure. With that, the replica management scheme becomes |
| hybrid: the system evicts replicas with `FAILED_UNRECOVERABLE` health status before |
| adding a replacement if it anticipates that it can commit the transaction, while in |
| other cases it first adds a non-voter replica and removes the failed one only after |
| promoting a newly added replica to voter role. |
| |
| - Two additional configuration parameters, `socketReadTimeoutMs` and `scanRequestTimeout` |
| have been added to the Spark connector to allow better tuning to avoid scan timeouts |
| under high load. |
| |
| - The `kudu table` tool now supports two new options to rename tables and columns, |
| `rename_table` and `rename_column` respectively. |
| |
| - Kudu will now wait for the clock to become synchronized at startup, controlled by a new |
| flag `-ntp_initial_sync_wait_secs` (see |
| link:https://issues.apache.org/jira/browse/KUDU-2242[KUDU-2242]). |
| |
| - Tablet deletions are now throttled, which will help Kudu clusters remain stable even |
| when many tablets are deleted at once. The number of tablets that a tablet server will |
| delete at once is controlled by the new flag `-num_tablets_to_delete_simultaneously` |
| (see link:https://issues.apache.org/jira/browse/KUDU-2289[KUDU-2289]). |
| |
| - The `kudu cluster ksck` tool has been significantly enhanced. It now checks master |
| health and consensus status, displays any unsafe or hidden flags set in the cluster, and |
| produces a summary of the Kudu versions running on the master and tablet servers. In |
| addition, it now supports JSON output, both in pretty-printed and compact form. The |
| output format is controlled by the `-ksck_format` flag. |
| |
| [[rn_1.8.0_fixed_issues]] |
| == Fixed Issues |
| |
| - When a tablet server was wiped and recreated with the same RPC address, `ksck` listed it |
| twice, both as healthy, even though only one of them was there. This bug is now fixed by |
| verifying the UUID of the server (see |
| link:https://issues.apache.org/jira/browse/KUDU-2364[KUDU-2364]). |
| |
| - Fixed an issue preventing Kudu from starting when using Vormetric's encrypted filesystem |
| (secfs2) on ext4 (see link:https://issues.apache.org/jira/browse/KUDU-2406[KUDU-2406]). |
| |
| - Fixed an issue where Kudu's block cache memory tracking (as seen on the `/mem-trackers` |
| web UI page) wasn’t accounting for all of the overhead of the cache itself (see |
| link:https://issues.apache.org/jira/browse/KUDU-972[KUDU-972]). |
| |
| - Fixed an issue where the {cpp} client would fail to reopen an expired scanner; instead, |
| the client would retry in a tight loop and eventually timeout (see |
| link:https://issues.apache.org/jira/browse/KUDU-2414[KUDU-2414]). |
| |
| - When a tablet is deleted, its write-ahead log recovery directory is also deleted, if it |
| exists (see link:https://issues.apache.org/jira/browse/KUDU-1038[KUDU-1038]). |
| |
| - Fixed a tablet server crash when a tablet is scanned with two predicates on its primary |
| key and the predicates do not overlap (see |
| link:https://issues.apache.org/jira/browse/KUDU-2447[KUDU-2447]). |
| |
| - Fixed an issue where the Kudu MapReduce connector's `KuduTableInputFormat` may exhaust |
| its scan too early (see |
| link:https://issues.apache.org/jira/browse/KUDU-2525[KUDU-2525]). |
| |
| - Fixed an issue with failed tablet copies that would cause subsequent tablet copies to |
| crash the tablet server (see |
| link:https://issues.apache.org/jira/browse/KUDU-2293[KUDU-2293]). |
| |
| - Fixed a bug in which incorrect results would be returned in scans following a |
| server restart (see |
| link:https://issues.apache.org/jira/browse/KUDU-2463[KUDU-2463]). |
| |
| - Fixed a bug causing a tablet server crash when a write batch request from a client |
| failed coarse-grained authorization (see |
| link:https://issues.apache.org/jira/browse/KUDU-2540[KUDU-2540]). |
| |
| - Fixed use-after-free in case of WAL replay error (see |
| link:https://issues.apache.org/jira/browse/KUDU-2509[KUDU-2509]). |
| |
| - Fixed authentication token reacquisition in the {cpp} client (see |
| link:https://issues.apache.org/jira/browse/KUDU-2580[KUDU-2580]). |
| |
| - Fixed a bug where leader logged excessively when the followers fell behind (see |
| link:https://issues.apache.org/jira/browse/KUDU-2322[KUDU-2322]). |
| |
| - Fixed reporting of leader health during lifecycle transitions (see |
| link:https://issues.apache.org/jira/browse/KUDU-2335[KUDU-2335]). |
| |
| - Fixed moving single-replica tablets (see |
| link:https://issues.apache.org/jira/browse/KUDU-2443[KUDU-2443]). |
| |
| - Fixed an error that would cause the kudu CLI tool to unexpectedly exit when the |
| connection to the master or tserver was abruptly closed. |
| |
| - Fixed a rare issue where system failure could leave unexpected null bytes at the end of |
| metadata files, causing Kudu to be unable to restart (see |
| link:https://issues.apache.org/jira/browse/KUDU-2260[KUDU-2260]). |
| |
| - Fixed an issue where `kudu cluster ksck` running a snapshot checksum scan would use a |
| single snapshot timestamp for all tablets. This caused the checksum process to fail if |
| the checksum process took a long time and the number of tablets was sufficiently large. |
| The tool should now be able to checksum tables even if the process takes many hours. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2179[KUDU-2179]). |
| |
| [[rn_1.8.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.8.0 is wire-compatible with previous versions of Kudu: |
| |
| - Kudu 1.8 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| |
| - Kudu 1.0 clients may connect to servers running Kudu 1.8 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations on wire |
| compatibility between Kudu 1.8 and versions earlier than 1.3: |
| |
| - If a Kudu 1.8 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| |
| - If a Kudu 1.8 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.8.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.8.0 |
| |
| |
| [[rn_1.8.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| - The Kudu 1.8 Java client library is API- and ABI-compatible with Kudu 1.7. Applications |
| written against Kudu 1.7 will compile and run against the Kudu 1.8 client library and |
| vice-versa. |
| |
| - The Kudu 1.8 {cpp} client is API- and ABI-forward-compatible with Kudu 1.7. |
| Applications written and compiled against the Kudu 1.7 client library will run without |
| modification against the Kudu 1.8 client library. Applications written and compiled |
| against the Kudu 1.8 client library will run without modification against the Kudu 1.7 |
| client library. |
| |
| - The Kudu 1.8 Python client is API-compatible with Kudu 1.7. Applications written against |
| Kudu 1.7 will continue to run against the Kudu 1.8 client and vice-versa. |
| |
| [[rn_1.8.0_known_issues]] |
| == Known Issues and Limitations |
| |
| Please refer to the link:known_issues.html[Known Issues and Limitations] section of the |
| documentation. |
| |
| [[rn_1.8.0_contributors]] |
| == Contributors |
| |
| Kudu 1.8 includes contributions from 40 people, including 15 first-time contributors: |
| |
| - Anupama Gupta |
| - Attila Piros |
| - Brian McDevitt |
| - Fengling Wang |
| - Ferenc Szabó |
| - Greg Solovyev |
| - Kiyoshi Mizumaru |
| - Shriya Gupta |
| - Thomas Tauber-Marshall |
| - Tigerquoll |
| - Yao Xu |
| - ZhangYao |
| - helifu |
| - jinxing64 |
| - qqchang2nd |
| |
| Thank you for helping to make Kudu even better! |
| |
| [[rn_1.7.1]] |
| == Release Notes Specific to 1.7.1 |
| |
| [[rn_1.7.1_fixed_issues]] |
| == Fixed Issues |
| |
| Apache Kudu 1.7.1 is a bug-fix release which fixes critical issues in Kudu 1.7.0. |
| |
| * Fixed and issue where a leader replica could report a follower's health status |
| as FAILED instead of FAILED_UNRECOVERABLE. In configurations where the tablet |
| replication factor equals to the total number of tablet servers in the cluster, |
| that lead to situations where the tablet could not be automatically recovered |
| until a new leader was elected or corresponding tablet servers were restarted. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2367[KUDU-2367]). |
| |
| * Fixed an issue where Kudu would fail to start if RLIMIT_NPROC was set to -1. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2377[KUDU-2377]). |
| |
| * Fixed an issue where `kudu-spark` was unable to connect to secure clusters. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2379[KUDU-2379]). |
| |
| * Fixed an issue where the `kudu-python` client would not compile in environments |
| where `__int128` is not supported. This was most commonly el6 environments. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2412[KUDU-2412]). |
| |
| * Fixed an issue where unaligned loads of `__int128` integers could result |
| in a crash. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2378[KUDU-2378]). |
| |
| * Fixed a bug in `PartialRow.setMin` that could lead to incorrect partition |
| pruning when a `decimal` column is part of the tables range partition but |
| not a part of the query predicate. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2416[KUDU-2416]). |
| |
| * Fixed an equality check on `decimal` column predicates that could result |
| in pruning that is too conservative. |
| |
| [[rn_1.7.0]] |
| == Release notes specific to 1.7.0 |
| |
| [[rn_1.7.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| * Upgrading directly from Kudu 1.6.0 is supported and no special upgrade steps |
| are required. A rolling upgrade of the server side will _not_ work because |
| the default replica management scheme changed, and running masters and tablet |
| servers with different replica management schemes is not supported, see |
| <<rn_1.7.0_incompatible_changes>> for details. However, mixing client and |
| server sides of different versions is not a problem. You can still |
| update your clients before your servers or vice versa. |
| When upgrading to Kudu 1.7, it is required to first shut down all Kudu processes |
| across the cluster, then upgrade the software on all servers, then restart |
| the Kudu processes on all servers in the cluster. |
| |
| [[rn_1.7.0_obsoletions]] |
| == Obsoletions |
| |
| * The `tcmalloc_contention_time` metric, which previously tracked the amount |
| of time spent in memory allocator lock contention, has been removed. |
| |
| [[rn_1.7.0_deprecations]] |
| == Deprecations |
| |
| * Support for Java 7 has been deprecated since Kudu 1.5.0 and may be removed in |
| the next major release. |
| |
| [[rn_1.7.0_new_features]] |
| == New features |
| |
| * Kudu now supports the decimal column type. The decimal type is a numeric data type |
| with fixed scale and precision suitable for financial and other arithmetic |
| calculations where the imprecise representation and rounding behavior of float and |
| double make those types impractical. The decimal type is also useful for integers |
| larger than int64 and cases with fractional values in a primary key. |
| See <<schema_design.adoc#decimal,Decimal Type>> for more details. |
| |
| * The strategy Kudu uses for automatically healing tablets which have lost a |
| replica due to server or disk failures has been improved. The new re-replication |
| strategy, or replica management scheme, first adds a replacement tablet replica |
| before evicting the failed one. With the previous replica management scheme, |
| the system first evicts the failed replica and then adds a replacement. The new |
| replica management scheme allows for much faster recovery of tablets in |
| scenarios where one tablet server goes down and then returns back shortly after |
| 5 minutes or so. The new scheme also provides substantially better overall |
| stability on clusters with frequent server failures. |
| (see link:https://issues.apache.org/jira/browse/KUDU-1097[KUDU-1097]). |
| |
| * The `kudu fs update_dirs` tool now supports removing directories. Unless the |
| `--force` flag is specified, Kudu will not allow the removal of a directory |
| across which tablets are configured to spread data. If specified, all tablet |
| replicas configured to use that directory will fail upon starting up and be |
| replicated elsewhere, provided a majority exists elsewhere. |
| |
| * Users can use the new `--fs_metadata_dir` to specify the directory in which |
| to place tablet-specific metadata. It is recommended, although not |
| necessary, that this be placed on a high-performance drive with high |
| bandwidth and low latency, e.g. a solid-state drive. If not specified, |
| metadata will be placed in the directory specified by `--fs_wal_dir`, or in |
| the directory specified by the first entry of `--fs_data_dirs` if metadata |
| already exists there from a pre-Kudu 1.7 deployment. Kudu will not |
| automatically move existing metadata based on this configuration. |
| |
| * Kudu 1.7 introduces a new scan read mode READ_YOUR_WRITES. Users can specify |
| READ_YOUR_WRITES when creating a new scanner in C++, Java and Python clients. |
| If this mode is used, the client will perform a read such that it follows all |
| previously known writes and reads from this client. Reads in this mode ensure |
| read-your-writes and read-your-reads session guarantees, while minimizing |
| latency caused by waiting for outstanding write transactions to complete. |
| Note that this is still an experimental feature which may be stabilized in |
| future releases. |
| |
| * The tablet server web UI scans dashboard (/scans) has been improved with |
| several new features, including: showing the most recently completed scans, |
| a pseudo-SQL scan descriptor that concisely shows the selected columns and |
| applied predicates, and more complete and better documented scan statistics. |
| |
| * Kudu daemons now expose a web page `/stacks` which dumps the current stack |
| trace of every thread running in the server. This information can be helpful |
| when diagnosing performance issues. |
| |
| == Optimizations and improvements |
| |
| * By default, each tablet replica will now stripe data blocks across 3 data |
| directories instead of all data directories. This decreases the likelihood |
| that any given tablet will be affected in the event of a single disk failure. |
| No substantial performance impact is expected due to this feature based on |
| link:https://github.com/apache/kudu/commit/60276c54a221d554287c6645df7df542fe6d6443[performance testing]. |
| This change only affects new replicas created after upgrading to Kudu 1.7. |
| |
| * Kudu servers previously offered the ability to enable a separate metrics log |
| which stores periodic snapshots of all metrics available on a server. This |
| functionality is now available as part of a more general “diagnostics log” |
| which is enabled by default. The diagnostics log includes periodic dumps of |
| server metrics as well as collections of thread stack traces. The default |
| configuration ensures that no more than 640MB of diagnostics logs are retained, |
| and typically the space consumption is significantly less due to compression. |
| The format and contents of this log file are documented in the |
| link:administration.html[Administration guide]. |
| |
| * The handling of errors in the synchronous Java client has been improved so that, |
| when an exception is thrown, the stack trace indicates the correct location |
| where the client function was invoked rather than a call stack of an internal |
| worker thread. The original call stack from the worker thread is available as |
| a “suppressed exception”. |
| |
| * The logging of errors in the Java client has been improved to exclude exception |
| stack traces for expected scenarios such as failure to connect to a server in a |
| cluster. Instead, only a single line informational message will be logged in |
| such cases to aid in debugging. |
| |
| * The Java client now uses a predefined prioritized list of TLS ciphers when |
| establishing an encrypted connection to Kudu servers. This cipher list matches |
| the list of ciphers preferred for server-to-server communication and ensures |
| that the most efficient and secure ciphers are preferred. When the Kudu client |
| is running on Java 8 or newer, this provides a substantial speed-up to read |
| and write performance. |
| |
| * Reporting for the `kudu cluster ksck` tool has been updated so tablets and |
| tables with on-going tablet copies are shown as "recovering". Additional |
| reporting changes have been made to make various common scenarios, |
| particularly tablet copies, less alarming. |
| |
| * The performance of inserting rows containing many string or binary columns has |
| been improved, especially in the case of highly concurrent write workloads. |
| |
| * By default, Spark tasks that scan Kudu will now be able to scan non-leader |
| replicas. This allows Spark to more easily schedule kudu-spark tasks local to |
| the data. Users can disable this behavior by passing 'leader_only' to the |
| 'kudu.scanLocality' option." |
| |
| * The number of OS threads used in the steady state and during bursts of |
| activity (such as in Raft leader elections triggered by a node failure) has |
| been drastically reduced and should no longer exceed the value of `ulimit -u`. |
| As such, it should no longer be necessary to increase the value of `ulimit -u` |
| (or of /proc/sys/kernel/threads-max) in order to run a Kudu tablet server in |
| most cases. |
| (see link:https://issues.apache.org/jira/browse/KUDU-1913[KUDU-1913]). |
| |
| * An issue where sparse column predicates could cause excessive data-block reads |
| has been fixed. Previously in certain scans with sparsely matching predicates |
| on multiple columns, Kudu would read and decode the same data blocks many times. |
| The improvement typically results in a 5-10x performance increase for the |
| affected scans. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2231[KUDU-2231]). |
| |
| * The efficiency and on-disk size of large updated values has been improved. |
| This will improve update-heavy workloads which overwrite large (1KiB+) values. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2253[KUDU-2253]). |
| |
| |
| [[rn_1.7.0_fixed_issues]] |
| == Fixed Issues |
| |
| * Fixed a scenario where the on-disk data of a tablet server was completely |
| erased and and a new tablet server was started on the same host. This issue |
| could prevent tablet replicas previously hosted on the server from being |
| evicted and re-replicated. |
| Tablets now immediately evict replicas that respond with a different server |
| UUID than expected. |
| (see link:https://issues.apache.org/jira/browse/KUDU-1613[KUDU-1613]). |
| |
| * Fixed a rare race condition when connecting to masters during their |
| startup which might cause a client to get a response without a CA certificate |
| and/or authentication token. This would cause the client to fail to authenticate |
| with other servers in the cluster. The leader master now always sends a CA |
| certificate and an authentication token (when applicable) to a Kudu client |
| with a successful ConnectToMaster response. |
| (see link:https://issues.apache.org/jira/browse/KUDU-1927[KUDU-1927]). |
| |
| * The Kudu Java client now will retry a connection if no master is discovered as a |
| leader, and the user has a valid authentication token. This avoids failure |
| in recoverable cases when masters are in the process of the very first leader |
| election after starting up. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2262[KUDU-2262]). |
| |
| * The Java client will now automatically attempt to re-acquire Kerberos |
| credentials from the ticket cache when the prior credentials are about to |
| expire. This allows client instances to persist longer than the expiration |
| time of a single Kerberos ticket so long as some other process renews the |
| credentials in the ticket cache. Documentation on interacting with Kerberos |
| authentication has been added to the Javadoc for the `AsyncKuduClient` class. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2264[KUDU-2264]). |
| |
| * Follower masters are now able to verify authentication tokens even if they have never |
| been a leader. Prior to this fix, if a follower master had never been a leader, |
| clients would be unable to authenticate to that master, resulting in spurious |
| error messages being logged. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2265[KUDU-2265]). |
| |
| * Fixed a tablet server crash when a tablet replica is deleted during a scan. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2295[KUDU-2295]). |
| |
| * The evaluation order of predicates in scans with multiple predicates has been |
| made deterministic. Due to a bug, this was not necessarily the case previously. |
| Predicates are applied in most to least selective order, with ties broken by |
| column index. The evaluation order may change in the future, particularly when |
| better column statistics are made available internally. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2312[KUDU-2312]). |
| |
| * Previously, the `kudu tablet change_config move_replica` tool required all |
| tablet servers in the cluster to be available when performing a move. This |
| restriction has been relaxed: only the tablet server that will receive a replica |
| of the tablet being moved and the hosts of the tablet's existing replicas need to be |
| available for the move to occur. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2331[KUDU-2331]). |
| |
| * Fixed a bug in the Java client which prevented the client from locating the |
| new leader master after a leader failover in the case that the previous leader |
| either remained online or restarted quickly. This bug resulted in the client |
| timing out operations with errors indicating that there was no leader master. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2343[KUDU-2343]). |
| |
| * The Unix process username of the client is now included inside the exported |
| security credentials, so that the effective username of clients who import |
| credentials and subsequently use unauthenticated (SASL PLAIN) connections |
| matches the client who exported the security credentials. For example, this is |
| useful to let the Spark executors know which username to use if the Spark |
| driver has no authentication token. This change only affects clusters with |
| encryption disabled using `--rpc_encryption=disabled`. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2259[KUDU-2259]). |
| |
| [[rn_1.7.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.7.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.7 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| * Rolling upgrade between Kudu 1.6 and Kudu 1.7 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.7 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations |
| on wire compatibility between Kudu 1.7 and versions earlier than 1.3: |
| |
| * If a Kudu 1.7 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| * If a Kudu 1.7 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.7.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.7.0 |
| |
| * The newly introduced replica management scheme is not compatible with the |
| old scheme, so it's not possible to run pre-1.7 Kudu masters with |
| 1.7 Kudu tablet servers or vice versa. This is a server-side |
| incompatibility only and it does not affect client compatibility. In other words, |
| Kudu clients of prior versions are compatible with upgraded Kudu clusters. |
| |
| ** Kudu masters of 1.7 version will not register Kudu tablet servers of 1.6 |
| and prior versions. |
| ** Kudu tablet servers of 1.7 version will not work with Kudu masters of 1.6 |
| and prior versions. |
| |
| * The format of the previously-optional metrics log has changed to include a |
| human-readable timestamp on each line. The path of the log file has also |
| changed with the word “diagnostics” replacing the word “metrics” in the file |
| name. The metrics log has been optimized to only include those metrics which |
| have changed in between successive samples, and to not include entity attributes |
| such as tablet partition information in the log. |
| (see link:https://issues.apache.org/jira/browse/KUDU-2297[KUDU-2297]). |
| |
| [[rn_1.7.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.7 Java client library is API- and ABI-compatible with Kudu 1.6. Applications |
| written against Kudu 1.6 will compile and run against the Kudu 1.7 client library and |
| vice-versa. |
| |
| * The Kudu 1.7 {cpp} client is API- and ABI-forward-compatible with Kudu 1.6. |
| Applications written and compiled against the Kudu 1.6 client library will run without |
| modification against the Kudu 1.7 client library. Applications written and compiled |
| against the Kudu 1.7 client library will run without modification against the Kudu 1.6 |
| client library. |
| |
| * The Kudu 1.7 Python client is API-compatible with Kudu 1.6. Applications |
| written against Kudu 1.6 will continue to run against the Kudu 1.7 client |
| and vice-versa. |
| |
| * Kudu 1.7 clients that attempt to create a table with a decimal column on a |
| target server running Kudu 1.6 or earlier will receive an error response. |
| Similarly Kudu clients running Kudu 1.6 or earlier will result in an error |
| when attempting to access any table containing containing a decimal |
| column. |
| |
| [[rn_1.6.0]] |
| == Release Notes Specific to 1.6.0 |
| |
| [[rn_1.6.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| * Upgrading directly from Kudu 1.5.0 is supported and no special upgrade steps |
| are required. A rolling upgrade may work, however it has not been tested. |
| When upgrading Kudu, it is recommended to first shut down all Kudu processes |
| across the cluster, then upgrade the software on all servers, then restart |
| the Kudu processes on all servers in the cluster. |
| |
| [[rn_1.6.0_obsoletions]] |
| == Obsoletions |
| |
| * Support for Spark 1 (kudu-spark_2.10) has been **removed** in Kudu 1.6.0 and |
| now only Spark 2 is supported. Spark 1 support was deprecated in Kudu 1.5.0. |
| |
| [[rn_1.6.0_deprecations]] |
| == Deprecations |
| |
| * Support for Java 7 has been deprecated since Kudu 1.5.0 and may be removed in |
| the next major release. |
| |
| [[rn_1.6.0_new_features]] |
| == New features |
| |
| * Tablet servers' tolerance of disk failures is now enabled by default and has |
| been extended to handle data directory failures at runtime. In the event of |
| a disk failure at runtime, any tablets with data on a failed disk will be |
| shut down and restarted on another tablet server. There is a configurable |
| tradeoff between a newly added tablet's tolerance to disk failures and its |
| ability to parallelize reads via the experimental |
| `--fs_target_data_dirs_per_tablet` flag. Tablets that are spread across fewer |
| disks are less likely to be affected by a disk failure, at the cost of |
| reduced parallelism. By default, tablets are striped across all available |
| disks. Note that the first configured data directory and the WAL directory |
| cannot currently tolerate disk failures. This will be further improved in |
| future Kudu releases. |
| |
| * Kudu servers can now adopt new data directories via the new |
| `kudu fs update_dirs` tool. The new directory will be used by new tablet |
| replicas only. Note that removing directories is not yet supported |
| (see link:https://issues.apache.org/jira/browse/KUDU-2202[KUDU-2202]). |
| |
| * Kudu servers have two new flags to control webui TLS/HTTPS |
| settings: `--webserver_tls_ciphers` and `--webserver_tls_min_protocol`. |
| These flags allow the advertised TLS ciphers and TLS protocol versions to be |
| configured. Additionally, the webserver now excludes insecure legacy ciphers |
| by default |
| (see link:https://issues.apache.org/jira/browse/KUDU-2190[KUDU-2190]). |
| |
| == Optimizations and improvements |
| |
| * Kudu servers can now tolerate short interruptions in NTP clock |
| synchronization. NTP synchronization is still required when any Kudu daemon |
| starts up. If NTP synchronization is not available, diagnostic information |
| is now logged to help pinpoint the issue |
| (see link:https://issues.apache.org/jira/browse/KUDU-1578[KUDU-1578]). |
| |
| * Tablet server startup time has been improved significantly on servers |
| containing large numbers of blocks. |
| |
| * The log block manager now performs disk data deletion in batches. This |
| optimization can significantly reduce the time taken to delete data on a tablet. |
| |
| * The usage of sensitive data redaction flag has been slightly changed. By |
| setting `--redact=log` flag, redaction will be disabled in the web UI but |
| retained for server logs. Alternatively, `--redact=none` can be used to |
| disable redaction completely. |
| |
| * The Spark DataSource integration now can take advantage of scan locality |
| for better scan performance, the scan will take place at the closest replica |
| instead of going to the leader. |
| |
| * Various optimizations were made to reduce the 99th percentile latency of |
| writes on the tablet server. This can also improve throughput on certain |
| write workloads, particularly on larger clusters. |
| |
| * Kudu may now be configured to ignore system-wide auth_to_local mappings |
| configured in /etc/krb5.conf by setting the configuration flag |
| `--use_system_auth_to_local=false` |
| (see link:https://issues.apache.org/jira/browse/KUDU-2198[KUDU-2198]). |
| |
| * The performance of the compaction scheduler has been improved. In |
| previous versions, certain types of time series workloads were found to |
| cause compaction scheduling to take tens of seconds. These workloads now |
| schedule compactions an order of magnitude more efficiently. |
| |
| * The compaction scheduler has been improved to avoid running a compaction |
| when the benefit of that compaction is extremely small. |
| |
| * Tablet servers now consider the health of all replicas of a tablet before |
| deciding to evict one. This can improve stability of the Kudu cluster after |
| experiencing multiple simultaneous daemon failures |
| (see link:https://issues.apache.org/jira/browse/KUDU-2048[KUDU-2048]). |
| |
| * Several performance improvements have been made to the Kudu master, |
| particularly in concurrency of clients opening tables. This should improve |
| performance in highly concurrent workloads. |
| |
| * The on-disk size metric for a tablet now includes all data and metadata. |
| Previously, it excluded WAL segments and consensus metadata |
| (see link:https://issues.apache.org/jira/browse/KUDU-1755[KUDU-1755]). |
| |
| * Added verbose mode for the 'kudu cluster ksck' command to enable output |
| of detailed information on the cluster's metadata, even when no errors are |
| detected. |
| |
| [[rn_1.6.0_fixed_issues]] |
| == Fixed Issues |
| |
| * HybridTime timestamp propagation now works in the Java client when using scan |
| tokens (see link:https://issues.apache.org/jira/browse/KUDU-1411[KUDU-1411]). |
| |
| * Fixed an error message commonly found in tablet server logs indicating that |
| operations were being read "from the future" |
| (see link:https://issues.apache.org/jira/browse/KUDU-1078[KUDU-1078]). |
| |
| * Tombstoned tablets no longer report metrics |
| (see link:https://issues.apache.org/jira/browse/KUDU-2044[KUDU-2044]). |
| |
| * Fixed a bug in the C++ client which could cause tablets to be erroneously |
| pruned, or skipped, during certain scans, resulting in fewer results than |
| expected being returned from queries. The bug only affected tables whose range |
| partition columns are a proper prefix of the primary key |
| (see link:https://issues.apache.org/jira/browse/KUDU-2173[KUDU-2173]). |
| |
| * Published Kudu Java artifacts are now fully compatible with JRE 7 and JRE 8. |
| There was previously a bug in the release process which made them compatible |
| only with JRE 8 |
| (see link:https://issues.apache.org/jira/browse/KUDU-2188[KUDU-2188]). |
| |
| * Fixed a typo in the list of default TLS ciphers used by Kudu servers. As a |
| result, two additional cipher suites are now available: |
| ** ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256 |
| ** AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD |
| |
| [[rn_1.6.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.6.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.6 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| * Rolling upgrade between Kudu 1.5 and Kudu 1.6 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.6 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations |
| on wire compatibility between Kudu 1.6 and versions earlier than 1.3: |
| |
| * If a Kudu 1.6 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| * If a Kudu 1.6 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.6.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.6.0 |
| |
| [[rn_1.6.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.6 Java client library is API- and ABI-compatible with Kudu 1.5. Applications |
| written against Kudu 1.5 will compile and run against the Kudu 1.6 client library and |
| vice-versa. |
| |
| * The Kudu 1.6 {cpp} client is API- and ABI-forward-compatible with Kudu 1.5. |
| Applications written and compiled against the Kudu 1.5 client library will run without |
| modification against the Kudu 1.6 client library. Applications written and compiled |
| against the Kudu 1.6 client library will run without modification against the Kudu 1.5 |
| client library. |
| |
| * The Kudu 1.6 Python client is API-compatible with Kudu 1.5. Applications |
| written against Kudu 1.5 will continue to run against the Kudu 1.6 client |
| and vice-versa. |
| |
| [[rn_1.5.0]] |
| == Release notes specific to 1.5.0 |
| |
| [[rn_1.5.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| * Kudu 1.5 now enables the optional ability to compute, store, and verify |
| checksums on all pieces of data stored on a server by default. Due to |
| storage format changes, downgrading to versions 1.3 or earlier is not |
| supported and will result in an error. |
| |
| * Spark 2.2+ requires Java 8 at runtime even though Kudu Spark 2.x integration |
| is Java 7 compatible. Spark 2.2 is the default dependency version as of |
| Kudu 1.5.0. |
| |
| * The kudu-spark-tools module has been renamed to kudu-spark2-tools_2.11 in |
| order to include the Spark and Scala base versions. This matches the pattern |
| used in the kudu-spark module and artifacts. |
| |
| * To improve security, world-readable Kerberos keytab files are no longer |
| accepted by default. Set `--allow_world_readable_credentials=true` to override |
| this behavior. See |
| link:https://issues.apache.org/jira/browse/KUDU-1955[KUDU-1955] for additional |
| details. |
| |
| [[rn_1.5.0_deprecations]] |
| == Deprecations |
| |
| * Support for Java 7 is deprecated as of Kudu 1.5.0 and may be removed in the |
| next major release. |
| |
| * Support for Spark 1 (kudu-spark_2.10) is deprecated as of Kudu 1.5.0 and may |
| be removed in the next minor release. |
| |
| [[rn_1.5.0_new_features]] |
| == New features |
| |
| * Tablet servers are now optionally able to tolerate disk failures at |
| startup. This feature is experimental; by default, Kudu will crash if it |
| experiences a disk failure. When enabled, tablets with any data on the failed |
| disk will not be opened and will be replicated as needed. To enable this, set |
| the `--crash_on_eio` flag to `false`. Additionally, there is a configurable |
| tradeoff between a newly added tablet's tolerance to disk failures and its |
| parallelization of I/O via the `--fs_target_data_dirs_per_tablet` flag. |
| Tablets that are spread across fewer disks are less likely to be affected by a |
| disk failure, at the cost of reduced parallelism. Note that the first |
| configured data directory and the WAL directory cannot currently tolerate disk |
| failures, and disk failures during run-time are still fatal. |
| |
| * Kudu server web UIs have a new configuration dashboard (/config) which |
| provides a high level summary of important security configuration values, such |
| as whether RPC authentication is required, or web server HTTPS encryption is |
| enabled. Other types of configuration will be added in future releases. |
| |
| * The `kudu` command line tool has two new features: `kudu tablet change_config |
| move_replica` and `kudu local_replica data_size`. The 'tablet change_config |
| move_replica' tool moves a tablet replica from one tablet server to another, |
| under the condition that the tablet is healthy. An operator can use this tool to |
| rebalance tablet replicas between tablet servers. The 'local_replica data size' |
| tool summarizes the space usage of a tablet, breaking it down by type of file, |
| column, and rowset. |
| |
| * kudu-client-tools now supports exporting CSV files and importing |
| Apache Parquet files. This feature is unstable and may change APIs and |
| functionality in future releases. |
| |
| * kudu-spark-tools now supports importing and exporting CSV, Apache Avro and |
| Apache Parquet files. This feature is unstable and may change APIs and |
| functionality in future releases. |
| |
| [[rn_1.5.0_optimizations_improvements]] |
| == Optimizations and improvements |
| |
| * The log block manager now performs disk synchronization in batches. |
| This optimization can significantly reduce the time taken to copy tablet data |
| from one server to another; in one case tablet copy time is reduced by 35%. |
| It also improves the general performance of flushes and compactions. |
| |
| * A new feature referred to as "tombstoned voting" is added to the Raft |
| consensus subsystem to allow tablet replicas in the `TABLET_DATA_TOMBSTONED` |
| state to vote in tablet leader elections. This feature increases Kudu's |
| stability and availability by improving the likelihood that Kudu will be able |
| to self-heal in more edge-case scenarios, such as when tablet copy operations |
| fail. See link:https://issues.apache.org/jira/browse/KUDU-871[KUDU-871] for |
| details. |
| |
| * The tablet on-disk size metric has been made more accurate. Previously, the |
| metric included only REDO deltas; it now counts all deltas. Additionally, the |
| metric includes the size of bloomfiles, ad hoc indexes, and the tablet |
| superblock. WAL segments and consensus metadata are still not counted. The |
| latter is very small compared to the size of data, but the former may be |
| significant depending on the workload (this will be resolved in a future |
| release). |
| |
| * The number of threads used by the Kudu tablet server has been further reduced. |
| Previously, each follower tablet replica used a dedicated thread to detect |
| leader tablet replica failures, and each leader replica used one dedicated |
| thread per follower to send Raft heartbeats to that follower. The work |
| performed by these dedicated threads has been reassigned to other threads. |
| Other improvements were made to facilitate better thread sharing by tablets. |
| For the purpose of capacity planning, expect the Kudu tablet server to create |
| one thread for every five "cold" (i.e. those not servicing writes) tablets, |
| and an additional three threads for every "hot" tablet. This will be further |
| improved upon in future Kudu releases. |
| |
| [[rn_1.5.0_fixed_issues]] |
| == Fixed Issues |
| |
| * The Java Kudu client now automatically requests new authentication tokens |
| after expiration. As a result, long-lived Java clients are now supported. See |
| link:https://issues.apache.org/jira/browse/KUDU-2013[KUDU-2013] for more |
| details. |
| |
| * Multiple Kerberos compatibility bugs have been fixed, including support |
| for environments with disabled reverse DNS, FreeIPA compatibility, principal |
| names including uppercase characters, and hosts without a FQDN. |
| |
| * A bug in the binary prefix decoder which could cause a tablet server 'check' |
| assertion crash has been fixed. The crash could only be triggered in very |
| specific scenarios; see |
| link:https://issues.apache.org/jira/browse/KUDU-2085[KUDU-2085] for additional |
| details. |
| |
| [[rn_1.5.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.5.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.5 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| * Rolling upgrade between Kudu 1.4 and Kudu 1.5 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.5 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations |
| on wire compatibility between Kudu 1.5 and versions earlier than 1.3: |
| |
| * If a Kudu 1.5 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| * If a Kudu 1.5 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.5.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.5.0 |
| |
| [[rn_1.5.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.5 Java client library is API- and ABI-compatible with Kudu 1.4. Applications |
| written against Kudu 1.4 will compile and run against the Kudu 1.5 client library and |
| vice-versa, unless one of the following newly added APIs is used: |
| |
| * The Kudu 1.5 {cpp} client is API- and ABI-forward-compatible with Kudu 1.4. |
| Applications written and compiled against the Kudu 1.4 client library will run without |
| modification against the Kudu 1.5 client library. Applications written and compiled |
| against the Kudu 1.5 client library will run without modification against the Kudu 1.4 |
| client library. |
| |
| * The Kudu 1.5 Python client is API-compatible with Kudu 1.4. Applications |
| written against Kudu 1.4 will continue to run against the Kudu 1.5 client |
| and vice-versa. |
| |
| [[rn_1.4.0]] |
| == Release notes specific to 1.4.0 |
| |
| [[rn_1.4.0_upgrade_notes]] |
| == Upgrade Notes |
| |
| * The Maintenance Manager now fully uses the threads it's given (see the improvements |
| described further below), so it's now able to generate a lot more IO by flushing and |
| compacting more often. Generally, the recommended ratio of MM threads to data |
| directories is 1:3; operators of clusters above that ratio should be mindful of |
| this when upgrading. |
| |
| [[rn_1.4.0_new_features]] |
| == New features |
| |
| * The C++ and Java client libraries now support the ability to alter the |
| storage attributes (e.g. encoding and compression) and default value |
| of existing columns. Additionally, it is now possible to rename |
| a column which is part of a table's primary key. |
| |
| * The C++ client library now includes an experimental `KuduPartitioner` API which may |
| be used to efficiently map rows to their associated partitions and hosts. |
| This may be used to achieve better locality or distribution of writes |
| in client applications. |
| |
| * The Java client library now supports enabling fault tolerance on scanners. |
| Fault tolerant scanners are able to transparently recover from concurrent |
| server crashes at the cost of some performance overhead. See the Java |
| API documentation for more details on usage. |
| |
| * The `kudu` command line tool now includes a new advanced administrative |
| command `kudu remote_replica unsafe_change_config`. This command may be used |
| to force a tablet to perform an unsafe change of its Raft replication |
| configuration. This can be used to recover from scenarios such as a loss |
| of a majority of replicas, at the risk of losing edits. |
| |
| * The `kudu` command line tool now includes the `kudu fs check` command |
| which performs various offline consistency checks on the local on-disk |
| storage of a Kudu Tablet Server or Master. In addition to detecting |
| various inconsistencies or corruptions, it can also detect and remove |
| data blocks that are no longer referenced by any tablet but were not |
| fully removed from disk due to a crash or a bug in prior versions of Kudu. |
| |
| * The `kudu` command line tool can now be used to list the addresses and |
| identifiers of the servers in the cluster using either `kudu master list` |
| or `kudu tserver list`. |
| |
| * Kudu 1.4 now includes the optional ability to compute, store, and verify |
| checksums on all pieces of data stored on a server. Prior versions only |
| performed checksums on certain portions of the stored data. This feature |
| is not enabled by default since it makes a backward-incompatible change |
| to the on-disk formats and thus prevent downgrades. Kudu 1.5 will enable |
| the feature by default. |
| |
| == Optimizations and improvements |
| |
| * `kudu cluster ksck` now detects and reports new classes of |
| inconsistencies and issues. In particular, it is better able to |
| detect cases where a configuration change such as a replica eviction |
| or addition is pending but is unable to be committed. It also now |
| properly detects and reports cases where a tablet has no elected |
| leader. |
| |
| * The default size for Write Ahead Log (WAL) segments has been reduced |
| from 64MB to 8MB. Additionally, in the case that all replicas of a |
| tablet are fully up to date and data has been flushed from memory, |
| servers will now retain only a single WAL segment rather than |
| two. These changes are expected to reduce the average consumption of |
| disk space on the configured WAL disk by 16x, as well as improve the |
| startup speed of tablet servers by reducing the number and size of |
| WAL segments that need to be re-read. |
| |
| * The default on-disk storage system used by Kudu servers (Log Block Manager) |
| has been improved to compact its metadata and remove dead containers. |
| This compaction and garbage collection occurs only at startup. Thus, the |
| first startup after upgrade is expected to be longer than usual, and |
| subsequent restarts should be shorter. |
| |
| * The usability of the Kudu web interfaces has been improved, |
| particularly for the case where a server hosts many tablets or a |
| table has many partitions. Pages that list tablets now include |
| a top-level summary of tablet status and show the complete list |
| under a toggleable section. |
| |
| * The Maintenance Manager has been improved to improve utilization of the |
| configured maintenance threads. Previously, maintenance work would |
| only be scheduled a maximum of 4 times per second, but now maintenance |
| work will be scheduled immediately whenever any configured thread is |
| available. This can improve the throughput of write-heavy workloads. |
| |
| * The Maintenance Manager will now aggressively schedule flushes of |
| in-memory data when memory consumption crosses 60% of the configured |
| process-wide memory limit. The backpressure mechanism which begins |
| to throttle client writes has been accordingly adjusted to not begin |
| throttling until reaching 80% of the configured limit. These two |
| changes together result in improved write throughput, more consistent |
| latency, and fewer timeouts due to memory exhaustion. |
| |
| * Many performance improvements were made to write performance. Applications |
| which send large batches of writes to Kudu should see substantially |
| improved throughput in Kudu 1.4. |
| |
| * Several improvements were made to reduce the memory consumption of |
| Kudu Tablet Servers which hold large volumes of data. The specific |
| amount of memory saved varies depending on workload, but the expectation |
| is that approximately 350MB of excess peak memory usage has been eliminated |
| per TB of data stored. |
| |
| * The number of threads used by the Kudu Tablet Server has been reduced. |
| Previously, each tablet used a dedicated thread to append to its WAL. |
| Those threads now automatically stop running if there is no activity |
| on a given tablet for a short period of time. |
| |
| [[rn_1.4.0_fixed_issues]] |
| == Fixed Issues |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-2020[KUDU-2020] |
| Fixed an issue where re-replication after a failure would proceed |
| significantly slower than expected. This bug caused many tablets |
| to be unnecessarily copied multiple times before successfully |
| being considered re-replicated, resulting in significantly more |
| network and IO bandwidth usage than expected. Mean time to recovery |
| on clusters with large amounts of data is improved by up to 10x by this |
| fix. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1982[KUDU-1982] |
| Fixed an issue where the Java client would call `NetworkInterface.getByInetAddress` |
| very often, causing performance problems particularly on Windows |
| where this function can be quite slow. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1755[KUDU-1755] |
| Improved the accuracy of the `on_disk_size` replica metrics to |
| include the size consumed by bloom filters, primary key indexes, |
| and superblock metadata, and delta files. Note that, because the size |
| metric is now more accurate, the reported values are expected to |
| increase after upgrading to Kudu 1.4. This does not indicate that |
| replicas are using more space after the upgrade; rather, it is |
| now accurately reporting the amount of space that has always been |
| used. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1192[KUDU-1192] |
| Kudu servers will now periodically flush their log messages to disk |
| even if no `WARNING`-level messages have been logged. This makes it |
| easier to tail the logs to see progress output during normal startup. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1999[KUDU-1999] |
| Fixed the ability to run Spark jobs in "cluster" mode against |
| Kudu clusters secured by Kerberos. |
| |
| |
| [[rn_1.4.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.4.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.4 clients may connect to servers running Kudu 1.0 or later. If the client uses |
| features that are not available on the target server, an error will be returned. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.4 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| * Rolling upgrade between Kudu 1.3 and Kudu 1.4 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| |
| The authentication features introduced in Kudu 1.3 place the following limitations |
| on wire compatibility between Kudu 1.4 and versions earlier than 1.3: |
| |
| * If a Kudu 1.4 cluster is configured with authentication or encryption set to "required", |
| clients older than Kudu 1.3 will be unable to connect. |
| * If a Kudu 1.4 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| [[rn_1.4.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.4.0 |
| |
| * Kudu servers, by default, will now only allow unencrypted or unauthenticated connections |
| from trusted subnets, which are private networks (127.0.0.0/8,10.0.0.0/8,172.16.0.0/12, |
| 192.168.0.0/16,169.254.0.0/16) and local subnets of all local network interfaces. |
| Unencrypted or unauthenticated connections from publicly routable IPs will be rejected, |
| even if encryption and authentication are not configured. |
| + |
| The trusted subnets can be configured using the `--trusted_subnets` flag, which can be set |
| to IP blocks represented in CIDR notation separated by comma. Set it to '0.0.0.0/0' to |
| allow unauthenticated connections from all remote IP addresses. However, if network access |
| is not otherwise restricted by a firewall, malicious users may be able to gain unauthorized |
| access. This can be mitigated if authentication and encryption are configured to be |
| required. |
| |
| [[rn_1.4.0_client_compatibility]] |
| === Client Library Compatibility |
| * The Kudu 1.4 Java client library is API- and ABI-compatible with Kudu 1.3. Applications |
| written against Kudu 1.3 will compile and run against the Kudu 1.4 client library and |
| vice-versa, unless one of the following newly added APIs is used: |
| ** `[Async]KuduScannerBuilder.setFaultTolerant(...)` |
| ** New methods in `AlterTableOptions`: `removeDefault`, `changeDefault`, `changeDesiredBlockSize`, |
| `changeEncoding`, `changeCompressionAlgorithm` |
| ** `KuduClient.updateLastPropagatedTimestamp` |
| ** `KuduClient.getLastPropagatedTimestamp` |
| ** New getters in `PartialRow`: `getBoolean`, `getByte`, `getShort`, `getInt`, `getLong`, |
| `getFloat`, `getDouble`, `getString`, `getBinaryCopy`, `getBinary`, `isNull`, |
| `isSet`. |
| |
| |
| * The Kudu 1.4 {cpp} client is API- and ABI-forward-compatible with Kudu 1.3. |
| Applications written and compiled against the Kudu 1.3 client library will run without |
| modification against the Kudu 1.4 client library. Applications written and compiled |
| against the Kudu 1.4 client library will run without modification against the Kudu 1.3 |
| client library unless they use one of the following new APIs: |
| ** `KuduPartitionerBuilder` |
| ** `KuduPartitioner |
| ** `KuduScanner::SetRowFormatFlags` (unstable API) |
| ** `KuduScanBatch::direct_data`, `KuduScanBatch::indirect_data` (unstable API) |
| |
| * The Kudu 1.4 Python client is API-compatible with Kudu 1.3. Applications |
| written against Kudu 1.3 will continue to run against the Kudu 1.4 client |
| and vice-versa. |
| |
| [[rn_1.3.0]] |
| == Release notes specific to 1.3.0 |
| |
| [[rn_1.3.0_new_features]] |
| == New features |
| |
| * Kudu 1.3 adds support for strong authentication based on Kerberos. This optional feature |
| allows users to authenticate themselves using Kerberos tickets, and also provides |
| mutual authentication of servers using Kerberos credentials stored in keytabs. This |
| feature is optional, but recommended for deployments requiring security. |
| |
| * Kudu 1.3 adds support for encryption of data on the network using Transport Layer Security |
| (TLS). Kudu will now use TLS to encrypt all network traffic between clients and servers as |
| well as any internal traffic among servers, with the exception of traffic determined to |
| be within a localhost network connection. Encryption is enabled by default whenever it can |
| be determined that both the client and server support the feature. |
| |
| * Kudu 1.3 adds coarse-grained service-level authorization of access to the cluster. |
| The operator may set up lists of permitted users who may act as administrators and |
| as clients of the cluster. Combined with the strong authentication feature described |
| above, this can enable a secure environment for some use cases. Note that fine-grained |
| access control (e.g. table-level or column-level) is not yet supported. |
| |
| * Kudu 1.3 adds a background task to tablet servers which removes historical versions of |
| data which have fallen behind the configured data retention time. This reduces disk space |
| usage in all workloads, but particularly in those with a higher volume of updates or |
| upserts. |
| |
| * Kudu now incorporates Google Breakpad, a library which writes crash reports in |
| the case of a server crash. These reports can be found within the configured log directory, |
| and can be useful during bug diagnosis. |
| |
| |
| == Optimizations and improvements |
| |
| * Kudu servers will now change the file permissions of data directories and contained |
| data files based on a new configuration flag `--umask`. As a result, after upgrading, |
| permissions on disk may be more restrictive than in previous versions. The new default |
| configuration improves data security. |
| |
| * Kudu's web UI will now redact strings which may include sensitive user data. For example, |
| the monitoring page which shows in-progress scans no longer includes the scanner predicate |
| values. The tracing and RPC diagnostics endpoints no longer include contents of RPCs which |
| may include table data. |
| |
| * By default, Kudu now reserves 1% of each configured data volume as free space. If a volume |
| is seen to have less than 1% of disk space free, Kudu will stop writing to that volume |
| to avoid completely filling up the disk. |
| |
| * The default encoding for numeric columns (int, float, and double) has been changed |
| to `BIT_SHUFFLE`. The default encoding for binary and string columns has been |
| changed to `DICT_ENCODING`. Dictionary encoding automatically falls back to the old |
| default (`PLAIN`) when cardinality is too high to be effectively encoded. |
| + |
| These new defaults match the default behavior of other storage mechanisms such as |
| Apache Parquet and are likely to perform better out of the box. |
| |
| * Kudu now uses `LZ4` compression when writing its Write Ahead Log (WAL). This improves |
| write performance and stability for many use cases. |
| |
| * Kudu now uses `LZ4` compression when writing delta files. This can improve both |
| read and write performance as well as save substantial disk usage, especially |
| for workloads involving a high number of updates or upserts containing compressible |
| data. |
| |
| * The Kudu API now supports the ability to express `IS NULL` and `IS NOT NULL` predicates |
| on scanners. The Spark DataSource integration will take advantage of these new |
| predicates when possible. |
| |
| * Both {cpp} and Java clients have been optimized to prune partitions more effectively |
| when performing scans using the `IN (...)` predicate. |
| |
| * The exception messages produced by the Java client are now truncated to a maximum length |
| of 32KB. |
| |
| |
| [[rn_1.3.0_fixed_issues]] |
| == Fixed Issues |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1893[KUDU-1893] |
| Fixed a critical bug in which wrong results would be returned when evaluating |
| predicates applied to columns added using the `ALTER TABLE` operation. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1905[KUDU-1905] |
| Fixed a crash after inserting a row sharing a primary key with a recently-deleted |
| row in tables where the primary key is comprised of all of the columns. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1899[KUDU-1899] |
| Fixed a crash after inserting a row with an empty string as the single-column |
| primary key. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1904[KUDU-1904] |
| Fixed a potential crash when performing random reads against a column using RLE |
| encoding and containing long runs of NULL values. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1853[KUDU-1853] |
| Fixed an issue where disk space could be leaked on servers which experienced an error |
| during the process of copying tablet data from another server. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1856[KUDU-1856] |
| Fixed an issue in which disk space could be leaked by Kudu servers storing data on |
| partitions using the XFS file system. Any leaked disk space will be automatically |
| recovered upon upgrade. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1888[KUDU-1888], |
| link:https://issues.apache.org/jira/browse/KUDU-1906[KUDU-1906] |
| Fixed multiple issues in the Java client where operation callbacks would never be |
| triggered, causing the client to hang. |
| |
| |
| [[rn_1.3.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.3.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.3 clients may connect to servers running Kudu 1.0. If the client uses features |
| that are not available on the target server, an error will be returned. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.3 with the exception of the |
| below-mentioned restrictions regarding secure clusters. |
| * Rolling upgrade between Kudu 1.2 and Kudu 1.3 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| |
| The authentication features newly introduced in Kudu 1.3 place the following limitations |
| on wire compatibility with older versions: |
| |
| * If a Kudu 1.3 cluster is configured with authentication or encryption set to "required", |
| older clients will be unable to connect. |
| * If a Kudu 1.3 cluster is configured with authentication and encryption set to "optional" |
| or "disabled", older clients will still be able to connect. |
| |
| |
| [[rn_1.3.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.3.0 |
| |
| * Due to storage format changes in Kudu 1.3, downgrade from Kudu 1.3 to earlier versions |
| is not supported. After upgrading to Kudu 1.3, attempting to restart with an earlier |
| version will result in an error. |
| |
| * In order to support running MapReduce and Spark jobs on secure clusters, these |
| frameworks now connect to the cluster at job submission time to retrieve authentication |
| credentials which can later be used by the tasks to be spawned. This means that |
| the process submitting jobs to Kudu clusters must have direct access to that cluster. |
| |
| * The embedded web servers in Kudu processes now specify the `X-Frame-Options: DENY` HTTP |
| header which prevents embedding Kudu web pages in HTML `iframe` elements. |
| |
| [[rn_1.3.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.3 Java client library is API- and ABI-compatible with Kudu 1.2. Applications |
| written against Kudu 1.2 will compile and run against the Kudu 1.3 client library and |
| vice-versa, unless one of the following newly added APIs is used: |
| ** `[Async]KuduClient.exportAuthenticationCredentials(...)` (unstable API) |
| ** `[Async]KuduClient.importAuthenticationCredentials(...)` (unstable API) |
| ** `[Async]KuduClient.getMasterAddressesAsString()` |
| ** `KuduPredicate.newIsNotNullPredicate()` |
| ** `KuduPredicate.newIsNullPredicate()` |
| |
| * The Kudu 1.3 {cpp} client is API- and ABI-forward-compatible with Kudu 1.2. |
| Applications written and compiled against the Kudu 1.2 client library will run without |
| modification against the Kudu 1.3 client library. Applications written and compiled |
| against the Kudu 1.3 client library will run without modification against the Kudu 1.2 |
| client library unless they use one of the following new APIs: |
| ** `kudu::DisableOpenSSLInitialization()` |
| ** `KuduClientBuilder::import_authentication_credentials(...)` |
| ** `KuduClient::ExportAuthenticationCredentials(...)` |
| ** `KuduClient::NewIsNotNullPredicate(...)` |
| ** `KuduClient::NewIsNullPredicate(...)` |
| |
| * The Kudu 1.3 Python client is API-compatible with Kudu 1.2. Applications |
| written against Kudu 1.2 will continue to run against the Kudu 1.3 client |
| and vice-versa. |
| |
| |
| [[rn_1.2.0]] |
| == Release notes specific to 1.2.0 |
| |
| [[rn_1.2.0_new_features]] |
| == New features |
| |
| * Kudu clients and servers now redact user data such as cell values |
| from log messages, Java exception messages, and `Status` strings. |
| User metadata such as table names, column names, and partition |
| bounds are not redacted. |
| + |
| Redaction is enabled by default, but may be disabled by setting the new |
| `log_redact_user_data` flag to `false`. |
| |
| * Kudu's ability to provide consistency guarantees has been substantially |
| improved: |
| |
| ** Replicas now correctly track their "safe timestamp". This timestamp |
| is the maximum timestamp at which reads are guaranteed to be |
| repeatable. |
| |
| ** A scan created using the `SCAN_AT_SNAPSHOT` mode will now |
| either wait for the requested snapshot to be "safe" at the replica |
| being scanned, or be re-routed to a replica where the requested |
| snapshot is "safe". This ensures that all such scans are repeatable. |
| |
| ** Kudu Tablet Servers now properly retain historical data when a row |
| with a given primary key is inserted and deleted, followed by the |
| insertion of a new row with the same key. Previous versions of Kudu |
| would not retain history in such situations. This allows the server |
| to return correct results for snapshot scans with a timestamp in the |
| past, even in the presence of such "reinsertion" scenarios. |
| |
| ** The Kudu clients now automatically retain the timestamp of their latest |
| successful read or write operation. Scans using the `READ_AT_SNAPSHOT` mode |
| without a client-provided timestamp automatically assign a timestamp |
| higher than the timestamp of their most recent write. Writes also propagate |
| the timestamp, ensuring that sequences of operations with causal dependencies |
| between them are assigned increasing timestamps. Together, these changes |
| allow clients to achieve read-your-writes consistency, and also ensure |
| that snapshot scans performed by other clients return causally-consistent |
| results. |
| |
| * Kudu servers now automatically limit the number of log files. |
| The number of log files retained can be configured using the |
| `max_log_files` flag. By default, 10 log files will be retained |
| at each severity level. |
| |
| == Optimizations and improvements |
| |
| * The logging in the Java and {cpp} clients has been substantially quieted. |
| Clients no longer log messages in normal operation unless there |
| is some kind of error. |
| |
| * The {cpp} client now includes a `KuduSession::SetErrorBufferSpace` |
| API which can limit the amount of memory used to buffer |
| errors from asynchronous operations. |
| |
| * The Java client now fetches tablet locations from the Kudu Master |
| in batches of 1000, increased from batches of 10 in prior versions. |
| This can substantially improve the performance of Spark and Impala |
| queries running against Kudu tables with large numbers of tablets. |
| |
| * Table metadata lock contention in the Kudu Master was substantially |
| reduced. This improves the performance of tablet location lookups on |
| large clusters with a high degree of concurrency. |
| |
| * Lock contention in the Kudu Tablet Server during high-concurrency |
| write workloads was also reduced. This can reduce CPU consumption and |
| improve performance when a large number of concurrent clients are writing |
| to a smaller number of a servers. |
| |
| * Lock contention when writing log messages has been substantially reduced. |
| This source of contention could cause high tail latencies on requests, |
| and when under high load could contribute to cluster instability |
| such as election storms and request timeouts. |
| |
| * The `BITSHUFFLE` column encoding has been optimized to use the `AVX2` |
| instruction set present on processors including Intel(R) Sandy Bridge |
| and later. Scans on `BITSHUFFLE`-encoded columns are now up to 30% faster. |
| |
| * The `kudu` tool now accepts hyphens as an alternative to underscores |
| when specifying actions. For example, `kudu local-replica copy-from-remote` |
| may be used as an alternative to `kudu local_replica copy_from_remote`. |
| |
| [[rn_1.2.0_fixed_issues]] |
| == Fixed Issues |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1508[KUDU-1508] |
| Fixed a long-standing issue in which running Kudu on `ext4` file systems |
| could cause file system corruption. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1399[KUDU-1399] |
| Implemented an LRU cache for open files, which prevents running out of |
| file descriptors on long-lived Kudu clusters. By default, Kudu will |
| limit its file descriptor usage to half of its configured `ulimit`. |
| |
| * link:http://gerrit.cloudera.org:8080/5192[Gerrit #5192] |
| Fixed an issue which caused data corruption and crashes in the case that |
| a table had a non-composite (single-column) primary key, and that column |
| was specified to use `DICT_ENCODING` or `BITSHUFFLE` encodings. If a |
| table with an affected schema was written in previous versions of Kudu, |
| the corruption will not be automatically repaired; users are encouraged |
| to re-insert such tables after upgrading to Kudu 1.2 or later. |
| |
| * link:http://gerrit.cloudera.org:8080/5541[Gerrit #5541] |
| Fixed a bug in the Spark `KuduRDD` implementation which could cause |
| rows in the result set to be silently skipped in some cases. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1551[KUDU-1551] |
| Fixed an issue in which the tablet server would crash on restart in the |
| case that it had previously crashed during the process of allocating |
| a new WAL segment. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1764[KUDU-1764] |
| Fixed an issue where Kudu servers would leak approximately 16-32MB of disk |
| space for every 10GB of data written to disk. After upgrading to Kudu |
| 1.2 or later, any disk space leaked in previous versions will be |
| automatically recovered on startup. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1750[KUDU-1750] |
| Fixed an issue where the API to drop a range partition would drop any |
| partition with a matching lower _or_ upper bound, rather than any partition |
| with matching lower _and_ upper bound. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1766[KUDU-1766] |
| Fixed an issue in the Java client where equality predicates which compared |
| an integer column to its maximum possible value (e.g. `Integer.MAX_VALUE`) |
| would return incorrect results. |
| |
| * link:https://issues.apache.org/jira/browse/KUDU-1780[KUDU-1780] |
| Fixed the `kudu-client` Java artifact to properly shade classes in the |
| `com.google.thirdparty` namespace. The lack of proper shading in prior |
| releases could cause conflicts with certain versions of Google Guava. |
| |
| * link:http://gerrit.cloudera.org:8080/5327[Gerrit #5327] |
| Fixed shading issues in the `kudu-flume-sink` Java artifact. The sink |
| now expects that Hadoop dependencies are provided by Flume, and properly |
| shades the Kudu client's dependencies. |
| |
| * Fixed a few issues using the Python client library from Python 3. |
| |
| |
| [[rn_1.2.0_wire_compatibility]] |
| == Wire Protocol compatibility |
| |
| Kudu 1.2.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.2 clients may connect to servers running Kudu 1.0. If the client uses features |
| that are not available on the target server, an error will be returned. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.2 without limitations. |
| * Rolling upgrade between Kudu 1.1 and Kudu 1.2 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| |
| [[rn_1.2.0_incompatible_changes]] |
| == Incompatible Changes in Kudu 1.2.0 |
| |
| * The replication factor of tables is now limited to a maximum of 7. In addition, |
| it is no longer allowed to create a table with an even replication factor. |
| |
| * The `GROUP_VARINT` encoding is now deprecated. Kudu servers have never supported |
| this encoding, and now the client-side constant has been deprecated to match the |
| server's capabilities. |
| |
| === New Restrictions on Data, Schemas, and Identifiers |
| |
| Kudu 1.2.0 introduces several new restrictions on schemas, cell size, and identifiers: |
| |
| Number of Columns:: By default, Kudu will not permit the creation of tables with |
| more than 300 columns. We recommend schema designs that use fewer columns for best |
| performance. |
| |
| Size of Cells:: No individual cell may be larger than 64KB. The cells making up a |
| a composite key are limited to a total of 16KB after the internal composite-key encoding |
| done by Kudu. Inserting rows not conforming to these limitations will result in errors |
| being returned to the client. |
| |
| Valid Identifiers:: Identifiers such as column and table names are now restricted to |
| be valid UTF-8 strings. Additionally, a maximum length of 256 characters is enforced. |
| |
| [[rn_1.2.0_client_compatibility]] |
| === Client Library Compatibility |
| |
| * The Kudu 1.2 Java client is API- and ABI-compatible with Kudu 1.1. Applications |
| written against Kudu 1.1 will compile and run against the Kudu 1.2 client and |
| vice-versa. |
| |
| * The Kudu 1.2 {cpp} client is API- and ABI-forward-compatible with Kudu 1.1. |
| Applications written and compiled against the Kudu 1.1 client will run without |
| modification against the Kudu 1.2 client. Applications written and compiled |
| against the Kudu 1.2 client will run without modification against the Kudu 1.1 |
| client unless they use one of the following new APIs: |
| ** `kudu::DisableSaslInitialization()` |
| ** `KuduSession::SetErrorBufferSpace(...)` |
| |
| * The Kudu 1.2 Python client is API-compatible with Kudu 1.1. Applications |
| written against Kudu 1.1 will continue to run against the Kudu 1.2 client |
| and vice-versa. |
| |
| |
| [[rn_1.1.0]] |
| == Release notes specific to 1.1.0 |
| |
| [[rn_1.1.0_new_features]] |
| == New features |
| |
| * The Python client has been brought up to feature parity with the Java and {cpp} clients |
| and as such the package version will be brought to 1.1 with this release (from 0.3). A |
| list of the highlights can be found below. |
| ** Improved Partial Row semantics |
| ** Range partition support |
| ** Scan Token API |
| ** Enhanced predicate support |
| ** Support for all Kudu data types (including a mapping of Python's `datetime.datetime` to |
| `UNIXTIME_MICROS`) |
| ** Alter table support |
| ** Enabled Read at Snapshot for Scanners |
| ** Enabled Scanner Replica Selection |
| ** A few bug fixes for Python 3 in addition to various other improvements. |
| |
| * IN LIST predicate pushdown support was added to allow optimized execution of filters which |
| match on a set of column values. Support for Spark, Map Reduce and Impala queries utilizing |
| IN LIST pushdown is not yet complete. |
| |
| * The Java client now features client-side request tracing in order to help troubleshoot timeouts. |
| Error messages are now augmented with traces that show which servers were contacted before the |
| timeout occurred instead of just the last error. The traces also contain RPCs that were |
| required to fulfill the client's request, such as contacting the master to discover a tablet's |
| location. Note that the traces are not available for successful requests and are not |
| programmatically queryable. |
| |
| == Optimizations and improvements |
| |
| * Kudu now publishes JAR files for Spark 2.0 compiled with Scala 2.11 along with the |
| existing Spark 1.6 JAR compiled with Scala 2.10. |
| |
| * The Java client now allows configuring scanners to read from the closest replica instead of |
| the known leader replica. The default remains the latter. Use the relevant `ReplicaSelection` |
| enum with the scanner's builder to change this behavior. |
| |
| * Tablet servers use a new policy for retaining write-ahead log (WAL) segments. |
| Previously, servers used the 'log_min_segments_to_retain' flag to prioritize |
| any flushes which were retaining log segments past the configured value (default 2). |
| This policy caused servers to flush in-memory data more frequently than necessary, |
| limiting write performance. |
| + |
| The new policy introduces a new flag 'log_target_replay_size_mb' which |
| determines the threshold at which write-ahead log retention will prioritize flushes. |
| The new flag is considered experimental and users should not need to modify |
| its value. |
| + |
| The improved policy has been seen to improve write performance in some use cases |
| by a factor of 2x relative to the old policy. |
| |
| * Kudu's implementation of the Raft consensus algorithm has been improved to include |
| a "pre-election" phase. This can improve the stability of tablet leader election |
| in high-load scenarios, especially if each server hosts a high number of tablets. |
| |
| * Tablet server start-up time has been substantially improved in the case that |
| the server contains a high number of tombstoned tablet replicas. |
| |
| === Command line tools |
| |
| * The tool `kudu tablet leader_step_down` has been added to manually force a leader to step down. |
| * The tool `kudu remote_replica copy` has been added to manually copy a replica from |
| one running tablet server to another. |
| * The tool `kudu local_replica delete` has been added to delete a replica of a tablet. |
| * The `kudu test loadgen` tool has been added to replace the obsoleted |
| `insert-generated-rows` standalone binary. The new tool is enriched with |
| additional functionality and can be used to run load generation tests against |
| a Kudu cluster. |
| |
| == Wire protocol compatibility |
| |
| Kudu 1.1.0 is wire-compatible with previous versions of Kudu: |
| |
| * Kudu 1.1 clients may connect to servers running Kudu 1.0. If the client uses the new |
| 'IN LIST' predicate type, an error will be returned. |
| * Kudu 1.0 clients may connect to servers running Kudu 1.1 without limitations. |
| * Rolling upgrade between Kudu 1.0 and Kudu 1.1 servers is believed to be possible |
| though has not been sufficiently tested. Users are encouraged to shut down all nodes |
| in the cluster, upgrade the software, and then restart the daemons on the new version. |
| |
| [[rn_1.1.0_incompatible_changes]] |
| == Incompatible changes in Kudu 1.1.0 |
| |
| === Client APIs ({cpp}/Java/Python) |
| |
| * The {cpp} client no longer requires the |
| link:https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html[old gcc5 ABI]. |
| Which ABI is actually used depends on the compiler configuration. Some new distros |
| (e.g. Ubuntu 16.04) will use the new ABI. Your application must use the same ABI as is |
| used by the client library; an easy way to guarantee this is to use the same compiler |
| to build both. |
| |
| * The {cpp} client's `KuduSession::CountBufferedOperations()` method is |
| deprecated. Its behavior is inconsistent unless the session runs in the |
| `MANUAL_FLUSH` mode. Instead, to get number of buffered operations, count |
| invocations of the `KuduSession::Apply()` method since last |
| `KuduSession::Flush()` call or, if using asynchronous flushing, since last |
| invocation of the callback passed into `KuduSession::FlushAsync()`. |
| |
| * The Java client's `OperationResponse.getWriteTimestamp` method was renamed to `getWriteTimestampRaw` |
| to emphasize that it doesn't return milliseconds, unlike what its Javadoc indicated. The renamed |
| method was also hidden from the public APIs and should not be used. |
| |
| * The Java client's sync API (`KuduClient`, `KuduSession`, `KuduScanner`) used to throw either |
| a `NonRecoverableException` or a `TimeoutException` for a timeout, and now it's only possible for the |
| client to throw the former. |
| |
| * The Java client's handling of errors in `KuduSession` was modified so that subclasses of |
| `KuduException` are converted into RowErrors instead of being thrown. |
| |
| [[rn_1.0.1]] |
| == Release notes specific to 1.0.1 |
| |
| Apache Kudu 1.0.1 is a bug fix release, with no new features or backwards |
| incompatible changes. |
| |
| [[rn_1.0.1_fixed_issues]] |
| === Fixed Issues |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1681[KUDU-1681] Fixed a bug in |
| the tablet server which could cause a crash when the DNS lookup during master |
| heartbeat failed. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1660[KUDU-1660]: Fixed a bug |
| which would cause the Kudu master and tablet server to fail to start on single |
| CPU systems. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1651[KUDU-1652]: Fixed a bug |
| that would cause the C++ client, tablet server, and Java client to crash or |
| throw an exception when attempting to scan a table with a predicate which |
| simplifies to `IS NOT NULL` on a non-nullable column. For instance, setting a |
| `<= 127` predicate on an `INT8` column could trigger this bug, since the |
| predicate only filters null values. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1651[KUDU-1651]: Fixed a bug |
| that would cause the tablet server to crash when evaluating a scan with |
| predicates over a dictionary encoded column containing an entire block of null |
| values. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1623[KUDU-1623]: Fixed a bug |
| that would cause the tablet server to crash when handling UPSERT operations |
| that only set values for the primary key columns. |
| |
| - link:http://gerrit.cloudera.org:8080/4488[Gerrit #4488] Fixed a bug in the |
| Java client's KuduException class which could cause an unexpected |
| NullPointerException to be thrown when the exception did not have an |
| associated message. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1090[KUDU-1090] Fixed a bug in |
| the memory tracker which could cause a rare crash during tablet server |
| startup. |
| |
| [[rn_1.0.0]] |
| == Release notes specific to 1.0.0 |
| |
| After approximately a year of beta releases, Apache Kudu has reached version 1.0. |
| This version number signifies that the development team feels that Kudu is stable |
| enough for usage in production environments. |
| |
| If you are new to Kudu, check out its list of link:index.html[features and benefits]. |
| |
| [[rn_1.0.0_new_features]] |
| === New features |
| |
| Kudu 1.0.0 delivers a number of new features, bug fixes, and optimizations. |
| |
| - Removal of multiversion concurrency control (MVCC) history is now supported. |
| This is known as tablet history GC. This allows Kudu to reclaim disk space, |
| where previously Kudu would keep a full history of all changes made to a |
| given table since the beginning of time. Previously, the only way to reclaim |
| disk space was to drop a table. |
| + |
| Kudu will still keep historical data, and the amount of history retained is |
| controlled by setting the configuration flag `--tablet_history_max_age_sec`, |
| which defaults to 15 minutes (expressed in seconds). The timestamp |
| represented by the current time minus `tablet_history_max_age_sec` is known |
| as the ancient history mark (AHM). When a compaction or flush occurs, Kudu |
| will remove the history of changes made prior to the ancient history mark. |
| This only affects historical data; currently-visible data will not be |
| removed. A specialized maintenance manager background task to remove existing |
| "cold" historical data that is not in a row affected by the normal compaction |
| process will be added in a future release. |
| |
| - Most of Kudu's command line tools have been consolidated under a new |
| top-level `kudu` tool. This reduces the number of large binaries distributed |
| with Kudu and also includes much-improved help output. |
| |
| - The Kudu Flume Sink now supports processing events containing Avro-encoded |
| records, using the new `AvroKuduOperationsProducer`. |
| |
| - Administrative tools including `kudu cluster ksck` now support running |
| against multi-master Kudu clusters. |
| |
| - The output of the `ksck` tool is now colorized and much easier to read. |
| |
| - The {cpp} client API now supports writing data in `AUTO_FLUSH_BACKGROUND` mode. |
| This can provide higher throughput for ingest workloads. |
| |
| === Optimizations and improvements |
| |
| - The performance of comparison predicates on dictionary-encoded columns has |
| been substantially optimized. Users are encouraged to use dictionary encoding |
| on any string or binary columns with low cardinality, especially if these |
| columns will be filtered with predicates. |
| |
| - The Java client is now able to prune partitions from scanners based on the |
| provided predicates. For example, an equality predicate on a hash-partitioned |
| column will now only access those tablets that could possibly contain matching |
| data. This is expected to improve performance for the Spark integration as well |
| as applications using the Java client API. |
| |
| - The performance of compaction selection in the tablet server has been |
| substantially improved. This can increase the efficiency of the background |
| maintenance threads and improve overall throughput of heavy write workloads. |
| |
| - The policy by which the tablet server retains write-ahead log (WAL) files has |
| been improved so that it takes into account other replicas of the tablet. |
| This should help mitigate the spurious eviction of tablet replicas on machines |
| that temporarily lag behind the other replicas. |
| |
| === Wire protocol compatibility |
| |
| Kudu 1.0.0 maintains client-server wire-compatibility with previous releases. |
| Applications using the Kudu client libraries may be upgraded either |
| before, at the same time, or after the Kudu servers. |
| |
| Kudu 1.0.0 does _not_ maintain server-server wire compatibility with previous |
| releases. Therefore, rolling upgrades between earlier versions of Kudu and |
| Kudu 1.0.0 are not supported. |
| |
| [[rn_1.0.0_incompatible_changes]] |
| === Incompatible changes in Kudu 1.0.0 |
| |
| ==== Command line tools |
| |
| - The `kudu-pbc-dump` tool has been removed. The same functionality is now |
| implemented as `kudu pbc dump`. |
| |
| - The `kudu-ksck` tool has been removed. The same functionality is now |
| implemented as `kudu cluster ksck`. |
| |
| - The `cfile-dump` tool has been removed. The same functionality is now |
| implemented as `kudu fs cfile dump`. |
| |
| - The `log-dump` tool has been removed. The same functionality is now |
| implemented as `kudu wal dump` and `kudu local_replica dump wals`. |
| |
| - The `kudu-admin` tool has been removed. The same functionality is now |
| implemented within `kudu table` and `kudu tablet`. |
| |
| - The `kudu-fs_dump` tool has been removed. The same functionality is now |
| implemented as `kudu fs dump`. |
| |
| - The `kudu-ts-cli` tool has been removed. The same functionality is now |
| implemented within `kudu master`, `kudu remote_replica`, and `kudu tserver`. |
| |
| - The `kudu-fs_list` tool has been removed and some similar useful |
| functionality has been moved under 'kudu local_replica'. |
| |
| ==== Configuration flags |
| |
| - Some configuration flags are now marked as 'unsafe' and 'experimental'. Such flags |
| are disallowed by default. Users may access these flags by enabling the additional |
| flags `--unlock_unsafe_flags` and `--unlock_experimental_flags`. Usage of such flags |
| is not recommended, as the flags may be removed or modified with no deprecation period |
| and without notice in future Kudu releases. |
| |
| ==== Client APIs ({cpp}/Java/Python) |
| |
| - The `TIMESTAMP` column type has been renamed to `UNIXTIME_MICROS` in order to |
| reduce confusion between Kudu's timestamp support and the timestamps supported |
| by other systems such as Apache Hive and Apache Impala (incubating). Existing |
| tables will automatically be updated to use the new name for the type. |
| + |
| Clients upgrading to the new client libraries must move to the new name for |
| the type. Clients using old client libraries will continue to operate using |
| the old type name, even when connected to clusters that have been |
| upgraded. Similarly, if clients are upgraded before servers, existing |
| timestamp columns will be available using the new type name. |
| |
| |
| - `KuduSession` methods in the {cpp} library are no longer advertised as thread-safe |
| to have one set of semantics for both {cpp} and Java Kudu client libraries. |
| |
| - The `KuduScanToken::TabletServers` method in the {cpp} library has been removed. |
| The same information can now be found in the KuduScanToken::tablet method. |
| |
| ==== Apache Flume Integration |
| |
| - The `KuduEventProducer` interface used to process Flume events into Kudu operations |
| for the Kudu Flume Sink has changed, and has been renamed `KuduOperationsProducer`. |
| The existing `KuduEventProducer`s have been updated for the new interface, and have |
| been renamed similarly. |
| |
| [[rn_0.10.0]] |
| == Release notes specific to 0.10.0 |
| |
| Kudu 0.10.0 delivers a number of new features, bug fixes, and optimizations, |
| detailed below. |
| |
| Kudu 0.10.0 maintains wire-compatibility with previous releases, meaning |
| that applications using the Kudu client libraries may be upgraded either |
| before, at the same time, or after the Kudu servers. However, if you begin |
| using new features of Kudu 0.10.0 such as manually range-partitioned tables, |
| you must first upgrade all clients to this release. |
| |
| This release does not maintain full Java API or ABI compatibility with |
| Kudu 0.9.x due to a package rename and some other small changes. See below for details. |
| |
| See also +++<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KUDU%20AND%20status%20%3D%20Resolved |
| %20AND%20fixVersion%20%3D%200.10.0">JIRAs resolved |
| for Kudu 0.10.0</a>+++ and +++<a href="https://github.com/apache/kudu/compare/0.9.1...0.10.0">Git |
| changes between 0.9.1 and 0.10.0</a>+++. |
| |
| [[rn_0.10.0_incompatible_changes]] |
| === Incompatible changes and deprecated APIs in 0.10.0 |
| |
| - link:http://gerrit.cloudera.org:8080/3737[Gerrit #3737] The Java client has been repackaged |
| under `org.apache.kudu` instead of `org.kududb`. Import statements for Kudu classes must |
| be modified in order to compile against 0.10.0. Wire compatibility is maintained. |
| |
| - link:https://gerrit.cloudera.org/#/c/3055/[Gerrit #3055] The Java client's |
| synchronous API methods now throw `KuduException` instead of `Exception`. |
| Existing code that catches `Exception` should still compile, but introspection of an |
| exception's message may be impacted. This change was made to allow thrown exceptions to be |
| queried more easily using `KuduException.getStatus` and calling one of `Status`'s methods. |
| For example, an operation that tries to delete a table that doesn't exist would return a |
| `Status` that returns true when queried on `isNotFound()`. |
| |
| - The Java client's `KuduTable.getTabletsLocations` set of methods is now |
| deprecated. Additionally, they now take an exclusive end partition key instead |
| of an inclusive key. Applications are encouraged to use the scan tokens API |
| instead of these methods in the future. |
| |
| - The C++ API for specifying split points on range-partitioned tables has been improved |
| to make it easier for callers to properly manage the ownership of the provided rows. |
| + |
| The `TableCreator::split_rows` API took a `vector<const KuduPartialRow*>`, which |
| made it very difficult for the calling application to do proper error handling with |
| cleanup when setting the fields of the `KuduPartialRow`. This API has been now been |
| deprecated and replaced by a new method `TableCreator::add_range_split` which allows |
| easier use of smart pointers for safe memory management. |
| |
| - The Java client's internal buffering has been reworked. Previously, the number of |
| buffered write operations was constrained on a per-tablet-server basis. Now, the configured |
| maximum buffer size constrains the total number of buffered operations across all |
| tablet servers in the cluster. This provides a more consistent bound on the memory |
| usage of the client regardless of the size of the cluster to which it is writing. |
| + |
| This change can negatively affect the write performance of Java clients which rely on |
| buffered writes. Consider using the `setMutationBufferSpace` API to increase a |
| session's maximum buffer size if write performance seems to be degraded after upgrading |
| to Kudu 0.10.0. |
| |
| - The "remote bootstrap" process used to copy a tablet replica from one host to |
| another has been renamed to "Tablet Copy". This resulted in the renaming of |
| several RPC metrics. Any users previously explicitly fetching or monitoring metrics |
| related to Remote Bootstrap should update their scripts to reflect the new names. |
| |
| - The SparkSQL datasource for Kudu no longer supports mode `Overwrite`. Users should |
| use the new `KuduContext.upsertRows` method instead. Additionally, inserts using the |
| datasource are now upserts by default. The older behavior can be restored by setting |
| the `operation` parameter to `insert`. |
| |
| [[rn_0.10.0_new_features]] |
| === New features |
| |
| - Users may now manually manage the partitioning of a range-partitioned table. |
| When a table is created, the user may specify a set of range partitions that |
| do not cover the entire available key space. A user may add or drop range |
| partitions to existing tables. |
| + |
| This feature can be particularly helpful with time series workloads in which |
| new partitions can be created on an hourly or daily basis. Old partitions |
| may be efficiently dropped if the application does not need to retain historical |
| data past a certain point. |
| + |
| This feature is considered experimental for the 0.10 release. More details of |
| the new feature can be found in the accompanying |
| link:https://kudu.apache.org/2016/08/23/new-range-partitioning-features.html[blog post]. |
| |
| - Support for running Kudu clusters with multiple masters has been stabilized. |
| Users may start a cluster with three or five masters to provide fault tolerance |
| despite a failure of one or two masters, respectively. |
| + |
| Note that certain tools (e.g. `ksck`) are still lacking complete support for |
| multiple masters. These deficiencies will be addressed in a following release. |
| |
| - Kudu now supports the ability to reserve a certain amount of free disk space |
| in each of its configured data directories. If a directory's free disk space |
| drops to less than the configured minimum, Kudu will stop writing to that |
| directory until space becomes available. If no space is available in any |
| configured directory, Kudu will abort. |
| + |
| This feature may be configured using the `fs_data_dirs_reserved_bytes` and |
| `fs_wal_dir_reserved_bytes` flags. |
| |
| - The Spark integration's `KuduContext` now supports four new methods for writing to |
| Kudu tables: `insertRows`, `upsertRows`, `updateRows`, and `deleteRows`. These are |
| now the preferred way to write to Kudu tables from Spark. |
| |
| [[rn_0.10.0_improvements]] |
| === Improvements and optimizations |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1516[KUDU-1516] The `kudu-ksck` tool |
| has been improved and now detects problems such as when a tablet does not have |
| a majority of replicas on live tablet servers, or if those replicas aren’t in a |
| good state. Users who currently depend on the tool to detect inconsistencies may now see |
| failures when before they wouldn't see any. |
| |
| - link:https://gerrit.cloudera.org:8080/3477[Gerrit #3477] The way operations are buffered in |
| the Java client has been reworked. Previously, the session's buffer size was set per tablet, meaning that a buffer |
| size of 1,000 for 10 tablets being written to allowed for 10,000 operations to be buffered at the |
| same time. With this change, all the tablets share one buffer, so users might need to set a |
| bigger buffer size in order to reach the same level of performance as before. |
| |
| - link:https://gerrit.cloudera.org/#/c/3674/[Gerrit #3674] Added LESS and GREATER options for |
| column predicates. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1444[KUDU-1444] added support for passing |
| back basic per-scan metrics (e.g cache hit rate) from the server to the C++ client. See the |
| `KuduScanner::GetResourceMetrics()` API for detailed usage. This feature will be supported |
| in the Java client API in a future release. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1446[KUDU-1446] improved the order in |
| which the tablet server evaluates predicates, so that predicates on smaller columns |
| are evaluated first. This may improve performance on queries which apply predicates |
| on multiple columns of different sizes. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1398[KUDU-1398] improved the storage |
| efficiency of Kudu's internal primary key indexes. This optimization should decrease space |
| usage and improve random access performance, particularly for workloads with lengthy |
| primary keys. |
| |
| [[rn_0.10.0_fixed_issues]] |
| === Fixed Issues |
| |
| - link:https://gerrit.cloudera.org/#/c/3541/[Gerrit #3541] Fixed a problem in the Java client |
| whereby an RPC could be dropped when a connection to a tablet server or master was forcefully |
| closed on the server-side while RPCs to that server were in the process of being encoded. |
| The effect was that the RPC would not be sent, and users of the synchronous API would receive |
| a `TimeoutException`. Several other Java client bugs which could cause similar spurious timeouts |
| were also fixed in this release. |
| |
| - link:https://gerrit.cloudera.org/#/c/3724/[Gerrit #3724] Fixed a problem in the Java client |
| whereby an RPC could be dropped when a socket timeout was fired while that RPC was being sent to |
| a tablet server or master. This would manifest itself in the same way |
| link:https://gerrit.cloudera.org/#/c/3541/[Gerrit #3541]. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1538[KUDU-1538] fixed a bug in which recycled |
| block identifiers could cause the tablet server to lose data. Following this bug fix, block |
| identifiers will no longer be reused. |
| |
| [[rn_0.10.0_changes]] |
| === Other noteworthy changes |
| |
| - This is the first release of Apache Kudu as a top-level (non-incubating) |
| project! |
| |
| - The default false positive rate for Bloom filters has been changed |
| from 1% to 0.01%. This will increase the space consumption of Bloom |
| filters by a factor of two (from approximately 10 bits per row to |
| approximately 20 bits per row). This is expected to substantially |
| improve the performance of random-write workloads at the cost of an |
| incremental increase in disk space usage. |
| |
| - The Kudu C++ client library now has Doxygen-based |
| link:http://kudu.apache.org/cpp-client-api/[API documentation] |
| available online. |
| |
| - Kudu now |
| link:http://kudu.apache.org/2016/06/17/raft-consensus-single-node.html[ |
| uses the Raft consensus algorithm even for unreplicated tables]. |
| This change simplifies code and will also allow administrators to enable |
| replication on a previously-unreplicated table. This change is internal and |
| should not be visible to users. |
| |
| [[rn_0.9.1]] |
| == Release notes specific to 0.9.1 |
| |
| Kudu 0.9.1 delivers incremental bug fixes over Kudu 0.9.0. It is fully compatible with |
| Kudu 0.9.0. |
| |
| See also +++<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KUDU%20AND%20status%20%3D%20Resolved |
| %20AND%20fixVersion%20%3D%200.9.1">JIRAs resolved |
| for Kudu 0.9.1</a>+++ and +++<a href="https://github.com/apache/kudu/compare/0.9.0...0.9.1">Git |
| changes between 0.9.0 and 0.9.1</a>+++. |
| |
| [[rn_0.9.1_fixed_issues]] |
| === Fixed Issues |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1469[KUDU-1469] fixed a bug in |
| our Raft consensus implementation that could cause a tablet to stop making progress after a leader |
| election. |
| |
| - link:https://gerrit.cloudera.org/#/c/3456/[Gerrit #3456] fixed a bug in which |
| servers under high load could store metric information in incorrect memory |
| locations, causing crashes or data corruption. |
| |
| - link:https://gerrit.cloudera.org/#/c/3457/[Gerrit #3457] fixed a bug in which |
| errors from the Java client would carry an incorrect error message. |
| |
| - Several other small bug fixes were backported to improve stability. |
| |
| [[rn_0.9.0]] |
| == Release notes specific to 0.9.0 |
| |
| Kudu 0.9.0 delivers incremental features, improvements, and bug fixes over the previous versions. |
| |
| See also +++<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KUDU%20AND%20status%20%3D%20Resolved |
| %20AND%20fixVersion%20%3D%200.9.0">JIRAs resolved |
| for Kudu 0.9.0</a>+++ and +++<a href="https://github.com/apache/kudu/compare/0.8.0...0.9.0">Git |
| changes between 0.8.0 and 0.9.0</a>+++. |
| |
| [[rn_0.9.0_incompatible_changes]] |
| === Incompatible changes |
| |
| - The `KuduTableInputFormat` command has changed the way in which it handles |
| scan predicates, including how it serializes predicates to the job configuration |
| object. The new configuration key is `kudu.mapreduce.encoded.predicate`. Clients |
| using the `TableInputFormatConfigurator` are not affected. |
| |
| - The `kudu-spark` sub-project has been renamed to follow naming conventions for |
| Scala. The new name is `kudu-spark_2.10`. |
| |
| - Default table partitioning has been removed. All tables must now be created |
| with explicit partitioning. Existing tables are unaffected. See the |
| <<schema_design.adoc#no_default_partitioning,schema design guide>> for more |
| details. |
| |
| [[rn_0.9.0_new_features]] |
| === New features |
| - link:https://issues.apache.org/jira/browse/KUDU-1002[KUDU-1002] Added support for |
| `UPSERT` operations, whereby a row is inserted if it does not already exist, but |
| updated if it does. Support for `UPSERT` is included in Java, C++, and Python APIs, |
| but not in Impala. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1306[KUDU-1306] Scan token API |
| for creating partition-aware scan descriptors. This API simplifies executing |
| parallel scans for clients and query engines. |
| |
| - link:http://gerrit.cloudera.org:8080/#/c/2848/[Gerrit 2848] Added a kudu datasource |
| for Spark. This datasource uses the Kudu client directly instead of |
| using the MapReduce API. Predicate pushdowns for `spark-sql` and Spark filters are |
| included, as well as parallel retrieval for multiple tablets and column projections. |
| See an example of link:developing.html#_kudu_integration_with_spark[Kudu integration with Spark]. |
| |
| - link:http://gerrit.cloudera.org:8080/#/c/2992/[Gerrit 2992] Added the ability |
| to update and insert from Spark using a Kudu datasource. |
| |
| [[rn_0.9.0_improvements]] |
| === Improvements |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1415[KUDU-1415] Added statistics in the Java |
| client such as the number of bytes written and the number of operations applied. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1451[KUDU-1451] Improved tablet server restart |
| time when the tablet server needs to clean up of a lot previously deleted tablets. Tablets are |
| now cleaned up after they are deleted. |
| |
| [[rn_0.9.0_fixed_issues]] |
| === Fixed Issues |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-678[KUDU-678] Fixed a leak that happened during |
| DiskRowSet compactions where tiny blocks were still written to disk even if there were no REDO |
| records. With the default block manager, it usually resulted in block containers with thousands |
| of tiny blocks. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1437[KUDU-1437] Fixed a data corruption issue |
| that occured after compacting sequences of negative INT32 values in a column that |
| was configured with RLE encoding. |
| |
| [[rn_0.9.0_changes]] |
| === Other noteworthy changes |
| |
| All Kudu clients have longer default timeout values, as listed below. |
| |
| .Java |
| - The default operation timeout and the default admin operation timeout |
| are now set to 30 seconds instead of 10. |
| - The default socket read timeout is now 10 seconds instead of 5. |
| |
| .C++ |
| - The default admin timeout is now 30 seconds instead of 10. |
| - The default RPC timeout is now 10 seconds instead of 5. |
| - The default scan timeout is now 30 seconds instead of 15. |
| |
| - Some default settings related to I/O behavior during flushes and compactions have been changed: |
| The default for `flush_threshold_mb` has been increased from 64MB to 1000MB. The default |
| `cfile_do_on_finish` has been changed from `close` to `flush`. |
| link:http://getkudu.io/2016/04/26/ycsb.html[Experiments using YCSB] indicate that these |
| values will provide better throughput for write-heavy applications on typical server hardware. |
| |
| |
| [[rn_0.8.0]] |
| == Release notes specific to 0.8.0 |
| |
| Kudu 0.8.0 delivers incremental features, improvements, and bug fixes over the previous versions. |
| |
| See also +++<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KUDU%20AND%20status%20%3D%20Resolved |
| %20AND%20fixVersion%20%3D%200.8.0">JIRAs resolved |
| for Kudu 0.8.0</a>+++ and +++<a href="https://github.com/apache/kudu/compare/0.7.1...0.8.0">Git |
| changes between 0.7.1 and 0.8.0</a>+++. |
| |
| To upgrade to Kudu 0.8.0, see link:installation.html#upgrade[Upgrade from 0.7.1 to 0.8.0]. |
| |
| [[rn_0.8.0_incompatible_changes]] |
| === Incompatible changes |
| |
| - 0.8.0 clients are not fully compatible with servers running Kudu 0.7.1 or lower. |
| In particular, scans that specify column predicates will fail. To work around this |
| issue, upgrade all Kudu servers before upgrading clients. |
| |
| [[rn_0.8.0_new_features]] |
| === New features |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-431[KUDU-431] A simple Flume |
| sink has been implemented. |
| |
| [[rn_0.8.0_improvements]] |
| === Improvements |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-839[KUDU-839] Java RowError now uses an enum error code. |
| |
| - link:http://gerrit.cloudera.org:8080/#/c/2138/[Gerrit 2138] The handling of |
| column predicates has been re-implemented in the server and clients. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1379[KUDU-1379] Partition pruning |
| has been implemented for C++ clients (but not yet for the Java client). This feature |
| allows you to avoid reading a tablet if you know it does not serve the row keys you are querying. |
| |
| - link:http://gerrit.cloudera.org:8080/#/c/2641[Gerrit 2641] Kudu now uses |
| `earliest-deadline-first` RPC scheduling and rejection. This changes the behavior |
| of the RPC service queue to prevent unfairness when processing a backlog of RPC |
| threads and to increase the likelihood that an RPC will be processed before it |
| can time out. |
| |
| |
| [[rn_0.8.0_fixed_issues]] |
| === Fixed Issues |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1337[KUDU-1337] Tablets from tables |
| that were deleted might be unnecessarily re-bootstrapped when the leader gets the |
| notification to delete itself after the replicas do. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-969[KUDU-969] If a tablet server |
| shuts down while compacting a rowset and receiving updates for it, it might immediately |
| crash upon restart while bootstrapping that rowset's tablet. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1354[KUDU-1354] Due to a bug in Kudu's |
| MVCC implementation where row locks were released before the MVCC commit happened, |
| flushed data would include out-of-order transactions, triggering a crash on the |
| next compaction. |
| |
| - link:https://issues.apache.org/jira/browse/KUDU-1322[KUDU-1322] The C++ client |
| now retries write operations if the tablet it is trying to reach has already been |
| deleted. |
| |
| - link:http://gerrit.cloudera.org:8080/#/c/2571/[Gerrit 2571] Due to a bug in the |
| Java client, users were unable to close the `kudu-spark` shell because of |
| lingering non-daemon threads. |
| |
| [[rn_0.8.0_changes]] |
| === Other noteworthy changes |
| |
| - link:http://gerrit.cloudera.org:8080/#/c/2239/[Gerrit 2239] The concept of "feature flags" |
| was introduced in order to manage compatibility between different |
| Kudu versions. One case where this is helpful is if a newer client attempts to use |
| a feature unsupported by the currently-running tablet server. Rather than receiving |
| a cryptic error, the user gets an error message that is easier to interpret. |
| This is an internal change for Kudu system developers and requires no action by |
| users of the clients or API. |
| |
| [[rn_0.7.1]] |
| == Release notes specific to 0.7.1 |
| |
| Kudu 0.7.1 is a bug fix release for 0.7.0. |
| |
| [[rn_0.7.1_fixed_issues]] |
| |
| === Fixed Issues |
| |
| - https://issues.apache.org/jira/browse/KUDU-1325[KUDU-1325] fixes a tablet server crash that could |
| occur during table deletion. In some cases, while a table was being deleted, other replicas would |
| attempt to re-replicate tablets to servers that had already processed the deletion. This could |
| trigger a race condition that caused a crash. |
| |
| - https://issues.apache.org/jira/browse/KUDU-1341[KUDU-1341] fixes a potential data corruption and |
| crash that could happen shortly after tablet server restarts in workloads that repeatedly delete |
| and re-insert rows with the same primary key. In most cases, this corruption affected only a single |
| replica and could be repaired by re-replicating from another. |
| |
| - https://issues.apache.org/jira/browse/KUDU-1343[KUDU-1343] fixes a bug in the Java client that |
| occurs when a scanner has to scan multiple batches from one tablet and then start scanning from |
| another. In particular, this would affect any scans using the Java client that read large numbers |
| of rows from multi-tablet tables. |
| |
| - https://issues.apache.org/jira/browse/KUDU-1345[KUDU-1345] fixes a bug where in some cases the |
| hybrid clock could jump backwards, resulting in a crash followed by an inability to |
| restart the affected tablet server. |
| |
| - https://issues.apache.org/jira/browse/KUDU-1360[KUDU-1360] fixes a bug in the kudu-spark module |
| which prevented reading rows with `NULL` values. |
| |
| [[rn_0.7.0]] |
| == Release notes specific to 0.7.0 |
| |
| Kudu 0.7.0 is the first release done as part of the Apache Incubator and includes a number |
| of changes, new features, improvements, and fixes. |
| |
| See also +++<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KUDU%20AND%20status%20in%20 |
| (Resolved)%20AND%20fixVersion%20%3D%200.7.0%20ORDER%20BY%20key%20ASC">JIRAs resolved |
| for Kudu 0.7.0</a>+++ and +++<a href="https://github.com/apache/kudu/compare/branch-0.6.0...branch-0.7.0">Git |
| changes between 0.6.0 and 0.7.0</a>+++. |
| |
| The upgrade instructions can be found at link:installation.html#upgrade[Upgrade from 0.6.0 to 0.7.0]. |
| |
| [[rn_0.7.0_incompatible_changes]] |
| === Incompatible changes |
| |
| - The C++ client includes a new API, `KuduScanBatch`, which performs better when a |
| large number of small rows are returned in a batch. The old API of `vector<KuduRowResult>` |
| is deprecated. |
| + |
| NOTE: This change is API-compatible but *not* ABI-compatible. |
| |
| - The default replication factor has been changed from 1 to 3. Existing tables will |
| continue to use the replication factor they were created with. Applications that create |
| tables may not work properly if they assume a replication factor of 1 and fewer than |
| 3 replicas are available. To use the previous default replication factor, start the |
| master with the configuration flag `--default_num_replicas=1`. |
| |
| - The Python client has been completely rewritten, with a focus on improving code |
| quality and testing. The read path (scanners) has been improved by adding many of |
| the features already supported by the C++ and Java clients. The Python client is no |
| longer considered experimental. |
| |
| [[rn_0.7.0_new_features]] |
| === New features |
| |
| - With the goal of Spark integration in mind, a new `kuduRDD` API has been added, |
| which wraps `newAPIHadoopRDD` and includes a default source for Spark SQL. |
| |
| [[rn_0.7.0_improvements]] |
| === Improvements |
| |
| - The Java client includes new methods `countPendingErrors()` and |
| `getPendingErrors()` on `KuduSession`. These methods allow you to count and |
| retrieve outstanding row errors when configuring sessions with `AUTO_FLUSH_BACKGROUND`. |
| |
| - New server-level metrics allow you to monitor CPU usage and context switching. |
| |
| - Kudu now builds on RHEL 7, CentOS 7, and SLES 12. Extra instructions are included |
| for SLES 12. |
| |
| |
| [[rn_0.7.0_fixed_issues]] |
| === Fixed Issues |
| |
| - https://issues.apache.org/jira/browse/KUDU-1288[KUDU-1288] fixes a severe file descriptor |
| leak, which could previously only be resolved by restarting the tablet server. |
| |
| - https://issues.apache.org/jira/browse/KUDU-1250[KUDU-1250] fixes a hang in the Java |
| client when processing an in-flight batch and the previous batch encountered an error. |
| |
| [[rn_0.7.0_changes]] |
| === Other noteworthy changes |
| |
| - The file block manager's performance was improved, but it is still not recommended for |
| real-world use. |
| |
| - The master now attempts to spread tablets more evenly across the cluster during |
| table creation. This has no impact on existing tables, but will improve the speed |
| at which under-replicated tablets are re-replicated after a tablet server failure. |
| |
| - All licensing documents have been modified to adhere to ASF guidelines. |
| |
| - Kudu now requires an out-of-tree build directory. Review the build instructions |
| for additional information. |
| |
| - The `C++` client library is now explicitly built against the |
| link:https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html[old gcc5 ABI]. |
| If you use gcc5 to build a Kudu application, your application must use the old ABI |
| as well. This is typically achieved by defining the `_GLIBCXX_USE_CXX11_ABI` macro |
| at compile-time when building your application. For more information, see the |
| previous link and link:http://developerblog.redhat.com/2015/02/05/gcc5-and-the-c11-abi/. |
| |
| - The Python client is no longer considered experimental. |
| |
| |
| [[rn_0.6.0]] |
| == Release notes specific to 0.6.0 |
| |
| The 0.6.0 release contains incremental improvements and bug fixes. The most notable |
| changes are: |
| |
| - The Java client's CreateTableBuilder and AlterTableBuilder classes have been renamed |
| to CreateTableOptions and AlterTableOptions. Their methods now also return `this` objects, |
| allowing them to be used as builders. |
| - The Java client's AbstractKuduScannerBuilder#maxNumBytes() setter is now called |
| batchSizeBytes as is the corresponding property in AsyncKuduScanner. This makes it |
| consistent with the C++ client. |
| - The "kudu-admin" tool can now list and delete tables via its new subcommands |
| "list_tables" and "delete_table <table_name>". |
| - OSX is now supported for single-host development. Please consult its specific installation |
| instructions in link:installation.html#osx_from_source[OS X]. |
| |
| |
| [[rn_0.5.0]] |
| == Release Notes Specific to 0.5.0 |
| |
| Kudu 0.5.0 was the first public release. As such, no improvements or changes were |
| noted in its release notes. |