Treasure Data - Support Engineering Team blog

トレジャーデータのサポートエンジニアリングチームのブログです。

Presto Conference Tokyo 2020 (Online) 登壇・参加レポート

Treasure Data サポート上加世田です。

Presto Conference Tokyo 2020 にて登壇しました。
そのレポートと合わせて紹介いたします!

Presto Conference Tokyo 2020 (Online)

TDにおいてもかなり中心的な機能であるPrestoのカンファレンスです。
昨年はTreasure Data 東京オフィスにて開催したのですが、今年はCOVID-19の状況もあり、オンラインでの開催になりました。

techplay.jp

ライブ動画はこちらになります。
https://www.youtube.com/watch?v=NxDBBEA67Ws&feature=youtu.be

昨年のカンファレンスの様子はこちら

サポートからの発表

私からは「Support Presto as a feature of SaaS」と題しまして、Treasure Dataにおけるお客様のPrestoに関するお問い合わせの分析や、テクニカルサポートがどのようにしてお客様の問題に取り組んでいるのかを紹介しました。資料は英語ですが、発表は日本語で行っています。

動画:youtu.be
スライド:

www2.slideshare.net

Prestoクエリにて、よく問題になるパターンについても紹介しています。(p.26
日本語で少々補足しておきます。

  • Memory exceeded(メモリ超過)

    • Join order
      現時点(2020年11月)でTDのPrestoにおけるJoinの方式はBroadcast Joinになっています。そのため、Joinするテーブルの大きさをしっかり意識して順序を記載すると効率よく処理されるのですが、全く無視するとメモリをかなり使う処理になる可能性があります。
      近い将来にデフォルトのJoin方式をOSSのデフォルトに合わせてDistributed Joinにする予定になっておりますが、Joinの順序を意識するとメモリ効率を良くできます。
    • Efficient use of partitions
      TDでは基本的にtimeカラムにてパーティショニングを行っています。このtimeカラムをWHERE条件に加えることで、最低限のデータファイルスキャンにすることができるため、かなりの効率化になります。
    • Optimal Filtering
      Joinやサブクエリを行う場合、しっかり事前にレコードをWhere条件でフィルタリングして絞り込んでおくことで、当然後続のプロセスで扱うデータ量が削減できるので、データのフィルタリングは重要です。
  • Inefficient query(非効率なクエリ)

    • Multiple scans to the same table(s) 1クエリ上にて、同一テーブルを何度も呼び出すと、その都度データのスキャンが行われますので、かなり無駄なリソースと処理となります。
    • Improper use of CTE (Common Table Expression, WITH Statement) WITH句に定義したテーブルも呼び出す度にWITH句の内容をスキャンします。1度スキャンしてデータを保持していると勘違いされる方も多いのですが、都度走査してしまいますので、何度も呼び出すのはアンチパターンになります。

継ぎ接ぎでSQLを運用管理していくと起こりがちですが、クエリのメンテナンス性もあがりますので、是非意識してみてください。

他登壇者様の発表

Special Talk from Martin and Brian

PrestoのSoftware FoundationであるMartinとBrianからそれぞれSpecial Talkがありました。

From Martin

動画:https://youtu.be/NxDBBEA67Ws?t=179

Presto Communityの最近のアップデート、去年以降のPrestoの改善ポイント、次期予定されている機能の紹介がありました。かなり開発が活発で、楽しみな機能が盛りだくさんです。

From Brian

動画:https://youtu.be/NxDBBEA67Ws?t=1428

Presto Communityについてと、新たなPrestoユーザに対するトレーニングストラテジの紹介がありました。日本語用のSlackチャンネルもありますので、かなり参加しやすいかと思います。
Presto | Slack
#general-jp チャンネル

AWSでPrestoを徹底的に使いこなすワザ

動画:https://youtu.be/NxDBBEA67Ws?t=4238
スライド:AWS で Presto を徹底的に使いこなすワザ

AWSの関山様から、AWSでPrestoを使うにあたって参考になる様々な情報の紹介がありました。
具体的にはPrestoとEMR、S3、Glueとの連携方法について細かい情報を交えての説明があり、さらにはPrestoをAWS上で使うケース(EC2, EMR, Athena)の使い分けについての比較など、とてもわかりやすいです。

Presto @ LINE 2020

動画:https://youtu.be/NxDBBEA67Ws?t=6345

LINE株式会社の蛯原様から、PrestoのLINEでの使用状況についての紹介です。
1年間で4回もVersion Upを行われたそうで、現在も新バージョンの検証中とのことです。 かなり高頻度でVersion Upされている印象で、本来細かい単位でのVersion Upの方がリスクを抑えて進めることができますので羨ましい限りです。
※ TDではVersion Upの敷居が高く、なかなか気軽に実施できないことが課題の一つです。

サーバレスで Presto が使える Amazon Athena 使いこなし術 [2020年版]

動画:https://youtu.be/NxDBBEA67Ws?t=7951

AWSの川村様より、Athenaの最新機能やパフォーマンスチューニングのTipsの紹介がありました。
Athenaのご利用を検討されている方は必見かと思います。

Repro における Presto Cassandra Connector 改造秘話

動画:https://youtu.be/NxDBBEA67Ws?t=9910
スライド:Repro における Presto Cassandra Connector 改造秘話 / Presto Conference Tokyo 2020 - Speaker Deck

Repro株式会社の荒引様から、ReproでのPrestoの利用方法に加えて、Prestoの安定化・パフォーマンス改善のために利用されたPresto Casandraの改造について、踏み込んだ内容の紹介を頂きました。
ボトルネック箇所の調査からその回避方法まで具体的な内容になっており、とても興味深い発表でした。

Treasure DataのPrestoサービスにおけるテスト戦略

動画:https://youtu.be/NxDBBEA67Ws?t=11597
スライド:Testing Distributed Query Engine as a Service

弊社Treasure DataでPrestoチームとして運用・開発を担当している竹添より、TDにてPrestoのVersion Upを行う際に重要となってくるテストに関して、どのように取り組んでいるのか、その課題などの紹介をいたしました。
SaaSとしてPrestoを提供しているためクエリの種類は膨大で、データの傾向も多種多様、かなりのエッジケースを踏んでしまうことも結構あり、お客様にご迷惑をおかけし申し訳ない点ではございますが、かなりTDとしても苦労・努力しているポイントになります。

おわりに

今年も参考になる情報盛りだくさんで、とても楽しめました。
また、例年のカンファレンスの発表内容とは少々毛色の違う内容の発表をできたと思いますので、ご覧頂いたPrestoに携わられている方々に少しでも有意義な内容となれていれば幸いです。