Apache Kuduを10分で試す(1)

Kudu

このブログでは何度も紹介していますが、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からデータを投入するチュートリアルを実行してみましょう。

コメント