Run Presto Product Test

Prestoには特に設定せずに使えるテストに加えて、product-testというものが存在します。これは裏でDockerでHadoop, MySQL, PostgreSQL, Cassandra, SQL Serverを立ち上げておいて、そのDBに対してクエリを発行し、テストするものです。各コネクタ内のDBはドライバが提供しているEmbedded Serverを立ち上げられる機能等を利用しています。コネクタ内のDBバージョンとproduct-testのバージョンをあえて分けることで複数バージョンに対する保証にもなっています。例えばCassandraはコネクタ内のテストで使用しているバージョンは2.xでproduct-test内のバージョンは3.xとなっています。

それではMac上での最初の設定方法を書いていきます。シェル上で実行する方法もありますが、一番実行することの多そうなIntelliJ上でのテスト方法について書いていきます。MacとUbuntuとで多少異なる部分もありますが、基本的には同じ流れです。 シェルでの実行方法や最新の情報を見たい場合はこちらをご覧ください。

1 リポジトリ直下でビルド

./mvnw install -DskipTests

2 テスト対象のコンテナを起動 必要であれば全部起動させますが、1個だけでももちろん大丈夫です。 ※SQL Serverを使用する場合は事前にメモリを3.25GB以上をDockerに割り当てておく必要があります。起動する際も容量が空いてないと失敗します。

presto-product-tests/conf/docker/singlenode/compose.sh up -d hadoop-master
presto-product-tests/conf/docker/singlenode/compose.sh up -d mysql
presto-product-tests/conf/docker/singlenode/compose.sh up -d postgres
presto-product-tests/conf/docker/singlenode/compose.sh up -d cassandra
presto-product-tests/conf/docker/singlenode-sqlserver/compose.sh up -d sqlserver

3 IPアドレスを/etc/hostsに記載 起動したコンテナに対して以下のようにコマンドを実行すると、IPアドレスが返却されます。$()内のコマンドは前のステップで使用したものを参考にしてください。

$ docker inspect $(presto-product-tests/conf/docker/singlenode-sqlserver/compose.sh ps -q sqlserver) | grep -i IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.18.0.4",

localhostに部分に”hadoop-master mysql postgres cassandra sqlserver”を追加し、上記で取得したアドレスを追記していきます。

127.0.0.1	localhost hadoop-master mysql postgres cassandra sqlserver
172.18.0.4      sqlserver

4 IntelliJの設定追加 メニューバー内の”Run”→”Edit Configurations…“のあと以下のように入力します。Prestoメモ#1 IntelliJ IDEAのセットアップで作成したPrestoServerの設定をコピーすると楽です。入力が終わったらOKでダイアログを閉じます。

Main class: com.facebook.presto.server.PrestoServer
VM options: -ea -Xmx2G -Dconfig=etc/config.properties -Dlog.levels-file=etc/log.properties -DHADOOP_USER_NAME=hive -Duser.timezone=UTC
Working directory: presto-product-tests/conf/presto

ここまで来たらIntelliJ上でステップ4で作成したConfigurationをRun/DebugするとPrestoServerと同じように起動時のメッセージがコンソールに流れて行くと思います。起動が完了したら、presto-product-tests内にあるテストを実行していけます。めでたしめでたし。