Upload
insight-technology-inc
View
451
Download
5
Embed Size (px)
DESCRIPTION
Treasure DataではFluentdなどで収集したデータに対し、Prestoによる低レイテンシクエリサービスを提供しています。これにより、ユーザーはすばやくデータに関する知見を得ることができ、データ分析の生産性を向上できます。このセッションでは、分散SQLエンジンであるPrestoの特徴とその実装について紹介します。
Citation preview
Copyright ©2014 Treasure Data. All Rights Reserved.
Prestoで実現するインタラクティブクエリ
Taro L. Saito, Treasure Data [email protected] November 13, 2014 @db tech showcase Tokyo 2014 秋葉原UDX
Copyright ©2014 Treasure Data. All Rights Reserved.
自己紹介 @taroleo • 2002 東京大学 理学部 情報科学科卒 • 2007 Ph.D.
– XMLデータベース、トランザクション処理の研究 – ACM SIGMODなどで研究発表
• ~ 2014 東京大学 情報生命科学専攻 助教 – ゲノムサイエンス研究
• 大規模データ処理、並列・分散コンピューティング
• 2014.3月~ Treasure Data – ソフトウェアエンジニア, MPP Team Leader
2
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
Copyright ©2014 Treasure Data. All Rights Reserved.
Prestoとは? • Facebookが開発している分散SQLエンジン
– ペタスケールのデータに対しインタラクティブ(対話的)な検索が必要に • それまではHive中心
– 2013年11月にオープンソース化
• Prestoの特徴 – CPU使用効率・スピード重視(アドホック検索) – インメモリ処理 – Javaによる実装 – 教科書的なRDBMSの実装 – ANSI SQLベース
4
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!
Copyright ©2014 Treasure Data. All Rights Reserved.
バッチクエリ(Hive) とアドホッククエリ (Presto)
6
TDでは独自にリトライ機構を導入
スループット重視 CPU使用効率、レスポンスタイム重視
耐障害性
HDFS
Hive
PostgreSQL, etc.
Daily/Hourly Batch Interactive query
Commercial BI Tools
Batch analysis platform" Visualization platform"
Dashboard
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
HDFS
Hive Dashboard
Presto
PostgreSQL, etc.
Daily/Hourly Batch
HDFS
Hive
Dashboard
Daily/Hourly Batch
Interactive query
Interactive query
Copyright ©2014 Treasure Data. All Rights Reserved.
PrestoはSQLレイヤー • Prestoのコア部分はSQLの実行レイヤーのみ
– 各種ストレージ、DBMSへのアクセスはコネクター経由 – 既存のコネクターや独自実装のコネクターを同時に使用できる
• コネクター – Hiveコネクター
• HDFS上に保存されたデータにアクセス – Cassandraコネクター – MySQLコネクター – PostgreSQLコネクター
10
Presto
HDFS
Hive
Dashboard
Daily/Hourly Batch Interactive query
Cassandra MySQL Commercial DBMSs
SQL on any data sets
Hive
TD API / Web Console Interactive query
batch query
Presto
Treasure Data
PlazmaDB
td-presto connector
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開発者
Copyright ©2014 Treasure Data. All Rights Reserved.
Treasure Data Service ビッグデータのための「クラウド + マネジメント」一体型サービス
データ収集~保存~分析までワンストップでサポート
14
• 毎日数百億規模のレコードが取り込まれている – 2014年5月に5兆(trillion)レコードに到達
• SQLベース(Hive, Presto, Pigなど)による検索サービスを提供
Copyright ©2014 Treasure Data. All Rights Reserved.
Over 100 customers, including:
15
Copyright ©2014 Treasure Data. All Rights Reserved.
Customer: Pioneer, #1 Auto Electronics Provider
16
Copyright ©2014 Treasure Data. All Rights Reserved. 17
競争で先んじたいが、大量のストリーミングデータを 経済的に溜めて分析する仕組みを持っていない
新規事業へのフィードバック
• 車載センサーデータ等を収集 • ブレーキを踏んだ、等
• 自動車内のセンサーデータを分析
車載センサーデータ M2M ×
Copyright ©2014 Treasure Data. All Rights Reserved.
O2O(online-to-offline)活用事例 • 購買や行動の履歴を統合し横断的に分析
– なぜ買ってくれたかを理解 – 店舗の顧客をネットストアへ、ネットストアの顧客を店舗へと相互に送客可能に
リアル店舗
スマホアプリ
ネットストア
メール配信最適化
クーポン発行
レコメンド最適化
coupon
ID
アクションログ
アクションログ
購入データ
データ統合
+ Amazon Redshift
18
Copyright ©2014 Treasure Data. All Rights Reserved.
ゲームソリューション導入事例
• 20タイトル、2000台以上のサーバからのログを収集・保管 – 分析、ゲームの改善に活用 – 各デバイスからのアクセスログ, ユーザーの行動を可視化
Game1 Game2 Game3
KPI A
KPI B
KPI C
横断分析
縦断分析
19
Copyright ©2014 Treasure Data. All Rights Reserved.
TD + Metric Insights
20
Copyright ©2014 Treasure Data. All Rights Reserved.
Pebble: Wearable Tech
21
Copyright ©2014 Treasure Data. All Rights Reserved. 22
競争で先んじたいが、大量のストリーミングデータを 経済的に溜めて分析する仕組みを持っていない
新規事業へのフィードバック
• 機器情報を収集・分析 • バッテリー残量等
• ユーザーの操作情報を収集・分析
ウェアラブルデバイス センサーデータ M2M ×
heroku
Copyright ©2014 Treasure Data. All Rights Reserved.
TD + Presto • トレジャーデータ
– 日々大量のデータを収集
• インタラクティブクエリ – 大量のデータからすばやく知見を得たい – システムの状態をすばやく知りたい – データ解析の支援
– 日に数千個のクエリを実行するケースも(バッチ的にも使える)
• Presto – 低レイテンシで結果が得られる – Hiveの穴を埋めるインタラクティブクエリエンジン
23
Copyright ©2014 Treasure Data. All Rights Reserved.
Presto + BI ツール
24
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"
Copyright ©2014 Treasure Data. All Rights Reserved.
Prestogres: Presto + PostgreSQL • ODBCドライバの実装は大変
– 仕様が巨大で複雑
• PostgreSQL界隈の成熟した実装を活用できないだろうか?
• そうして誕生したのが…
https://github.com/treasure-data/prestogres
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
Copyright ©2014 Treasure Data. All Rights Reserved.
Tableau Desktop
28
Copyright ©2014 Treasure Data. All Rights Reserved. 29 TD + chartio.com
Copyright ©2014 Treasure Data. All Rights Reserved.
データの収集
30
Copyright ©2014 Treasure Data. All Rights Reserved.
Fluentd: データを正しく集めるための入り口
31
fluentd.org
Copyright ©2014 Treasure Data. All Rights Reserved.
Fluentd is Ubuiquitous • Kubernetes
– GoogleのDocker(コンテナ型ソフトウェア)管理ツール
• Fluentdが標準ログコレクタに
32
Copyright ©2014 Treasure Data. All Rights Reserved.
PlazmaDB: スキーマレス・列志向ストレージ
33
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
Copyright ©2014 Treasure Data. All Rights Reserved.
MessagePack: スキーマレスでも型はある
35
• レコードはMessagePack形式 • 入力時のデータ型はそのまま保存
– intやstring型のデータが列中に混在した状況でも使える
PlazmaDBがスキーマに合わせて自動型変換を行う
Copyright ©2014 Treasure Data. All Rights Reserved.
Presto:列志向のクエリプランによる最適化
• s
36 データ読み出しの最適化
Copyright ©2014 Treasure Data. All Rights Reserved.
Prestoのアーキテクチャ
37
Client
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
Client
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service 1. find servers in a cluster
Client
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
2. Client sends a query using HTTP
Client
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
3. Coordinator builds a query plan
Connector plugin provides metadata (table schema, etc.)
Client
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
4. Coordinator sends tasks to workers
Client
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
5. Workers read data through connector plugin
Client
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
6. Workers run tasks in memory
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
7. Client gets the result from a worker
Client
Client
Coordinator Connector Plugin
Worker
Worker
Worker
Storage / Metadata
Discovery Service
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
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
Copyright ©2014 Treasure Data. All Rights Reserved.
Sink
Partial aggregation
Table scan
Sink
Partial aggregation
Table scan
Execution Planner
• StageをTaskに分割して並列度を上げる
+ Node list ✓ 2 workers
Sink
Final aggregation
Exchange
Output
Exchange
Sink
Final aggregation
Exchange
Sink
Final aggregation
Exchange
Sink
Partial aggregation
Table scan
Output
Exchange
Worker 1 Worker 2
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
Copyright ©2014 Treasure Data. All Rights Reserved.
Presto: Web Monitor • TPC-H Q5
51
1053
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
Copyright ©2014 Treasure Data. All Rights Reserved.
Fluentdによるサービスのモニタリング
53
Hive
Presto
Copyright ©2014 Treasure Data. All Rights Reserved.
Librato MetricsによるPrestoサービスの監視
54
Copyright ©2014 Treasure Data. All Rights Reserved.
TD: Scheduled Query • 定期的にTDでクエリを実行
• Prestoクエリの集計にもPrestoを使っている
55
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
Copyright ©2014 Treasure Data. All Rights Reserved.
トレジャーデータが目指すもの
• 「世の中の誰もが手軽にデータベースを使える」ようにする
• まずは誰もが「データを手軽に正しく集められる」ように – Fluentd+msgpackで柔軟にデータを取り込む – plazmadbによる圧縮、スキャンの最適化
• 「Presto」 – Hiveの穴を埋める分散SQLエンジン – データを手軽にすばやく解析
57
WE ARE HIRING!