のた犬のうまい猫めし

どら猫が作る、のた犬のための飯、略称、どら飯について語りつつ、各種技術、経済系セミナーに参加した報告、OSSいじってみた等のネタを入れていきます。更新情報はtwitterの@nota_inuにて。

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が混在することもできる。