Presto Conference Tokyo 2019で発表してきた

https://techplay.jp/event/733772 で発表してきました。

スライドや参加レポートに関しては https://prestosql.io/blog/2019/07/11/report-for-presto-conference-tokyo.html にちゃんとまとまっているのでこれをみるのが良いです。

togetterは https://togetter.com/li/1375730 

ここでは上記に書かれてないことを思い出してメモっときます。

API

prestoには大きく以下3つのAPIがあります。

  1. HTTP API
  2. presto-client
  3. presto jdbc driver

上記1は例えば https://github.com/prestosql/presto/wiki/HTTP-Protocol に書かれています。これが変わることはそんなに無いと思いますが、個人的経験では/v1/executeが消えてshibを直したことがあります。https://github.com/tagomoris/shib/pull/68

上記2は https://github.com/prestosql/presto/issues/224 のやりとりでもあるように、internal libraryなので変更の可能性が高いですし、基本的にpresto CLIコマンドから使われることを想定しているので、それ以外の用途で使うことは推奨されていないと思います。

とはいえ、うちの環境では普通に使われてますし、TDでも使われてると言ってたような。

例えば https://github.com/yanagishima/yanagishima では1と2を使ってます。

2だけでなく1を使う理由はクエリの進捗状況を取得したり、クエリをキャンセルしたり、構文エラーの時に行番号をハイライトしたりするためです。

進捗状況やキャンセルに関しては3のjdbcでもできると思うんですが、エラー行ハイライトは出来ないと思います。

本来はjdbc使うのが正しいし壊れにくいと思いますが、そうはいってもエラー情報をクライアントに提供するなどのきめ細やかなことをやろうとするとjdbcでは不十分なのかなと。

Apache Zeppelinのような高機能でjdbcさえあればあらゆるdbにつなげることを想定するなら上記1,2のようなプロダクト特有の機能を使うのは望ましくないです。ただそれはそれで、きめ細かな機能を提供出来ないので使い勝手が悪くなりがちです。pros/consありますね。

書籍

Presto開発者からはClean Code, Effective Java, Java並行処理プログラミングが良い書籍として紹介されていました。

プロファイラ

Presto開発者がJVM周りのトラブルシュートに何使ってるか聞いたらLinux perf, YourKitだと言ってました。JMCが出てこなかったのはまだJava8がメインだからかなあ。

Batch

Facebookではprestoでバッチ書いてたみたいで、impersonationどうしてたの?って聞いたら使ってなかったとのこと。安定性に関してはpresto専用クラスタでリソースをフルに使える環境だったからそんなに問題出なかったらしい。そうなのか。ただJava11使えばGCの性能が改善されてるので 試してみると良いのではと言われました。

date関数

prestoのdate関数はMySQL由来なので%y%M%dとかになるけど、hiveの方はJava由来なのでyyyyMMddになってるとのこと