prestoで実現するインタラクティブクエリ - dbtech showcase 2014 tokyo

57
Copyright ©2014 Treasure Data. All Rights Reserved. Prestoで実現するインタラクティブクエリ Taro L. Saito, Treasure Data [email protected] November 13, 2014 @db tech showcase Tokyo 2014 秋葉原UDX

Upload: treasure-data-inc

Post on 02-Jul-2015

3.854 views

Category:

Engineering


10 download

DESCRIPTION

Treasure DataではFluentdなどで収集したデータに対し、Prestoによる低レイテンシクエリサービスを提供しています。これによりユーザーはすばやくデータに関する知見を得ることができ、データ分析の生産性を向上できます。このスライドでは分散SQLエンジンであるPrestoの特徴とその実装について紹介します。 この内容はdbtech showcase 2014 Tokyo @秋葉原UDX で紹介しました。 http://www.insight-tec.com/dbts-tokyo-2014.html

TRANSCRIPT

Page 1: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Prestoで実現するインタラクティブクエリ

Taro L. Saito, Treasure Data [email protected] November 13, 2014 @db tech showcase Tokyo 2014 秋葉原UDX

Page 2: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

自己紹介 @taroleo •  2002 東京大学 理学部 情報科学科卒 •  2007 Ph.D.

–  XMLデータベース、トランザクション処理の研究 –  ACM SIGMODなどで研究発表

•  ~ 2014 東京大学 情報生命科学専攻 助教 –  ゲノムサイエンス研究

•  大規模データ処理、並列・分散コンピューティング

•  2014.3月~ Treasure Data –  ソフトウェアエンジニア, MPP Team Leader

2

Page 3: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

「データ」に関連するオープンソース活動

•  sqlite-jdbc –  SQLite DBMS for Java –  1ファイル=1DB

•  snappy-java –  高速圧縮ライブラリ –  月に10万回以上ダウンロード –  Sparkでも採用

•  msgpack-java •  UT Genome Browser (UTGB)

–  大規模ゲノム情報の可視化

3

Page 4: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Prestoとは? •  Facebookが開発している分散SQLエンジン

–  ペタスケールのデータに対しインタラクティブ(対話的)な検索が必要に •  それまではHive中心

–  2013年11月にオープンソース化

•  Prestoの特徴 –  CPU使用効率・スピード重視(アドホック検索) –  インメモリ処理 –  Javaによる実装 –  教科書的なRDBMSの実装 –  ANSI SQLベース

4

Page 5: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Prestoの開発体制 •  主にFacebookチームの6人がGitHub上で開発

–  issue管理もGitHubのみ –  Google group上のMLで議論

•  Treasure Dataの貢献数は現在第3位

•  2014年11月現在 –  39 contributors –  1949 pull requests!

Page 6: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

バッチクエリ(Hive) とアドホッククエリ (Presto)

6

TDでは独自にリトライ機構を導入

スループット重視 CPU使用効率、レスポンスタイム重視

耐障害性

Page 7: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

HDFS

Hive

PostgreSQL, etc.

Daily/Hourly Batch Interactive query

Commercial BI Tools

Batch analysis platform Visualization platform

Dashboard

Page 8: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

HDFS

Hive

PostgreSQL, etc.

Daily/Hourly Batch Interactive query

✓ Less scalable ✓ Extra cost

Commercial BI Tools

Dashboard

✓ More work to manage 2 platforms

✓ Can’t query against “live” data directly

Batch analysis platform Visualization platform

Page 9: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

HDFS

Hive Dashboard

Presto

PostgreSQL, etc.

Daily/Hourly Batch

HDFS

Hive

Dashboard

Daily/Hourly Batch

Interactive query

Interactive query

Page 10: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

PrestoはSQLレイヤー •  Prestoのコア部分はSQLの実行レイヤーのみ

–  各種ストレージ、DBMSへのアクセスはコネクター経由 –  既存のコネクターや独自実装のコネクターを同時に使用できる

•  コネクター –  Hiveコネクター

•  HDFS上に保存されたデータにアクセス –  Cassandraコネクター –  MySQLコネクター –  PostgreSQLコネクター

10

Page 11: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Presto

HDFS

Hive

Dashboard

Daily/Hourly Batch Interactive query

Cassandra MySQL Commercial DBMSs

SQL on any data sets

Page 12: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Hive

TD API / Web Console Interactive query

batch query

Presto

Treasure Data

PlazmaDB

td-presto connector

Page 13: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

トレジャーデータとは? •  米シリコンバレー発日本人創業のビッグデータ関連企業

–  2011年12月、米Mountain Viewにて創業 –  2012年11月、東京丸の内に日本支社設立

•  クラウド型データマネージメントサービス「Treasure Data Service」を提供

13

芳川裕誠 – CEO Open source business veteran

太田一樹 – CTO Founder of world’s largest Hadoop Group

主要投資家

Bill Tai Charles River Ventures, Twitterなどに投資 まつもとゆきひろ Ruby言語開発者

