僕とヤフーと時々Teradata #prestodb

47
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. ヤフー株式会社 岡田幸大 Presto 僕とヤフーと時々Teradata

Transcript of 僕とヤフーと時々Teradata #prestodb

Page 1: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ヤフー株式会社

岡田幸大

Presto

僕とヤフーと時々Teradata

Page 2: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

自己紹介

• 岡田 幸大

• github - yuokada

• Like: #python, #golang

• 2009/04 ヤフー入社(新卒)

• 2016/10 クエリーエンジン・チーム〜現在

• Presto歴 半年とチョット

Page 3: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

アジェンダ

• 会社紹介

• クラスター事例紹介

• Presto周りのツール・OSS紹介

• presto-audit

• presto-admin (おまけ)

• まとめ

Page 4: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Y!J is Multi Big Data Company

サービス数は100以上

メディア、コマース、金融・決済など、幅広くサービスを展開

Page 5: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Y!J is Multi Big Data Company

データのバラエティも100以上

検索キーワード、ビュー/クリック、コンテンツ、購買情報、など、多様なデータを活用可能

Page 6: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Y!J is Multi Big Data Company

6

月間 674億PV / 1日9,000万UB

PC + その他

281億 PV

Smart Phone

393億 PVFY16-3Q事業指標 http://ir.yahoo.co.jp/jp/archives/present/2016q3/index.html

Page 7: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Y!J is Multi Big Data Company

NoSQLHadoop RDB

7,000 nodes

150 PB

1000DBs

2,000nodes

Object

Storage

1,500nodes

Page 8: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Y!J is Multi Big Data Company

様々なストレージにあるデータをインタラクティブに分析する必要がある

そこで選ばれたのがPresto

これらのマルチビッグデータを活かすには?

Page 9: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

広告入稿系レポートシステム

Page 10: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

あるところにこんなシステムがありました...

Page 11: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

• ユーザーの操作履歴をNFS上に保存

• ログファイルはPlain Text & 独自フォーマット• 3年間で約40TB(非圧縮)

• 集計・レポート生成処理はgrepベース

広告入稿システム - システムサマリー

重いレポートの出力にかかる時間: 80分

Page 12: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース – その1

2016年某日、NFS管理チームからのお知らせ。「2017年9月でNFS退役させるからヨロシク」

EOSL宣言!そしてシステム刷新の気配!

Page 13: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

まずは、NFSの後継探し

ヤフー社内で開発・運用され実績もあるObject Storageを選定。

Object Storageの詳細はslideshareで。

Page 14: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

NFSのEOSL問題は解決した。だが、レポート出力が遅い問題が残っている。

Page 15: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

そこで出てきたのが

Page 16: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

Prestoを採用するならファイルフォーマットも

カラムナフォーマットに変えよう!

Page 17: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

• 社内で実績があった• Hadoopクラスターで

採用済み• 社内のノウハウを活用

しやすい

ORCを選んだ理由

Page 18: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

• ORC化前: 1ヶ月分のログで約770GB(非圧縮)• ORC化後: 1ヶ月分のログで約20GB

ORC化でファイルサイズが劇的に減少

圧縮率97%の驚異的なサイズダウン!

Page 19: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

ディレクトリ構成

旧システム(Before Presto)

アカウント毎の1階層

現行システム(After Presto)

日時とアカウントのハッシュ値による2階層

Object Storage上のファイル配置を見直し

Page 20: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

旧システム 現行システム

ログの保存場所 NFS Object Storage

ログファイルのフォーマット

Plain text &独自フォーマット

ORCフォーマット

ディレクトリ構成 アカウント毎 日毎&アカウントのハッシュ値で分散

集計処理 grepベース Presto

大幅なモダン化を達成!!

Page 21: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース – その1

JobQueue

Frontend

Batch

Object Storage

Page 22: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

80

1.50

10

20

30

40

50

60

70

80

90

レポートAの出力までの時間

レポート出力にまでの時間

Before After

ケース – その1

旧システムで80分かかっていたレポートが

新システムで約1分に短縮!!

約97%の時間短縮!

レポート出力まで時間

Page 23: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ケース - その1

今回のシステム刷新はほぼ成功(自分視点)。ここまでするのにいろいろ苦労もありました。

Page 24: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

今回のPresto導入で辛かったこと

• Javaに慣れてないと変換が辛い

• PrestoのINSERTでORCファイルを生成可能だがPrestoのリソースをSELECTに集中させたいので❎

ORCファイルへの変換が手間

Page 25: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

今回のPresto導入で辛かったこと

• クエリの条件次第でベストなディレクトリは違う• Ex. 月次レポート• Ex. アカウント毎のレポート

• どのクエリに対しても一定程度の時間で完了するディレクトリ構成を見つけるまでに時間を消費した

