blob: ba77682e11780a964833937c7ec2bd0bac569a05 [file] [log] [blame]
// 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.
= Kudu {cpp} client example README
:author: Kudu Team
:homepage: https://kudu.apache.org/
== Summary
The Kudu {cpp} client library distribution contains a {cpp} example application
that demonstrates how to use the Kudu {cpp} client API. The example
can be used as a starting point for a custom Kudu {cpp} client application.
This note contains information on how to build the Kudu {cpp} client example.
== How to build the example if installing Kudu from packages
This section describes how to build the example if installing Kudu
using pre-built packages.
. Install the required packages as described in the
https://kudu.apache.org/docs/installation.html#install_packages[documentation on the Kudu Web site].
The `kudu-client0` package (`libkuduclient0` on Debian/Ubuntu Linux
distributions) contains the Kudu {cpp} client library, and the `kudu-client-dev`
package (`libkuduclient-dev` on Debian/Ubuntu Linux distributions) contains
the Kudu {cpp} client header files and {cpp} code example (`example.cc`)
along with other auxiliary content.
. Make sure `cmake` of version at least 2.8 is installed on the system.
. Copy the example into a custom location where you would like to work
with the code. Working in the `/usr/share/doc/kuduClient/examples`
directory is possible but is not recommended since it requires
super-user access and pollutes the `example` directory with
intermediate files.
For example, to copy the `/usr/share/doc/kuduClient/examples` directory
recursively into `/tmp/kuduClient`:
+
[source,bash]
----
cp -r /usr/share/doc/kuduClient/examples /tmp/kuduClient
----
. Navigate into the directory where the `example.cc.gz` file was copied and
unpack the example source file. For example:
+
[source,bash]
----
cd /tmp/kuduClient/examples
gunzip example.cc.gz
----
. Run `cmake` to generate appropriate makefiles. For example, if targeting
for a debug build
+
[source,bash]
----
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=debug
----
+
For a release build, use `release` for `CMAKE_BUILD_TYPE` instead.
. Run `make` to build the example:
+
[source,bash]
----
make
----
== How to build the example if building Kudu from source
This section describes how to build the example if building Kudu from source.
To install the `example.cc` and other files, an alternate destination root
is used.
Specifying an alternate destination root allows you to install the
Kudu {cpp} client library, the example file, and other content
under the specified destination prefix.
. Follow the https://kudu.apache.org/docs/installation.html#_build_from_source[instructions on the Kudu Web site]
to build the project from source.
. Once the project is built, change into the `<build_dir>/src/kudu/client`
sub-directory.
. Run `make install` with an alternate destination root. For example, if
installing into `/tmp/client_alt_root`
+
[source,bash]
----
make install DESTDIR=/tmp/client_alt_root
----
. Change the current working directory into the
`usr/local/share/doc/kuduClient/examples` subdirectory of the alternate
destination root. For example, if installing into `/tmp/client_alt_root`
+
[source,bash]
----
cd /tmp/client_alt_root/usr/local/share/doc/kuduClient/examples
----
. Run `cmake` to generate appropriate makefiles. For example, if installing
into `/tmp/client_alt_root` and targeting for a debug build
+
[source,bash]
----
cmake -G "Unix Makefiles" -DkuduClient_DIR=/tmp/client_alt_root/usr/local/share/kuduClient/cmake -DCMAKE_BUILD_TYPE=debug
----
+
For a release build, set `release` for `CMAKE_BUILD_TYPE` instead.
. Run `make` to build the example:
+
[source,bash]
----
make
----
== Running the sample application
After the example is built, it is ready to run against your Kudu cluster.
The example application assumes the target Kudu cluster has at least 3
running tablet servers, because it creates a table with replication factor 3.
If that's not the case, modify `example.cc` accordingly and re-compile. By
default, the `example` binary runs against a local Kudu master using the
default port 7051. You may also specify a different master or multiple masters
as arguments to the binary, as shown. The following output shows a successful
invocation of the example application, with some uninteresting log messages
removed:
[source,bash]
----
$ ./example localhost:9876 localhost:9877 localhost:9878
Running with Kudu client version: kudu 1.8.0-SNAPSHOT (rev bbbb45fd31f2eb1570563e925639e549047b0707)
Long version info: kudu 1.8.0-SNAPSHOT
revision bbbb45fd31f2eb1570563e925639e549047b0707
build type DEBUG
built by wdberkeley at 27 Mar 2018 23:52:18 PST on cloudbook.local
Received log message from Kudu client library
Severity: 0
Filename: /Users/wdberkeley/src/kudu/src/kudu/util/thread.cc
Line number: 570
Time: Wed Mar 28 01:50:48 2018
Message: Started thread 17452818 - kernel-watchdog:kernel-watcher
...
Received log message from Kudu client library
Severity: 0
Filename: /Users/wdberkeley/src/kudu/src/kudu/client/client-internal.cc
Line number: 581
Time: Wed Mar 28 01:50:48 2018
Message: Considering host 192.168.1.4 local
Created a client connection
Created a schema
Created a table
Altered a table
Inserted some rows into a table
Scanned some rows out of a table
Deleted a table
Done
----
== References
. https://kudu.apache.org/[The Kudu Project Web Site]
. https://kudu.apache.org/cpp-client-api/[Kudu {cpp} client API documentation]