Sierra Ventures – (Tim Guleri) 企業向けソフト・データベース領域での有力VC

創業者

Jerry Yang Yahoo! Inc. 創業者

古橋貞之 – Software Engineer MessagePack, Fluentd開発者

Page 14: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Treasure Data Service ビッグデータのための「クラウド + マネジメント」一体型サービス

データ収集~保存~分析までワンストップでサポート

14

•  毎日数百億規模のレコードが取り込まれている –  2014年5月に5兆(trillion)レコードに到達

•  SQLベース(Hive, Presto, Pigなど)による検索サービスを提供

Page 15: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Over 100 customers, including:

15

Page 16: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Customer: Pioneer, #1 Auto Electronics Provider

16

Page 17: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved. 17

競争で先んじたいが、大量のストリーミングデータを 経済的に溜めて分析する仕組みを持っていない

新規事業へのフィードバック

•  車載センサーデータ等を収集 •  ブレーキを踏んだ、等

•  自動車内のセンサーデータを分析

車載センサーデータ M2M ×

Page 18: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

O2O(online-to-offline)活用事例 •  購買や行動の履歴を統合し横断的に分析

–  なぜ買ってくれたかを理解 –  店舗の顧客をネットストアへ、ネットストアの顧客を店舗へと相互に送客可能に

リアル店舗

スマホアプリ

ネットストア

メール配信最適化

クーポン発行

レコメンド最適化

coupon

ID

アクションログ

アクションログ

購入データ

データ統合

+ Amazon Redshift

18

Page 19: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

ゲームソリューション導入事例

•  20タイトル、2000台以上のサーバからのログを収集・保管 –  分析、ゲームの改善に活用 –  各デバイスからのアクセスログ, ユーザーの行動を可視化

Game1 Game2 Game3

KPI A

KPI B

KPI C

横断分析

縦断分析

19

Page 20: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

TD + Metric Insights

20

Page 21: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Pebble: Wearable Tech

21

Page 22: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved. 22

競争で先んじたいが、大量のストリーミングデータを 経済的に溜めて分析する仕組みを持っていない

新規事業へのフィードバック

•  機器情報を収集・分析 •  バッテリー残量等

•  ユーザーの操作情報を収集・分析

ウェアラブルデバイス センサーデータ M2M ×

heroku

Page 23: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

TD + Presto •  トレジャーデータ

–  日々大量のデータを収集

•  インタラクティブクエリ –  大量のデータからすばやく知見を得たい –  システムの状態をすばやく知りたい –  データ解析の支援

–  日に数千個のクエリを実行するケースも(バッチ的にも使える)

•  Presto –  低レイテンシで結果が得られる –  Hiveの穴を埋めるインタラクティブクエリエンジン

23

Page 24: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Presto + BI ツール

24

Page 25: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Presto

HDFS

Hive

Dashboard

Daily/Hourly Batch Interactive query

Cassandra MySQL Commertial DBs

SQL on any data sets Commercial BI Tools

✓ Tableau ✓ ChartIO ✓ ...

Data analysis platform

Page 26: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Prestogres: Presto + PostgreSQL •  ODBCドライバの実装は大変

–  仕様が巨大で複雑

•  PostgreSQL界隈の成熟した実装を活用できないだろうか?

•  そうして誕生したのが…

https://github.com/treasure-data/prestogres

Page 27: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Prestogresの仕組み •  PostgreSQLを経由してPrestoにクエリを送信

–  pgpool-II(PostgreSQL用のコネクションプール実装)がベース –  PostgreSQLにアクセスできるツール(JDBC, ODBCなど)は全て利用可能に

pgpool-II + patch

Presto Coordinator

client

1. SELECT COUNT(1) FROM tbl1;

4. rewrite query to: SELECT * FROM presto_result; Postgre

SQL 3. FROM_PRESTO_AS_TEMP_TABLE() function runs the query on Presto and writes result into a new temporary table

2. select run_presto_as_temp_table( ‘presto_result’, ‘SELECT COUNT(1) FROM tbl1’ );

pgpool-II + patch client

1. SELECT COUNT(1) FROM tbl1

4. SELECT * FROM presto_result;

PostgreSQL

3. “run_persto_as_temp_table” function Prestoでクエリを実行

Presto Coordinator

Page 28: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Tableau Desktop

28

Page 29: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved. 29 TD + chartio.com

Page 30: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

データの収集

30

Page 31: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Fluentd: データを正しく集めるための入り口

31

fluentd.org

Page 32: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

広く活用されているFluentd •  Kubernetes

–  GoogleのDocker(コンテナ型ソフトウェア)管理ツール

•  Fluentdが標準ログコレクタに

32

Page 33: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

PlazmaDB: スキーマレス・列志向ストレージ

33

Page 34: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Treasure Data: Javascript SDK •  Webサイトのビジター情報を簡単にトラッキング