Object Storage上のディレクトリ構成

Page 26: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

今回のPresto導入で辛かったこと

• coordinatorが冗長化出来ない• 1クラスターに2台以上Coordinatorが登録出来ない• ダウンタイム・ゼロの運用は厳しい

• NW設計大事!!• NWトラフィックが凄く出る• DCまたいだトラフィックはダメ絶対!

他にも課題が沢山

細かい話は懇親会で。

Page 27: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Presto周辺のツール・OSS紹介

Page 28: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-auditの紹介

Page 29: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-auditの紹介

1. Prestoの再起動でクエリログが消える

2. クエリの保存数に上限

運用面からのPrestoの課題

Page 30: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-auditの紹介

• SYSTEMコネクターでクエリ履歴を取得• 取得したクエリ情報をObject Storageに保存

クエリログ保存のための初期実装

Page 31: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-auditの紹介

1. ログ保存までにPrestoで再起動が発生すると取りこぼす

2. 実行頻度を上げるとシステムの負荷が上がる

クエリログ保存のための初期実装の課題

Page 32: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-auditの紹介

• Teradataに質問してみた。• ヤフーとTeradataで結んでいるCoDev契約の一環。

いわゆる、コンサルティング契約。

• Teradataからの回答でEventListenerを使った実装を提案された。

• EventListenerの詳細は割愛。

初期実装の課題を解決するために…

https://prestodb.io/docs/current/develop/event-listener.html

Page 33: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-auditの紹介

• EventListener InterfaceのqueryCompleted methodを実装

• QueryCompletedEventから各種統計情報を取り出し• 取得レコード数• 実行時間、etc

• jsonに変換しファイルに出力

一部カット

presto-auditの実装解説

Page 34: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-auditの紹介

• presto-auditでファイルに出力したログをfluentdで回収

• fluentdからObject Storageにアップロード

• (Future Work) • 利用状況の可視化• データ増加に伴うクエリの遅延検知• Workerのオートスケール

ヤフーでの利用例

Page 35: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-auditの紹介

githubで近日公開予定。

(ただいま、Teradataレビュー + 社内手続き中💦)

presto-audit 今後の予定

https://github.com/yahoojapan

Page 36: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-adminの紹介

Page 37: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-adminの紹介

• Teradataが開発した運用ツール• Python製運用ツールFabricのラッパー

• Presto周りの様々なオペレーションをカバー• Prestoサーバーの起動・停止• カタログの追加・削除• rpmパッケージのインストール• etc

presto-adminとは?

Page 38: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-adminの紹介

Pros

• インストールが簡単 (ただし、2.x以降)

• Fabricの拡張なので学習コスト低め

Cons

• 一部機能がRedhat系OSのみでのサポート

• 複数クラスターの管理が不可

• 並列数の制御が不可 = クラスター全台を並列でオペレーション

開発者向け軽量管理ツールとしてGood

Presto-adminのPros/Cons

Page 39: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-admin

1. pip経由でpresto-adminのインストール

2. config.jsonの作成

3. パッケージのインストール(jdk, presto本体, etc)

4. カタログの作成・追加

presto-adminのクイックスタート

Page 40: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-admin

たったこれだけ! pipコマンド1発でインストール

$ pip install prestoadmin

1.pip経由でインストール

Page 41: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-admin

$ cd $HOME/.prestoadmin/

$ vim config.json

$ cat config.json

{ "username": "yuokada", "coordinator": "coordinator.example.com","workers": ["worker[01-03].example.com”]

}

2. config.jsonの作成

注目

Page 42: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

閑話休題: presto-admin

range format

• 2.2からの新機能

• workerノードで使える短縮記法

Page 43: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

閑話休題: presto-admin

2.1以前の記法 2.2で使える記法

Page 44: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-admin

• $ presto-admin package install /local/path/to/jdk.rpm

• # ローカルのPresto rpmパッケージをインストール$ presto-admin server install

/local/path/to/presto.rpm

• # 最新のPrestoをインストール$ presto-admin server install latest

3. jdk、Presto本体のインストール

Page 45: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

presto-admin

# hiveとの接続プロパティファイルを作成$ cd $HOME/.prestoadmin/catalog

$ vim myhive.properties

# myhiveのカタログをクラスター全台にインストール$ presto-admin catalog add myhive

$ presto-admin server restart

4. カタログファイルの追加

Page 46: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

まとめ

• 社内の多種多様なストレージをつなぐため日々尽力

• prestoを始めるのは簡単• presto-adminと合わせてスタートするのがGood

• 運用者視点から見ると課題は多い• 利用方法を間違えなければスゴく良いプロダクト

Y!JでのPrestoはまだ始まったばかり

Let’s Play

Page 47: 僕とヤフーと時々Teradata #prestodb

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

EOP

Thank you!