Weitere ähnliche Inhalte Ähnlich wie [db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎 (20) Mehr von Insight Technology, Inc. (20) [db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎1. Prestoで実現するインタラクティブクエリ
Taro L. Saito, Treasure Data
leo@treasure-data.com
November 13, 2014
@db tech showcase Tokyo 2014 秋葉原UDX
Copyright ©2014 Treasure Data. All Rights Reserved.
2. 自己紹介 @taroleo
• 2002 東京大学 理学部 情報科学科卒
• 2007 Ph.D.
– XMLデータベース、トランザクション処理の研究
– ACM SIGMODなどで研究発表
• ~ 2014 東京大学 情報生命科学専攻 助教
– ゲノムサイエンス研究
• 大規模データ処理、並列・分散コンピューティング
• 2014.3月~ Treasure Data
– ソフトウェアエンジニア, MPP Team Leader
Copyright ©2014 Treasure Data. All Rights Reserved.
2
3. 「データ」に関連するオープンソース活動
• sqlite-jdbc
– SQLite DBMS for Java
– 1ファイル=1DB
Copyright ©2014 Treasure Data. All Rights Reserved.
• snappy-java
– 高速圧縮ライブラリ
– 月に10万回以上ダウンロード
– Sparkでも採用
• msgpack-java
• UT Genome Browser (UTGB)
– 大規模ゲノム情報の可視化
3
4. Prestoとは?
• Facebookが開発している分散SQLエンジン
– ペタスケールのデータに対しインタラクティブ(対話的)な検索が必要に
• それまではHive中心
– 2013年11月にオープンソース化
Copyright ©2014 Treasure Data. All Rights Reserved.
• Prestoの特徴
– CPU使用効率・スピード重視(アドホック検索)
– インメモリ処理
– Javaによる実装
– 教科書的なRDBMSの実装
– ANSI SQLベース
4
5. Prestoの開発態勢
• 主にFacebookチームの6人がGitHub
上で開発
– issue管理もGitHubのみ
– Google group上のMLで議論
• Treasure Dataの貢献数は現在第3位
• 2014年11月現在
– 39 contributors
– 1949 pull requests!
Copyright ©2014 Treasure Data. All Rights Reserved.
7. HDFS
Hive
PostgreSQL, etc.
Daily/Hourly Batch
Interactive query
Dashboard
Commercial
BI Tools
Batch analysis platform" Visualization platform"
8. HDFS
Hive
PostgreSQL, etc.
Daily/Hourly Batch
Interactive query
✓ Less scalable
✓ Extra cost
Dashboard
Commercial
BI Tools
✓ Can’t query against
“live” data directly
Batch analysis platform Visualization platform
✓ More work to manage
2 platforms
9. HDFS
Hive Dashboard
Presto
PostgreSQL, etc.
Daily/Hourly Batch
HDFS
Hive
Dashboard
Daily/Hourly Batch
Interactive query
Interactive query
10. PrestoはSQLレイヤー
• Prestoのコア部分はSQLの実行レイヤーのみ
– 各種ストレージ、DBMSへのアクセスはコネクター経由
– 既存のコネクターや独自実装のコネクターを同時に使用できる
Copyright ©2014 Treasure Data. All Rights Reserved.
• コネクター
– Hiveコネクター
• HDFS上に保存されたデータにアクセス
– Cassandraコネクター
– MySQLコネクター
– PostgreSQLコネクター
10
11. Presto
HDFS
Hive
Dashboard
Daily/Hourly Batch
Interactive query
SQL on any data sets
Cassandra MySQL Commercial DBMSs
12. Hive
TD API /
batch query
Interactive query Web Console
Presto
Treasure Data
PlazmaDB
td-presto connector
13. トレジャーデータとは?
• 米シリコンバレー発日本人創業のビッグデータ関連企業
– 2011年12月、米Mountain Viewにて創業
– 2012年11月、東京丸の内に日本支社設立
• クラウド型データマネージメントサービス「Treasure Data Service」を提供
Copyright ©2014 Treasure Data. All Rights Reserved.
13
芳川裕誠 – CEO
Open source business veteran
太田一樹 – CTO
Founder of world’s largest Hadoop Group
主要投資家
Sierra Ventures – (Tim Guleri)
企業向けソフト・データベース領域での有力VC
Bill Tai
Charles River Ventures, Twitterなどに投資
まつもとゆきひろ
Ruby言語開発者
創業者
Jerry Yang
Yahoo! Inc. 創業者
古橋貞之 – Software Engineer
MessagePack, Fluentd開発者
14. Treasure Data Service
ビッグデータのための「クラウド + マネジメント」一体型サービス
データ収集~保存~分析までワンストップでサポート
Copyright ©2014 Treasure Data. All Rights Reserved.
14
• 毎日数百億規模のレコードが取り込まれている
– 2014年5月に5兆(trillion)レコードに到達
• SQLベース(Hive, Presto, Pigなど)による検索サービスを提供
16. Customer: Pioneer, #1 Auto Electronics Provider
Copyright ©2014 Treasure Data. All Rights Reserved.
16
17. 車載センサーデータ × M2M
競争で先んじたいが、大量のストリーミングデータを
経済的に溜めて分析する仕組みを持っていない
• 車載センサーデータ等を収集
• ブレーキを踏んだ、等
• 自動車内のセンサーデータを分析
新規事業へのフィードバック
Copyright ©2014 Treasure Data. All Rights Reserved. 17
18. O2O(online-to-offline)活用事例
• 購買や行動の履歴を統合し横断的に分析
– なぜ買ってくれたかを理解
– 店舗の顧客をネットストアへ、ネットストアの顧客を店舗へと相互に送客可能に
Copyright ©2014 Treasure Data. All Rights Reserved.
スマホアプリ
ネットストア
リアル店舗
クーポン発行
coupon
レコメンド最適化
メール配信最適化
ID
アクションログ
アクションログ
購入データ
データ統合
+ Amazon Redshift
18
20. TD + Metric Insights
Copyright ©2014 Treasure Data. All Rights Reserved.
20
22. ウェアラブルデバイス センサーデータ × M2M
heroku
競争で先んじたいが、大量のストリーミングデータを
経済的に溜めて分析する仕組みを持っていない
• 機器情報を収集・分析
• バッテリー残量等
• ユーザーの操作情報を収集・分析
新規事業へのフィードバック
Copyright ©2014 Treasure Data. All Rights Reserved. 22
23. TD + Presto
• トレジャーデータ
– 日々大量のデータを収集
• インタラクティブクエリ
– 大量のデータからすばやく知見を得たい
– システムの状態をすばやく知りたい
– データ解析の支援
– 日に数千個のクエリを実行するケースも(バッチ的にも使える)
Copyright ©2014 Treasure Data. All Rights Reserved.
• Presto
– 低レイテンシで結果が得られる
– Hiveの穴を埋めるインタラクティブクエリエンジン
23
24. Presto + BI ツール
Copyright ©2014 Treasure Data. All Rights Reserved.
24
25. Presto
HDFS
Hive
Dashboard
Daily/Hourly Batch
Interactive query
SQL on any data sets Commercial
Cassandra MySQL Commertial DBs
BI Tools
✓ Tableau
✓ ChartIO
✓ ...
Data analysis platform"
26. Prestogres: Presto + PostgreSQL
• ODBCドライバの実装は大変
– 仕様が巨大で複雑
• PostgreSQL界隈の成熟した実装を活用できないだろうか?
• そうして誕生したのが…
https://github.com/treasure-data/prestogres
Copyright ©2014 Treasure Data. All Rights Reserved.
27. Prestogresの仕組み
• PostgreSQLを経由してPrestoにクエリを送信
– pgpool-II(PostgreSQL用のコネクションプール実装)がベース
– PostgreSQLにアクセスできるツール(JDBC, ODBCなど)は全て利用可能に
1. SELECT COUNT(1) FROM tbl1
client pgpool-II + patch
2. select run_presto_as_temp_table(
‘presto_result’,
‘SELECT COUNT(1) FROM tbl1’
);
Copyright ©2014 Treasure Data. All Rights Reserved.
4. SELECT * FROM presto_result;
PostgreSQL
Presto
Coordinator
3. “run_persto_as_temp_table” function
Prestoでクエリを実行
32. Fluentd is Ubuiquitous
• Kubernetes
– GoogleのDocker(コンテナ型ソ
フトウェア)管理ツール
• Fluentdが標準ログコレクタに
Copyright ©2014 Treasure Data. All Rights Reserved.
32
34. 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)
• スキーマの変更なしにパラメータを追加できる
Copyright ©2014 Treasure Data. All Rights Reserved.
34
35. MessagePack: スキーマレスでも型はある
Copyright ©2014 Treasure Data. All Rights Reserved.
35
• レコードはMessagePack形式
• 入力時のデータ型はそのまま保存
– intやstring型のデータが列中に混在した状況でも使える
PlazmaDBがスキーマに合わせて自動型変換を行う
41. Client
Coordinator Connector
Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
3. Coordinator builds
a query plan
Connector plugin
provides metadata
(table schema, etc.)
43. Client
Coordinator Connector
Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
5. Workers read data
through connector plugin
47. Query Planner
SELECT
name,
count(*) AS c
FROM impressions
GROUP BY name
Output
(name, c)
GROUP BY
(name, count(*))
Copyright ©2014 Treasure Data. All Rights Reserved.
SQL
Table schema
impressions (
name varchar
time bigint
)
Table scan
(name:varchar)
+
Output
Exchange
Sink
Final aggregation
Exchange
Sink
Partial aggregation
Table scan
Logical query plan
Distributed query plan
48. Query Planner - Stages
inter-worker
data transfer
pipelined
aggregation
Copyright ©2014 Treasure Data. All Rights Reserved.
Output
Exchange
Sink
Final aggregation
Exchange
Sink
Partial aggregation
Table scan
inter-worker
data transfer
Stage-0
Stage-1
Stage-2
49. Copyright ©2014 Treasure Data. All Rights Reserved.
Output
Exchange
Sink
Partial aggregation
Table scan
Sink
Partial aggregation
Table scan
Execution Planner
• StageをTaskに分割して並列度を上げる
+ Node list
✓ 2 workers
Sink
Final aggregation
Exchange
Sink
Final aggregation
Exchange
Output
Exchange
Sink
Final aggregation
Exchange
Sink
Partial aggregation
Table scan
Worker 1 Worker 2
50. Execution Planner - Split
• 各TaskにはSplitが割り当てられ、並列に実行される
1 split / task
= 1 thread / worker
Copyright ©2014 Treasure Data. All Rights Reserved.
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)
Worker 1 Worker 2
1 split / worker
= 1 thread / worker
52. 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で集約+可視化
Copyright ©2014 Treasure Data. All Rights Reserved.
52
55. TD: Scheduled Query
• 定期的にTDでクエリを実
行
• Prestoクエリの集計にも
Prestoを使っている
Copyright ©2014 Treasure Data. All Rights Reserved.
55
56. td-prestoコネクタ
• Storage
– PlazmaDB
– S3, Riak CS (S3とAPI互換)へのアクセス
• TableScan operator
– バックグラウンドで先にI/Oリクエストを発行(プリフェッチ)
– msgpack-java v07
• v06に比べて2倍以上高速化
– レコード単位ではなく、ページ単位での処理
• Presto 0.69より
Copyright ©2014 Treasure Data. All Rights Reserved.
56
57. トレジャーデータが目指すもの
• 「世の中の誰もが手軽にデータベースを使える」ようにする
• まずは誰もが「データを手軽に正しく集められる」ように
– Fluentd+msgpackで柔軟にデータを取り込む
– plazmadbによる圧縮、スキャンの最適化
Copyright ©2014 Treasure Data. All Rights Reserved.
• 「Presto」
– Hiveの穴を埋める分散SQLエンジン
– データを手軽にすばやく解析
WE ARE HIRING!
57