–  td_version – td-js-sdk’s version –  td_client_id – client’s uuid –  td_charset – character set –  td_language – browser language –  td_color – screen color depth –  td_screen – screen resolution –  td_viewport – viewport size –  td_title – document title –  td_url – document url –  td_host – document host –  td_path – document pathname –  td_referrer – document referrer –  td_ip – request IP (server) –  td_browser – client browser (server) –  td_browser_version – client browser version (server) –  td_os – client operating system (server) –  td_os_version – client operating system version (server)

•  スキーマの変更なしにパラメータを追加できる

34

Page 35: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

MessagePack: スキーマレスでも型はある

35

•  レコードはMessagePack形式 •  入力時のデータ型はそのまま保存

–  intやstring型のデータが列中に混在した状況でも使える

PlazmaDBがスキーマに合わせて自動型変換を行う

Page 36: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Presto:列志向のクエリプランによる最適化

•  s

36 データ読み出しの最適化

Page 37: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Prestoのアーキテクチャ

37

Page 38: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Client

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service

Page 39: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Client

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service 1. find servers in a cluster

Page 40: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Client

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service

2. Client sends a query using HTTP

Page 41: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Client

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service

3. Coordinator builds a query plan

Connector plugin provides metadata (table schema, etc.)

Page 42: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Client

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service

4. Coordinator sends tasks to workers

Page 43: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Client

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service

5. Workers read data through connector plugin

Page 44: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Client

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service

6. Workers run tasks in memory

Page 45: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service

7. Client gets the result from a worker

Client

Page 46: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Client

Coordinator Connector Plugin

Worker

Worker

Worker

Storage / Metadata

Discovery Service

Page 47: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Query Planner

SELECT name, count(*) AS c FROM impressions GROUP BY name

SQL

impressions ( name varchar time bigint)

Table schema

Table scan (name:varchar)

GROUP BY (name, count(*))

Output (name, c)

+

Sink

Final aggregation

Exchange

Sink

Partial aggregation

Table scan

Output

Exchange

Logical query plan

Distributed query plan

Page 48: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Query Planner - Stages

Sink

Final aggregation

Exchange

Sink

Partial aggregation

Table scan

Output

Exchange

inter-worker data transfer

pipelined aggregation

inter-worker data transfer

Stage-0

Stage-1

Stage-2

Page 49: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Sink

Partial aggregation

Table scan

Sink

Partial aggregation

Table scan

Execution Planner

•  StageをTaskに分割して並列度を上げる

+ Node list

✓ 2 workersSink

Final aggregation

Exchange

Output

Exchange

Sink

Final aggregation

Exchange

Sink

Final aggregation

Exchange

Sink

Partial aggregation

Table scan

Output

Exchange

Worker 1 Worker 2

Page 50: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Execution Planner - Split

•  各TaskにはSplitが割り当てられ、並列に実行される

Sink

Final aggregation

Exchange

Sink

Partial aggregation

Table scan

Sink

Final aggregation

Exchange

Sink

Partial aggregation

Table scan

Output

Exchange

Split

many splits / task = many threads / worker (table scan)

1 split / task = 1 thread / worker

Worker 1 Worker 2

1 split / worker = 1 thread / worker

Page 51: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Presto: Web Monitor •  TPC-H Q5

51

1053

Page 52: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Prestoの運用 •  クエリの実行履歴

–  TDに保存してPrestoで利用状況を管理

•  Presto coordinator/worker –  JMX Beanやクエリの状態をJSON形式で取得できる

•  Presto-metrics –  Rubyからprestoの各種パラメータを取得するライブラリ –  https://github.com/xerial/presto-metrics –  メモリ使用量、タスク実行量、エラーコード取得など –  presto-metrics + Fluentdで常にPrestoの状態を監視

•  Librato Metricsで集約+可視化

52

Page 53: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Fluentdによるサービスのモニタリング

53

Hive

Presto

Page 54: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

Librato MetricsによるPrestoサービスの監視

54

Page 55: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

TD: Scheduled Query •  定期的にTDでクエリを実行

•  Prestoクエリの集計にもPrestoを使っている

55

Page 56: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

td-prestoコネクタ •  Storage

–  PlazmaDB –  S3, Riak CS (S3とAPI互換)へのアクセス

•  TableScan operator –  バックグラウンドで先にI/Oリクエストを発行(プリフェッチ) –  msgpack-java v07

•  v06に比べて2倍以上高速化 –  レコード単位ではなく、ページ単位での処理

•  Presto 0.69より

56

Page 57: Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo

Copyright ©2014 Treasure Data. All Rights Reserved.

トレジャーデータが目指すもの

•  「世の中の誰もが手軽にデータベースを使える」ようにする

•  まずは誰もが「データを手軽に正しく集められる」ように –  Fluentd+msgpackで柔軟にデータを取り込む –  plazmadbによる圧縮、スキャンの最適化

•  「Presto」 –  Hiveの穴を埋める分散SQLエンジン –  データを手軽にすばやく解析

57

WE ARE HIRING!