by shigemk2

当面は技術的なことしか書かない

memo Prestoベースのマネージドクエリサービス Amazon Athena #prestodb

概要

AWS

Athenaの紹介 + AWSのサービス紹介 + Athenaのベストプラクティス

Athena

  • S3のデータに対してSQLを投げるサービス
  • re:Invent 2016
  • tokyoリージョンではまだ使えない

データ分析基盤の進化の流れ

  • 1985 Dataware house
  • 2006 Hadoop clusters
  • 2009 Decoupled EMR clusters
  • 2012 Cloud DWH redshift
  • 2016 clusterless クエリを投げるだけ!

  • サーバーレス

  • 高速なクエリ
  • S3にクエリを投げれるのでロードは必要ない
  • クエリのスキャンに課金(使わなければ発生しない)
  • JDBC / API / CLIからクエリを投げれる

Athenaの想定ユースケース

  • ユースケース
  • データ
  • ユーザー

  • S3にデータを溜め込み続けて、必要が出たときに投げる

アーキテクチャ

  • Prestoと完全互換ではないがPrestoベース
    • 細かい違いはいくつかある
  • Presto on EMRでHive connectorをつかってS3データと読み込むのと同義
  • floatやtime型はathenaにはない
  • AWSのブログには書いている
    • パーティション
    • 列指向フォーマット
    • データ圧縮
    • いちおう無邪気なJSONを置いてもクエリは投げれる

I/Oの制約

  • どのリージョンのS3にも使える
  • リージョンをまたぐと転送料金と時間は別途かかる
  • 暗号化に対応

料金

  • 1TBあたり5ドル
    • 軽いクエリをぽこぽこ投げたい場合はお安い
    • 生のCSVを圧縮したほうが料金は安くなる(ファイルサイズベースなので)

demo

  • cloudtrailのデータを抽出(失敗)

アップデートについて

  • あたらしいSerDeのサポート
  • opencsvserdeのサポート
    • 囲み文字を指定できる
  • パーティションが多いときのスキャン速度を改善
  • msck repair tableの速度を改善
  • オハイオリージョン
  • 入出力データの暗号化
  • JDBCドライバ
  • alter table
  • LZO対応
  • クエリ関連処理がAPIに対応
  • aws sdkやaws cliもAPIに対応した形でアップデート
  • 性能改善

API

  • クエリ実行
  • ネームドクエリ
    • よく使われるクエリの保存

サードパーティー製品対応

  • tableau

Athenaを含むAWSのデータ分析サービス

  • なぜAthenaを出したのか
    • データストレージにデータを置くだけじゃなくて、必要な処理を必要なタイミングでできるようにしたかった
    • データストアとデータ処理の分離
    • 用途に応じた適切な処理方法
    • その中心にS3
  • ETL EMR Glue(正式リリースされてはいない)
  • データウェアハウス RedShift(定常的なものはこちら)
  • BI QuickSight
  • 機械学習 EC2 Batch EMR
  • アドホッククエリ Athena(不定期なものを手軽に抽出したい)

  • 1000単位のモデルを並列に動かす

Athenaに向いていないもの

  • フルスキャン EMR
  • リトライ EMR − 多段ETL処理 EMR Glue
  • サブクエリ JOIN 長期間かかるクエリ redshift

  • Atehna サーバーレスなので利用者では制御できないものがある

    • ピークタイミングのノード数
    • prestoパラメタ設定
    • prestoバージョン固定
    • 料金価格

Presto on EMR

  • クラスタの構築/運用/チューニング
  • インスタンスフリート スポットブロックでコスト削減

Redshift + Spectrum

  • Spectrum RedshiftからS3へ直接データをロードする
  • ほっとデータに対する重いワークロード主体の場合はredshiftを使ったほうがいい
  • spectrumで取ってきたデータとredshiftとで組み合わせて抽出できる

事例 NASDAQ

  • オンプレでprestoを動かしたけど、サイジングとかの関係でしんどかった
  • でもフィアルサイズが大きすぎてS3には全部入れられない
  • ホットデータはRedshift
  • 古いデータはpresto on EMR x BI

  • Dataxu

  • Japan Taxi
    • athenaしつつ、digdag/embulkなどと組み合わせてデータを加工整形

まとめ

  • Athena S3上のデータに対するprestoベースのインタラクティブなクエリサービス
  • 多くの機能追加/機能改善
  • Athenaは万能じゃないので適材適所

質疑

  • プロトコルはs3のみ(s3aとかは使えない)
  • Athenaはread-only(コンシステンシーの問題は起きない)
  • ユースケースとして重たいレポートを提供したいならSpectrum
  • アドホックにデータを見たい場合はAthena
    • 両方共我々は力を入れている