blob: 9de1e2b4862584954a98549e6553912cd9de4bd5 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="A new open source Apache Hadoop ecosystem project, Apache Kudu completes Hadoop's storage layer to enable fast analytics on fast data" />
<meta name="author" content="Cloudera" />
<title>Apache Kudu - Apache Kudu 1.17.0 Release Notes</title>
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="/css/kudu.css" rel="stylesheet"/>
<link href="/css/asciidoc.css" rel="stylesheet"/>
<link rel="shortcut icon" href="/img/logo-favicon.ico" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" />
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="kudu-site container-fluid">
<!-- Static navbar -->
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="logo" href="/"><img
src="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png"
srcset="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png 1x, //d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_160px.png 2x"
alt="Apache Kudu"/></a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li >
<a href="/">Home</a>
</li>
<li >
<a href="/overview.html">Overview</a>
</li>
<li class="active">
<a href="/docs/">Documentation</a>
</li>
<li >
<a href="/releases/">Releases</a>
</li>
<li >
<a href="/blog/">Blog</a>
</li>
<!-- NOTE: this dropdown menu does not appear on Mobile, so don't add anything here
that doesn't also appear elsewhere on the site. -->
<li class="dropdown">
<a href="/community.html" role="button" aria-haspopup="true" aria-expanded="false">Community <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="dropdown-header">GET IN TOUCH</li>
<li><a class="icon email" href="/community.html">Mailing Lists</a></li>
<li><a class="icon slack" href="https://join.slack.com/t/getkudu/shared_invite/zt-244b4zvki-hB1q9IbAk6CqHNMZHvUALA">Slack Channel</a></li>
<li role="separator" class="divider"></li>
<li><a href="/community.html#meetups-user-groups-and-conference-presentations">Events and Meetups</a></li>
<li><a href="/committers.html">Project Committers</a></li>
<li><a href="/ecosystem.html">Ecosystem</a></li>
<!--<li><a href="/roadmap.html">Roadmap</a></li>-->
<li><a href="/community.html#contributions">How to Contribute</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">DEVELOPER RESOURCES</li>
<li><a class="icon github" href="https://github.com/apache/incubator-kudu">GitHub</a></li>
<li><a class="icon gerrit" href="http://gerrit.cloudera.org:8080/#/q/status:open+project:kudu">Gerrit Code Review</a></li>
<li><a class="icon jira" href="https://issues.apache.org/jira/browse/KUDU">JIRA Issue Tracker</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">SOCIAL MEDIA</li>
<li><a class="icon twitter" href="https://twitter.com/ApacheKudu">Twitter</a></li>
<li><a href="https://www.reddit.com/r/kudu/">Reddit</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">APACHE SOFTWARE FOUNDATION</li>
<li><a href="https://www.apache.org/security/" target="_blank">Security</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a></li>
<li><a href="https://www.apache.org/licenses/" target="_blank">License</a></li>
</ul>
</li>
<li >
<a href="/faq.html">FAQ</a>
</li>
</ul><!-- /.nav -->
</div><!-- /#navbar -->
</div><!-- /.container-fluid -->
</nav>
<!--
Licensed 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.
-->
<div class="container">
<div class="row">
<div class="col-md-9">
<h1>Apache Kudu 1.17.0 Release Notes</h1>
<div class="sect1">
<h2 id="rn_1.17.0_upgrade_notes"><a class="link" href="#rn_1.17.0_upgrade_notes">Upgrade Notes</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>TLSv1.2 is the minimum TLS protocol version that newer Kudu clients are able to use for secure
Kudu RPC. The newer clients are not able to communicate with servers built and run with OpenSSL of
versions prior to 1.0.1. If such a Kudu cluster is running on a deprecated OS versions
(e.g., RHEL/CentOS 6.4), the following options are available to work around the incompatibility:</p>
<div class="ulist">
<ul>
<li>
<p>use Kudu clients of 1.14 or earlier versions to communicate with such cluster</p>
</li>
<li>
<p>disable RPC encryption and authentication for Kudu RPC, setting <code>--rpc_authentication=disabled</code>
and <code>--rpc_encryption=disabled</code> for all masters and tablet servers in the cluster to allow the new
client to work with the old cluster</p>
</li>
</ul>
</div>
</li>
<li>
<p>TLSv1.2 is the minimum TLS protocol version that newer Kudu servers are able to use for secure
Kudu RPC. The newer servers are not able to communicate using secure Kudu RPC with Kudu C++ client
applications linked with libkudu_client library built against OpenSSL of versions prior to 1.0.1 or
with Java client applications run with outdated Java runtime that doesn&#8217;t support TLSv1.2. The
following options are available to work around this incompatibility:</p>
<div class="ulist">
<ul>
<li>
<p>customize settings for the <code>--rpc_tls_min_protocol</code> and <code>--rpc_tls_ciphers</code> flags on all masters
and tablet servers in the cluster, setting <code>--rpc_tls_min_protocol=TLSv1</code> and adding TLSv1-capable
cipher suites (e.g. AES128-SHA and AES256-SHA) into the list</p>
</li>
<li>
<p>disable RPC encryption and authentication for Kudu RPC, setting <code>--rpc_authentication=disabled</code>
and <code>--rpc_encryption=disabled</code> for all masters and tablet servers in the cluster to allow such Kudu
clients to work with newer clusters</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_obsoletions"><a class="link" href="#rn_1.17.0_obsoletions">Obsoletions</a></h2>
<div class="sectionbody">
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_deprecations"><a class="link" href="#rn_1.17.0_deprecations">Deprecations</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Support for Python 2.x and Python 3.4 and earlier is deprecated and may be removed in the next minor
release.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_new_features"><a class="link" href="#rn_1.17.0_new_features">New features</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Kudu now supports encrypting data at rest. Kudu supports <code>AES-128-CTR</code>, <code>AES-192-CTR</code>, and
<code>AES-256-CTR</code> ciphers to encrypt data, supports Apache Ranger KMS and Apache Hadoop KMS. See
<a href="https://kudu.apache.org/docs/security.html#<em>data_at_rest</em>">Data at rest</a> for more details.</p>
</li>
<li>
<p>Kudu now supports range-specific hash schemas for tables. It&#8217;s now possible to add ranges with
their own unique hash schema independent of the table-wide hash schema. This can be done at table
creation time and while altering the table. It’s controlled by the <code>--enable_per_range_hash_schemas</code>
master flag which is enabled by default (see
<a href="https://issues.apache.org/jira/browse/KUDU-2671">KUDU-2671</a>).</p>
</li>
<li>
<p>Kudu now supports soft-deleted tables. Kudu keeps a soft-deleted table aside for a period of time
(a.k.a. reservation), not purging the data yet. The table can be restored/recalled back before its
reservation expires. The reservation period can be customized via Kudu client API upon
soft-deleting the table. The default reservation period is controlled by the
<code>--default_deleted_table_reserve_seconds</code> master&#8217;s flag.
NOTE: As of Kudu 1.17 release, the soft-delete functionality is not supported when HMS integration
is enabled, but this should be addressed in a future release (see
<a href="https://issues.apache.org/jira/browse/KUDU-3326">KUDU-3326</a>).</p>
</li>
<li>
<p>Introduced <code>Auto-Incrementing</code> column. An auto-incrementing column is populated on the server side
with a monotonically increasing counter. The counter is local to every tablet, i.e. each tablet has
a separate auto incrementing counter (see
<a href="https://issues.apache.org/jira/browse/KUDU-1945">KUDU-1945</a>).</p>
</li>
<li>
<p>Kudu now supports experimental non-unique primary key. When a table with non-unique primary key is
created, an <code>Auto-Incrementing</code> column named <code>auto_incrementing_id</code> is added automatically to the
table as the key column. The non-unique key columns and the <code>Auto-Incrementing</code> column together form
the effective primary key (see <a href="https://issues.apache.org/jira/browse/KUDU-1945">KUDU-1945</a>).</p>
</li>
<li>
<p>Introduced <code>Immutable</code> column. It&#8217;s useful to represent a semantically constant entity (see
<a href="https://issues.apache.org/jira/browse/KUDU-3353">KUDU-3353</a>).</p>
</li>
<li>
<p>An experimental feature is added to Kudu that allows it to automatically rebalance tablet leader
replicas among tablet servers. The background task can be enabled by setting the
<code>--auto_leader_rebalancing_enabled</code> flag on the Kudu masters. By default, the flag is set to 'false'
(see <a href="https://issues.apache.org/jira/browse/KUDU-3390">KUDU-3390</a>).</p>
</li>
<li>
<p>Introduced an experimental feature: authentication of Kudu client applications to Kudu servers
using JSON Web Tokens (JWT). The JWT-based authentication can be used as an alternative to Kerberos
authentication for Kudu applications running at edge nodes where configuring Kerberos might be
cumbersome. Similar to Kerberos credentials, a JWT is considered a primary client&#8217;s credentials.
The server-side capability of JWT-based authentication is controlled by the
<code>--enable_jwt_token_auth</code> flag (set 'false' by default). When the flat set to 'true', a Kudu server
is capable of authenticating Kudu clients using the JWT provided by the client during RPC connection
negotiation. From its side, a Kudu client authenticates a Kudu server by verifying its TLS
certificate. For the latter to succeed, the client should use Kudu client API to add the cluster&#8217;s
IPKI CA certificate into the list of trusted certificates.</p>
</li>
<li>
<p>The C++ client scan token builder can now create multiple tokens per tablet. So, it&#8217;s now possible
to dynamically scale the set of readers/scanners fetching data from a Kudu table in parallel. To use
this functionality, use the newly introduced <code>SetSplitSizeBytes()</code> method of the Kudu client API to
specify how many bytes of data each token should scan
(see <a href="https://issues.apache.org/jira/browse/KUDU-3393">KUDU-3393</a>).</p>
</li>
<li>
<p>Kudu&#8217;s default replica placement algorithm is now range and table aware to prevent hotspotting
unlike the old power of two choices algorithm. New replicas from the same range are spread evenly
across available tablet servers, the table the range belongs to is used as a tiebreaker (see
<a href="https://issues.apache.org/jira/browse/KUDU-3476">KUDU-3476</a>).</p>
</li>
<li>
<p>Statistics on various write operations is now available via Kudu client API at the session level
(see <a href="https://issues.apache.org/jira/browse/KUDU-3351">KUDU-3351</a>,
<a href="https://issues.apache.org/jira/browse/KUDU-3365">KUDU-3365</a>).</p>
</li>
<li>
<p>Kudu now exposes all its metrics except for string gauges in Prometheus format via the embedded
webserver&#8217;s <code>/metrics_prometheus</code> endpoint (see
<a href="https://issues.apache.org/jira/browse/KUDU-3375">KUDU-3375</a>).</p>
</li>
<li>
<p>It’s now possible to deploy Kudu clusters in an internal network (e.g. in K8S environment) and
avoid internal traffic (i.e. tservers and masters) using advertised addresses and allow Kudu clients
running in external networks. This can be achieved by customizing the setting for the newly
introduced <code>--rpc_proxy_advertised_addresses</code> and <code>--rpc_proxied_addresses</code> server flags. This might
be useful in various scenarios where Kudu cluster is running in an internal network behind a
firewall, but Kudu clients are running at the other side of the firewall using JWT to authenticate
to Kudu servers, and the RPC traffic between to the Kudu cluster is forwarded through a TCP/SOCKS
proxy (see <a href="https://issues.apache.org/jira/browse/KUDU-3357">KUDU-3357</a>).</p>
</li>
<li>
<p>It’s now possible to clean up metadata for deleted tables/tablets from Kudu master&#8217;s in-memory map
and the <code>sys.catalog</code> table. This is useful in reducing the memory consumption and bootstrap time
for masters. This can be achieved by customizing the setting for the newly introduced
<code>--enable_metadata_cleanup_for_deleted_tables_and_tablets</code> and
<code>--metadata_for_deleted_table_and_tablet_reserved_secs</code> kudu-master’s flags.</p>
</li>
<li>
<p>It’s now possible to perform range rebalancing for a single table per run in the <code>kudu cluster
rebalance</code> CLI tool by setting the newly introduced <code>--enable_range_rebalancing</code> tool flag. This is
useful to address various hot-spotting issues when too many tablet replicas from the same range (but
different hash buckets) were placed at the same tablet server. The hot-spotting issue in tablet
replica placement should be address in a follow-up releases, see
<a href="https://issues.apache.org/jira/browse/KUDU-3476">KUDU-3476</a> for details.</p>
</li>
<li>
<p>It’s now possible to compact log container metadata files at runtime. This is useful in
reclaiming the disk space once the container becomes full. This feature can be turned on/off by
customizing the setting for the newly introduced <code>--log_container_metadata_runtime_compact</code>
kudu-tserver flag (see <a href="https://issues.apache.org/jira/browse/KUDU-3318">KUDU-3318</a>).</p>
</li>
<li>
<p>New CLI tools <code>kudu master/tserver set_flag_for_all</code> are added to update flags for all masters and
tablet servers in a Kudu cluster at once.</p>
</li>
<li>
<p>A new CLI tool <code>kudu local_replica copy_from_local</code> is added to copy tablet replicas' data at the
filesystem level. It can be used when adding disks and for quick rebalancing of data between disks,
or can be used when migrating data from one data directory to the other. It will make data more
dense than data on old data directories too.</p>
</li>
<li>
<p>A new CLI tool <code>kudu diagnose parse_metrics</code> is added to parse metrics out of diagnostic logs (see
<a href="https://issues.apache.org/jira/browse/KUDU-2353">KUDU-2353</a>).</p>
</li>
<li>
<p>A new CLI tool <code>kudu local_replica tmeta delete_rowsets</code> is added to delete rowsets from the
tablet.</p>
</li>
<li>
<p>A sanity check has been added to detect wall clock jumps, it is controlled by the newly introduced
<code>--wall_clock_jump_detection</code> and <code>--wall_clock_jump_threshold_sec</code> flags. That should help to
address issues reported in <a href="https://issues.apache.org/jira/browse/KUDU-2906">KUDU-2906</a>.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_improvements"><a class="link" href="#rn_1.17.0_improvements">Optimizations and improvements</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Reduce the memory consumption if there are frequent alter schema operations for tablet servers
(see <a href="https://issues.apache.org/jira/browse/KUDU-3197">KUDU-3197</a>).</p>
</li>
<li>
<p>Reduce the memory consumption by implementing memory budgeting for performing RowSet merge
compactions (i.e. CompactRowSetsOp maintenance operations). Several flags have been introduced,
while the <code>--rowset_compaction_memory_estimate_enabled</code> flag indicates whether to check for
available memory necessary to run CompactRowSetsOp maintenance operations (see
<a href="https://issues.apache.org/jira/browse/KUDU-3406">KUDU-3406</a>).</p>
</li>
<li>
<p>Optimized evaluating in-list predicates based on RowSet PK bounds. A tablet server can now
effectively skip rows when the predicate is on a non-prefix part of the primary key and the leading
columns' cardinality is 1 (see <a href="https://issues.apache.org/jira/browse/KUDU-1644">KUDU-1644</a>).</p>
</li>
<li>
<p>Speed up CLI tool <code>kudu cluster rebalance</code> to run intra-location rebalancing in parallel for
location-aware Kudu cluster. Theoretically, running intra-location rebalancing in parallel might
shorten the runtime by N times compared with running sequentially, where N is the number of
locations in a Kudu cluster. This can be achieved by customizing the setting for the newly
introduced <code>--intra_location_rebalancing_concurrency</code> flag.</p>
</li>
<li>
<p>Two new flags <code>--show_tablet_partition_info</code> and <code>--show_hash_partition_info</code> have been introduced
for the <code>kudu table list</code> CLI tool to show the corresponding relationship between partitions and
tablet ids, and it&#8217;s possible to specify the output format by specifying
<code>--list_table_output_format</code> flag.</p>
</li>
<li>
<p>A new flag <code>--create_table_replication_factor</code> has been introduced for the <code>kudu table copy</code> CLI
tool to specify the replication factor for the destination table.</p>
</li>
<li>
<p>A new flag <code>--create_table_hash_bucket_nums</code> has been introduced for the <code>kudu table copy</code> CLI
tool to specify the number of hash buckets in each hash dimension for the destination table.</p>
</li>
<li>
<p>A new flag <code>--tables</code> has been introduced for the <code>kudu master unsafe_rebuild</code> CLI tool to rebuild
the metadata of specified tables on Kudu master, and it has no effect on the other tables.</p>
</li>
<li>
<p>A new flag <code>--fault_tolerant</code> has been introduced for the <code>kudu table copy/scan</code> and
<code>kudu perf table_scan</code> CLI tool to make the scanner fault-tolerant and the results returned in
primary key order per-tablet.</p>
</li>
<li>
<p>A new flag <code>--show_column_comment</code> has been introduced for the <code>kudu table describe</code> CLI tool to
show column comments.</p>
</li>
<li>
<p>A new flag <code>--current_leader_uuid</code> has been introduced for the <code>kudu tablet leader_step_down</code> CLI
tool to conveniently step down leader replica using a given UUID.</p>
</li>
<li>
<p>A new flag <code>--use_readable_format</code> has been introduced for the <code>kudu local_replica dump rowset</code>
CLI tool to indicate whether to dump the primary key in human readable format. Besides, another flag
<code>--dump_primary_key_bounds_only</code> has been introduced to this tool to indicate whether to dump rowset
primary key bounds only.</p>
</li>
<li>
<p>A new flag <code>--tables</code> has been introduced for the <code>kudu local_replica delete</code> CLI tool to
conveniently delete multiple tablets by table name.</p>
</li>
<li>
<p>It’s now possible to specify <code>owner</code> and <code>comment</code> fields when using the <code>kudu table create</code> CLI
tool to create tables.</p>
</li>
<li>
<p>It’s now possible to use the <code>kudu local_replica copy_from_remote</code> CLI tool to copy tablets in a
batch.</p>
</li>
<li>
<p>It’s now possible to enable or disable auto rebalancer by setting <code>--auto_rebalancing_enabled</code>
flag to Kudu master at runtime.</p>
</li>
<li>
<p>It’s now possible for <code>kudu tserver/master get_flags</code> CLI tool to filter flags even if the server
side doesn’t support flags filter function (the latter is for Kudu servers of releases prior to
1.12).</p>
</li>
<li>
<p>Added a CSP (Content Security Policy) header to prevent security scanners flagging Kudu&#8217;s web UI
as vulnerable.</p>
</li>
<li>
<p>A separated section has been introduced to include all non-default flags specially on path <code>/varz</code>
of Kudu&#8217;s web UI.</p>
</li>
<li>
<p>A separated section has been introduced to show slow scans on path <code>/scans</code> of Kudu&#8217;s web UI, it
can be enabled by tweaking the <code>--show_slow_scans</code> flag for tablet servers. A scan is called 'slow'
if it takes more time than defined by <code>--slow_scanner_threshold_ms</code>.</p>
</li>
<li>
<p>A new <code>Data retained</code> column has been introduced to the <code>Non-running operations</code> section to
indicate the approximate amount of disk space that would be freed on path <code>/maintenance-manager</code> of
Kudu&#8217;s web UI.</p>
</li>
<li>
<p>The default value of tablet history retention time (controlled by <code>--tablet_history_max_age_sec</code>
flag) on Kudu master has been reduced from 7 days to 5 minutes. It&#8217;s not necessary to keep such a
long history of the system tablet since masters always scan data at the latest available snapshot.</p>
</li>
<li>
<p>Kudu can now be built and run on Apple M chips and macOS 11, 12. As with prior releases, Kudu&#8217;s
support for macOS is experimental, and should only be used for development.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_fixed_issues"><a class="link" href="#rn_1.17.0_fixed_issues">Fixed Issues</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Fixed an issue where historical MVCC data older than the ancient history mark (configured by
<code>--tablet_history_max_age_sec</code>) that had only DELETE operations wouldn&#8217;t be compacted correctly. As
a result, the ancient history data could not be GCed if the tablet had been created by Kudu servers
of releases prior to 1.10 (those versions did not support live row counting) (see
<a href="https://issues.apache.org/jira/browse/KUDU-3367">KUDU-3367</a>).</p>
</li>
<li>
<p>Fixed an issue where the Kudu server could potentially crash on malicious negotiation attempts.</p>
</li>
<li>
<p>Fixed a bug when a Kudu tablet server started under an OS account that had no permission to access
tablet metadata files would stuck in the tablet bootstrapping phase (see
<a href="https://issues.apache.org/jira/browse/KUDU-3419">KUDU-3419</a>).</p>
</li>
<li>
<p>Fixed a bug in the C++ client where toggling <code>SetFaultTolerant(false)</code> would not work.</p>
</li>
<li>
<p>Fixed a bug in the C++ client where toggling <code>KuduScanner::SetSelection()</code> would not work.</p>
</li>
<li>
<p>Fixed a bug in the Java client where under certain conditions same rows would be returned multiple
times even if the scanner was configured to be fault-tolerant.</p>
</li>
<li>
<p>Fixed a bug in the Java client where the last propagated timestamp and resource metrics would not
be updated in subsequent scan responses.</p>
</li>
<li>
<p>Fixed a bug in the Java client where it would not invalidate stale locations of the leader master.</p>
</li>
<li>
<p>Fixed a bug in the Kudu HMS client that was causing failures when scanning Kudu tables from Hive
(see <a href="https://issues.apache.org/jira/browse/KUDU-3401">KUDU-3401</a>).</p>
</li>
<li>
<p>Fixed a bug where the <code>kudu table copy</code> CLI tool would fail copying an unpartitioned table.</p>
</li>
<li>
<p>Fixed a bug where the <code>kudu master unsafe_rebuild</code> CLI tool would rebuild the system catalog with
outdated schemas of tables that were unhealthy during the rebuild process.</p>
</li>
<li>
<p>Fixed a bug where <code>kudu table copy</code> failed to copy tables that had STRING, BINARY or VARCHAR type
of columns in their range keys (see
<a href="https://issues.apache.org/jira/browse/KUDU-3306">KUDU-3306</a>).</p>
</li>
<li>
<p>Fixed a bug of the <code>kudu table copy</code> CLI tool crashing if encountering an error while copying rows
to the destination table. The tool now exits gracefully and provides additional information for
troubleshooting in such a condition.</p>
</li>
<li>
<p>Fixed a bug where the <code>kudu local_replica list</code> CLI tool would crash if the <code>--list_detail</code> flag
was enabled.</p>
</li>
<li>
<p>Fixed a bug when a sub-process running Ranger client would crash when receiving a oversized
message from Kudu master. With the fix, each peer communicating via the Subprocess protocol now
discards an oversized message, logs about the issue, and clears the channel, and is able to receive
further messages after encountering such a condition.</p>
</li>
<li>
<p>Fixed a bug when a Kudu application linked with kudu_client library would crash with SIGILL if
running on a machine lacking SSE4.2 support (see
<a href="https://issues.apache.org/jira/browse/KUDU-3248">KUDU-3248</a>).</p>
</li>
<li>
<p>Fixed a bug where the subprocess crashes in case of receiving large messages from the Kudu master
when the pipe gets full to transport the entire message in one go or when there is a delay in
sending from the master (see
<a href="https://issues.apache.org/jira/browse/KUDU-3489">KUDU-3489</a>).</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_wire_compatibility"><a class="link" href="#rn_1.17.0_wire_compatibility">Wire Protocol compatibility</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.17.0 is wire-compatible with previous versions of Kudu:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kudu 1.17 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.</p>
</li>
<li>
<p>Rolling upgrade between Kudu 1.16 and Kudu 1.17 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.</p>
</li>
<li>
<p>Kudu 1.0 clients may connect to servers running Kudu 1.17 with the exception of the
below-mentioned restrictions regarding secure clusters.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The authentication features introduced in Kudu 1.3 place the following limitations
on wire compatibility between Kudu 1.17 and versions earlier than 1.3:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If a Kudu 1.17 cluster is configured with authentication or encryption set to "required",
clients older than Kudu 1.3 will be unable to connect.</p>
</li>
<li>
<p>If a Kudu 1.17 cluster is configured with authentication and encryption set to "optional"
or "disabled", older clients will still be able to connect.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_incompatible_changes"><a class="link" href="#rn_1.17.0_incompatible_changes">Incompatible Changes in Kudu 1.17.0</a></h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="rn_1.17.0_client_compatibility"><a class="link" href="#rn_1.17.0_client_compatibility">Client Library Compatibility</a></h3>
<div class="ulist">
<ul>
<li>
<p>The Kudu 1.17 Java client library is API- and ABI-compatible with Kudu 1.16. Applications written
against Kudu 1.16 will compile and run against the Kudu 1.17 client library. Applications written
against Kudu 1.17 will compile and run against the Kudu 1.16 client library unless they use the
API newly introduced in Kudu 1.17.</p>
</li>
<li>
<p>The Kudu 1.17 C&#43;&#43; client is API- and ABI-forward-compatible with Kudu 1.16. Applications written
and compiled against the Kudu 1.16 client library will run without modification against the Kudu
1.17 client library. Applications written and compiled against the Kudu 1.17 client library will
run without modification against the Kudu 1.16 client library unless they use the API newly
introduced in Kudu 1.17.</p>
</li>
<li>
<p>The Kudu 1.17 Python client is API-compatible with Kudu 1.16. Applications
written against Kudu 1.16 will continue to run against the Kudu 1.17 client
and vice-versa.</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_known_issues"><a class="link" href="#rn_1.17.0_known_issues">Known Issues and Limitations</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Please refer to the <a href="known_issues.html">Known Issues and Limitations</a> section of the
documentation.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.17.0_contributors"><a class="link" href="#rn_1.17.0_contributors">Contributors</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.17.0 includes contributions from 26 people, including 12 first-time contributors:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Ashwani Raina</p>
</li>
<li>
<p>Hari Reddy</p>
</li>
<li>
<p>Kurt Deschler</p>
</li>
<li>
<p>Marton Greber</p>
</li>
<li>
<p>Song Jiacheng</p>
</li>
<li>
<p>Zoltan Martonka</p>
</li>
<li>
<p>bsglz</p>
</li>
<li>
<p>mammadli.khazar</p>
</li>
<li>
<p>wzhou-code</p>
</li>
<li>
<p>xinghuayu007</p>
</li>
<li>
<p>xlwh</p>
</li>
<li>
<p>Ádám Bakai</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="resources_and_next_steps"><a class="link" href="#resources_and_next_steps">Resources</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="http://kudu.apache.org">Kudu Website</a></p>
</li>
<li>
<p><a href="http://github.com/apache/kudu">Kudu GitHub Repository</a></p>
</li>
<li>
<p><a href="index.html">Kudu Documentation</a></p>
</li>
<li>
<p><a href="prior_release_notes.html">Release notes for older releases</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_installation_options"><a class="link" href="#_installation_options">Installation Options</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>For full installation details, see <a href="installation.html">Kudu Installation</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_next_steps"><a class="link" href="#_next_steps">Next Steps</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="quickstart.html">Kudu Quickstart</a></p>
</li>
<li>
<p><a href="installation.html">Installing Kudu</a></p>
</li>
<li>
<p><a href="configuration.html">Configuring Kudu</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div id="toc" data-spy="affix" data-offset-top="70">
<ul>
<li>
<a href="index.html">Introducing Kudu</a>
</li>
<li>
<span class="active-toc">Kudu Release Notes</span>
<ul class="sectlevel1">
<li><a href="#rn_1.17.0_upgrade_notes">Upgrade Notes</a></li>
<li><a href="#rn_1.17.0_obsoletions">Obsoletions</a></li>
<li><a href="#rn_1.17.0_deprecations">Deprecations</a></li>
<li><a href="#rn_1.17.0_new_features">New features</a></li>
<li><a href="#rn_1.17.0_improvements">Optimizations and improvements</a></li>
<li><a href="#rn_1.17.0_fixed_issues">Fixed Issues</a></li>
<li><a href="#rn_1.17.0_wire_compatibility">Wire Protocol compatibility</a></li>
<li><a href="#rn_1.17.0_incompatible_changes">Incompatible Changes in Kudu 1.17.0</a>
<ul class="sectlevel2">
<li><a href="#rn_1.17.0_client_compatibility">Client Library Compatibility</a></li>
</ul>
</li>
<li><a href="#rn_1.17.0_known_issues">Known Issues and Limitations</a></li>
<li><a href="#rn_1.17.0_contributors">Contributors</a></li>
<li><a href="#resources_and_next_steps">Resources</a></li>
<li><a href="#_installation_options">Installation Options</a></li>
<li><a href="#_next_steps">Next Steps</a></li>
</ul>
</li>
<li>
<a href="quickstart.html">Quickstart Guide</a>
</li>
<li>
<a href="installation.html">Installation Guide</a>
</li>
<li>
<a href="configuration.html">Configuring Kudu</a>
</li>
<li>
<a href="hive_metastore.html">Using the Hive Metastore with Kudu</a>
</li>
<li>
<a href="kudu_impala_integration.html">Using Impala with Kudu</a>
</li>
<li>
<a href="administration.html">Administering Kudu</a>
</li>
<li>
<a href="troubleshooting.html">Troubleshooting Kudu</a>
</li>
<li>
<a href="developing.html">Developing Applications with Kudu</a>
</li>
<li>
<a href="schema_design.html">Kudu Schema Design</a>
</li>
<li>
<a href="scaling_guide.html">Kudu Scaling Guide</a>
</li>
<li>
<a href="security.html">Kudu Security</a>
</li>
<li>
<a href="transaction_semantics.html">Kudu Transaction Semantics</a>
</li>
<li>
<a href="background_tasks.html">Background Maintenance Tasks</a>
</li>
<li>
<a href="configuration_reference.html">Kudu Configuration Reference</a>
</li>
<li>
<a href="command_line_tools_reference.html">Kudu Command Line Tools Reference</a>
</li>
<li>
<a href="metrics_reference.html">Kudu Metrics Reference</a>
</li>
<li>
<a href="known_issues.html">Known Issues and Limitations</a>
</li>
<li>
<a href="contributing.html">Contributing to Kudu</a>
</li>
<li>
<a href="export_control.html">Export Control Notice</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="row">
<div class="col-md-9">
<p class="small">
Copyright &copy; 2023 The Apache Software Foundation. Last updated 2023-09-04 19:34:44 +0800
</p>
<p class="small">
Apache Kudu, Kudu, Apache, the Apache feather logo, and the Apache Kudu
project logo are either registered trademarks or trademarks of The
Apache Software Foundation in the United States and other countries.
</p>
</div>
<div class="col-md-3">
<a class="pull-right" href="https://www.apache.org/events/current-event.html">
<img src="https://www.apache.org/events/current-event-234x60.png"/>
</a>
</div>
</div>
</footer>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
// Try to detect touch-screen devices. Note: Many laptops have touch screens.
$(document).ready(function() {
if ("ontouchstart" in document.documentElement) {
$(document.documentElement).addClass("touch");
} else {
$(document.documentElement).addClass("no-touch");
}
});
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
crossorigin="anonymous"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-68448017-1', 'auto');
ga('send', 'pageview');
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/3.1.0/anchor.js"></script>
<script>
anchors.options = {
placement: 'right',
visible: 'touch',
};
anchors.add();
</script>
</body>
</html>