Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

9,885 views

Published on

Treasure DataではFluentdなどで収集したデータに対し、Prestoによる低レイテンシクエリサービスを提供しています。これによりユーザーはすばやくデータに関する知見を得ることができ、データ分析の生産性を向上できます。このスライドでは分散SQLエンジンであるPrestoの特徴とその実装について紹介します。

この内容はdbtech showcase 2014 Tokyo @秋葉原UDX で紹介しました。
http://www.insight-tec.com/dbts-tokyo-2014.html

Published in: Engineering
  • Hello! High Quality And Affordable Essays For You. Starting at $4.99 per page - Check our website! https://vk.cc/82gJD2
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

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

×