このブログでは何度も紹介していますが、Apache Kuduは分散ストレージエンジンです。RDBMSのようなテーブル構造の大量のデータを分散して保持することができます。HDFSとは異なりデータの更新が可能で、列指向でデータを保持しているため、Impalaなどと組み合わせた分析用途に適しています。
先日 Kudu のクイックスタートが更新されました。以前はVirtualBoxを使っていましたが、今回更新されたチュートリアルではDockerを使用しています。10分もかからずに一通り試せるので、「Apache Kuduって興味があるけど使ったことがない」という方はお盆休みに動かしてみてはいかがでしょうか?
Kuduクラスターの開始
Kuduは分散システムなので、通常 Kudu を試すにはクラスターを構築する必要があります。(たとえ1ノードの議事分散環境であっても…)。Cloudera Manager やCloudera Directorを使って簡単に構築できる、と言っても、それなりに時間と労力がかかります。
今回更新されたこのクイックスタートは Dockerを利用してKuduを試すことができます。
kuduリポジトリのクローン
まずは github から kudu のリポジトリをクローンしましょう。
$ git clone https://github.com/apache/kudu
$ cd kudu
あとの手順はクイックスタートに書かれている通りです。Kuduの起動はコピペでOKです。手元の環境では次の手順で起動しましたが、-d オプションをつけてバックグラウンドで実行する方が良いかもしれません。
環境変数を設定
下記のようにして KUDU_QUICKSTART_IP 環境変数にてIPアドレスを設定します。
$ export KUDU_QUICKSTART_IP=$(ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | tail -1)
Kuduクラスターの開始
$ docker-compose -f docker/quickstart.yml up
Creating network "docker_default" with the default driver
Creating volume "docker_kudu-master-1" with default driver
Creating volume "docker_kudu-master-2" with default driver
Creating volume "docker_kudu-master-3" with default driver
Creating volume "docker_kudu-tserver-1" with default driver
Creating volume "docker_kudu-tserver-2" with default driver
Creating volume "docker_kudu-tserver-3" with default driver
Creating volume "docker_kudu-tserver-4" with default driver
Creating volume "docker_kudu-tserver-5" with default driver
Pulling kudu-master-1 (apache/kudu:latest)...
latest: Pulling from apache/kudu
7b722c1070cd: Pull complete
5fbf74db61f1: Pull complete
ed41cb72e5c9: Pull complete
7ea47a67709e: Pull complete
45f1d259f300: Pull complete
4501400a1332: Pull complete
35dd84e86f94: Pull complete
70ac284fbf84: Pull complete
5ff2355745a6: Pull complete
d098837e4888: Pull complete
60ea7d7b1403: Pull complete
Creating docker_kudu-master-3_1 ... done
Creating docker_kudu-master-1_1 ... done
Creating docker_kudu-master-2_1 ... done
Creating docker_kudu-tserver-4_1 ... done
Creating docker_kudu-tserver-1_1 ... done
Creating docker_kudu-tserver-5_1 ... done
Creating docker_kudu-tserver-3_1 ... done
Creating docker_kudu-tserver-2_1 ... done
起動の確認
起動したら別のターミナルで docker ps を実行してみます。次のように8個のコンテナが起動しています。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc929acb738c apache/kudu:latest "/kudu-entrypoint.sh…" 2 minutes ago Up 2 minutes 0.0.0.0:7150->7150/tcp, 0.0.0.0:8150->8150/tcp docker_kudu-tserver-2_1
5a5c8c26aafa apache/kudu:latest "/kudu-entrypoint.sh…" 2 minutes ago Up 2 minutes 0.0.0.0:7250->7250/tcp, 0.0.0.0:8250->8250/tcp docker_kudu-tserver-3_1
382d5d3eeda3 apache/kudu:latest "/kudu-entrypoint.sh…" 2 minutes ago Up 2 minutes 0.0.0.0:7050->7050/tcp, 0.0.0.0:8050->8050/tcp docker_kudu-tserver-1_1
ee04037a3438 apache/kudu:latest "/kudu-entrypoint.sh…" 2 minutes ago Up 2 minutes 0.0.0.0:7350->7350/tcp, 0.0.0.0:8350->8350/tcp docker_kudu-tserver-4_1
18e98a7d45ae apache/kudu:latest "/kudu-entrypoint.sh…" 2 minutes ago Up 2 minutes 0.0.0.0:7450->7450/tcp, 0.0.0.0:8450->8450/tcp docker_kudu-tserver-5_1
0d9a0c8395ad apache/kudu:latest "/kudu-entrypoint.sh…" 2 minutes ago Up 2 minutes 0.0.0.0:7251->7251/tcp, 0.0.0.0:8251->8251/tcp docker_kudu-master-3_1
90679551cb3e apache/kudu:latest "/kudu-entrypoint.sh…" 2 minutes ago Up 2 minutes 0.0.0.0:7151->7151/tcp, 0.0.0.0:8151->8151/tcp docker_kudu-master-2_1
40e41c5ed783 apache/kudu:latest "/kudu-entrypoint.sh…" 2 minutes ago Up 2 minutes 0.0.0.0:7051->7051/tcp, 0.0.0.0:8051->8051/tcp docker_kudu-master-1_1
また、続いて kudu ksck を実行します。結果として、マスターが3台、ワーカー (Tablet Server)が5台あることが確認できました。
$ docker exec -it $(docker ps -aqf "name=kudu-master-1") /bin/bash
$ kudu cluster ksck kudu-master-1:7051,kudu-master-2:7151,kudu-master-3:7251
Master Summary
UUID | Address | Status
----------------------------------+--------------------+---------
0dca98d244e4459cafdf1b6601dcc119 | kudu-master-2:7151 | HEALTHY
5a039ad2f69d4064be12980a0981a51b | kudu-master-1:7051 | HEALTHY
8eb43eb5eb0f402484365072863adfdc | kudu-master-3:7251 | HEALTHY
Flag | Value | Tags | Master
------------------+-------+--------+-------------------------
use_hybrid_clock | false | hidden | all 3 server(s) checked
Tablet Server Summary
UUID | Address | Status | Location
----------------------------------+-------------------+---------+----------
22c41132ce8d45c0ac4581e08e470ba8 | 172.16.64.17:7150 | HEALTHY |
7274f5625de2460abb5df57bd5d5cbe8 | 172.16.64.17:7350 | HEALTHY |
ae40023b85be4134987a2a5affde351c | 172.16.64.17:7250 | HEALTHY |
e4153b5ecf404b5e82813a9ef2905dcf | 172.16.64.17:7050 | HEALTHY |
f376ba3f34ef445fa319443561eb6193 | 172.16.64.17:7450 | HEALTHY |
Tablet Server Location Summary
Location | Count
----------+---------
| 5
Flag | Value | Tags | Tablet Server
------------------+-------+--------+-------------------------
use_hybrid_clock | false | hidden | all 5 server(s) checked
Version Summary
Version | Servers
---------+-------------------------
1.10.0 | all 8 server(s) checked
The cluster doesn't have any matching tablets
The cluster doesn't have any matching tables
Tablet Replica Count Summary
Statistic | Replica Count
----------------+---------------
Minimum | 0
First Quartile | 0
Median | 0
Third Quartile | 0
Maximum | 0
==================
Warnings:
==================
Some masters have unsafe, experimental, or hidden flags set
Some tablet servers have unsafe, experimental, or hidden flags set
OK
kudu@40e41c5ed783:/opt/kudu$
最後に localhost:8050 にアクセスして WebUI を表示します。
さらに localhost:8051 にアクセスし、Tablet Server 一覧を表示します。
続いてJavaのサンプルを実行してみましょう。
Java サンプルアプリの実行
クイックスタートに用意されているサンプルアプリは Java で記述されています。ソースコードはこちら。このサンプルアプリは次の処理を行います。
記述されている手順に従ってアプリを実行します。
$ export KUDU_USER_NAME=kudu
$ cd examples/java/java-example
$ mvn package
$ java -DkuduMasters=localhost:7051,localhost:7151,localhost:7251 -jar target/kudu-java-example-1.0-SNAPSHOT.jar
-----------------------------------------------
Will try to connect to Kudu master(s) at localhost:7051,localhost:7151,localhost:7251
Run with -DkuduMasters=master-0:port,master-1:port,... to override.
-----------------------------------------------
[main] WARN org.apache.kudu.util.NetUtil - Slow DNS lookup! Resolved IP of `localhost' to localhost/127.0.0.1 in 8242405ns
Created table java_example-1565330612139
Inserted 150 rows
Altered the table
Scanned some rows and checked the results
Deleted the table
うまくいきました!が、本当に読み書きできているのかどうか、これではわかりにくいですね。
Kuduのクラスターは起動したままにしておき、次回はNiFiからデータを投入するチュートリアルを実行してみましょう。




コメント