db tech showcase 2014 Tokyo 「Prestoで実現するインタラクティブクエリ」トレジャーデータ 斉藤太郎氏
- クラスターコンピューティングとして東大理学部で研究。2014年からTreasureDataへ。@taroleo
- OSS活動も実施。sqlite-jdbc、snappy-java、msgpack-java、UTGB(大規模ゲノム情報可視化)など実施。
- TreasureData:日本人創業のシリコンバレー発企業。TreasureDataService提供。日本支社あり。クラウド+マネジメント一体サービスでSQLベースによる検索サービスを提供。
- 世界中のだれもが手軽にデータベースを使えるように、誰もが正しくデータを手軽に集められるようにFluentd+msgpack、plazmadb
【Prestoとは】
- Facebookが開発している分散SQLエンジン。(これまではHive) 2013/11にOSS。
- CPU使用効率、スピード重視、アドホック検索、インメモリ処理、Java実装、教科書的な素直なRDBMS実装を複数のノードで動くよう拡張、ANSI SQLベース(標準に近いSQL文をサポート)。OSの状態をSQL検索するとかも出てきている。Facebookの6人がGitHub上で開発。GoogleGroupのMLあり。pull requestsが1949(かなり大きい)。Contributorsが39で外からの貢献も受け入れる。
- Hiveとの違い:HiveはSQLクエリをMapReduceに置き換える。MapReduceはスループット重視(たくさんのクエリを処理)、diskへのデータ対比、耐障害性。Prestoではメモリtoメモリでディスクを使わない。CPU使用効率重視、レスポンスタイム重視。リトライ機構(Prestoは1つタスクが死ぬと動かないため。エラーは起こるがリトライなので問題なし。)Hiveで5分かかるものは1/10程度で終わるためリトライでも気が付かない。
- HiveはHDFS上にクエリを投げるがクエリの速度が遅すぎる。間にPostgreSQLなどを挟んで集計し、Dashbord、BIツールに出力。ただ複雑になる。(同期、複数のプラットフォーム。)Presto使うと、HDFSに直接クエリを早く投げられ直接出力できる。PostgreSQLなどに一度書かなくてよい。Hiveとともに運用も可能。
- PrestoはSQLレイヤーのみ。各種ストレージやDBMSアクセスはコネクタ経由。Hiveコネクタ、Cassandraコネクタ、MySQLコネクタなど。全部つないだクエリも発行できる。Cassandraのキーバリューを読みつつMySQLに入れたりできる。
- TreasureDataでは、PlazmaDB(HDFSの代わりに)にHive、Prestoをアクセスさせている。
- クエリの実行履歴:TD(TreasureData)に保存してPrestoで利用状況を管理。Presto coordinator/worker:JMX Beanやクエリの状況をJSON形式で取得。Presto-metricsでFluentdによるサービスのモニタリング。
- Librato Metrics:Prestoサービスの可視化。
- TD:定期的にクエリ実行できる。Prestoクエリ集計にもPresto。
【PrestoとPrestogres、BIツールと連携】
- ODBCドライバの実装は大変。PostgreSQL界隈の成熟した実装を活用し、Prestogresを作る。ゲートウェイとしてPostgreSQLを使う。pgpool-2(PostgreSQL用のコネクションプール実装)がベース。本家のもあるがスピードはほとんど変わらない。TableauDesktop等GUIツールと連携可能。
- Presto Dashboard:
- Fluentd(フルエントディとよむ):データを集めるための中間的存在。いろいろなデータとデータを連携できる。Kubernetes(GoogleDocker)でFluentdが標準ログコレクタに。
- PlazmaDB:スキーマレス、列志向ストレージ。メッセージパック形式でデータを送る。JSONに対応したテーブル。新たな属性が増えても自動的にカラムが追加される。テーブル設計が不要。圧縮しやすい構造。オートスキーマ。
- JavascriptSDK:Webサイトのビジター情報を簡単にトラッキングできる。スキーマの変更なしにパラメータ追加。データを送ることの障害がほぼない。
- MessagePack:スキーマレスだが型はある。PlazmaDBがスキーマに合わせて自動型変換実施。int、stringが混在することもできる。