not enterpriseな会社でredshiftを使ってみた

57
Not Enterpriseな会社で Redshiftを使ってみた

Upload: yutaka-hoshino

Post on 15-Jan-2015

5.728 views

Category:

Self Improvement


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Not Enterpriseな会社でRedshiftを使ってみた

Not Enterpriseな会社で

Redshiftを使ってみた

Page 2: Not Enterpriseな会社でRedshiftを使ってみた

星野 豊 (@con_mame)

クックパッド株式会社 インフラストラクチャー部

AWS / MySQL / DataStore etc...

http://d.conma.me/

http://facebook.com/conmame

Page 3: Not Enterpriseな会社でRedshiftを使ってみた

BIG DATA

Page 4: Not Enterpriseな会社でRedshiftを使ってみた

世はまさにビッグデータ

ログ

アクセスログ

行動ログ

購入・決済ログ

クリック・動線

Page 5: Not Enterpriseな会社でRedshiftを使ってみた

ビッグデータ

Page 6: Not Enterpriseな会社でRedshiftを使ってみた

DWH / BI tool

Page 7: Not Enterpriseな会社でRedshiftを使ってみた

数千万~数億

Page 8: Not Enterpriseな会社でRedshiftを使ってみた

(  ゚д゚)  ・・・      (つд⊂)ゴシゴシ      (;゚д゚)  ・・・      (つд⊂)ゴシゴシゴシ      _̲,  ._̲  (;゚  Д゚)  …!?

Page 9: Not Enterpriseな会社でRedshiftを使ってみた

    ∧_̲∧  ⊂(#・ω・)  置き場所が無い!    /      ノ∪    し―-‐‑‒J  |l|  |                    ⼈人ペシッ!!                __                \    \                     ̄ ̄

Page 10: Not Enterpriseな会社でRedshiftを使ってみた

Redshift

Page 11: Not Enterpriseな会社でRedshiftを使ってみた

Redshift?

Page 12: Not Enterpriseな会社でRedshiftを使ってみた

Redshift?データウェアハウス

フルマネージド

拡張性が高い

数TB~数PB

カラムナ型

リーズナブル?

Page 13: Not Enterpriseな会社でRedshiftを使ってみた

Architecture

Page 14: Not Enterpriseな会社でRedshiftを使ってみた
Page 15: Not Enterpriseな会社でRedshiftを使ってみた
Page 16: Not Enterpriseな会社でRedshiftを使ってみた

使ってみた

Page 17: Not Enterpriseな会社でRedshiftを使ってみた

BI tool

市場動向

ユーザ動向

サイト回遊

マーケティング

商品開発

Page 18: Not Enterpriseな会社でRedshiftを使ってみた

Original tool

ユーザ動向

検索ワード動向

監査

サポート

developer

more user

Page 19: Not Enterpriseな会社でRedshiftを使ってみた

COOKPAD的Redshift行動ログ

検索ログ

ユーザ属性

会員情報

監査ログ

Page 20: Not Enterpriseな会社でRedshiftを使ってみた

Redshiftを選んだわけMySQL Instance

バックアップ -> 自前

容量 -> 増え続ける

クエリ実行速度 -> レコード数の増加と共に遅くなる

運用負荷 -> パーテショニングなどのスクリプト作成

RDS

容量 -> 増やしやすいが増え続ける

クエリ実行速度 -> レコード数の増加と共に遅くなる

Page 21: Not Enterpriseな会社でRedshiftを使ってみた

Redshiftを選んだわけKVS

容量 -> メモリサイズに引っ張られる

検索性 -> 柔軟なクエリは使えない

運用負荷 -> バックアップなどは自前

Redshift

クラスタを拡張しやすい

バックアップ・スナップショット自動

リカバリも簡単

SQLが使える

Page 22: Not Enterpriseな会社でRedshiftを使ってみた

スケジュール 検証~RI購入

2 weeks

speed / backup / operation / specific

様々なメトリクスで測定

最初は監査ログは考慮していなかった

RI購入~ログ収集開始

XL * 2

1 week

Page 23: Not Enterpriseな会社でRedshiftを使ってみた

1日の検証が終わったらSnapshotを作成してクラスタを

Delete

クラスタをDeleteするのでSnapshotのS3保存料金はかかる

がクラスタを起動しているより安い

検証開始時はSnapshotからクラスタを起動

データ

メタデータ (ユーザ・クラスタスペック・台数)

FQDN ・ Parameter Group

Snapshotに必要なデータが全て入っているのですぐに検証を

再開出来る

ただし、Security Groupは毎回Modifyする

Page 24: Not Enterpriseな会社でRedshiftを使ってみた

app app app

fluentproxy

fluentproxy

manage

Separate audit from general logs

TREASURE DATA

Page 25: Not Enterpriseな会社でRedshiftを使ってみた

app app app

fluentproxy

fluentproxy

manage

Separate audit from general logs

DataPipline supportTREASURE DATA

Page 26: Not Enterpriseな会社でRedshiftを使ってみた

app / manage server -> fluent-proxy

通常のログと監査用ログは別proxyへ

fluentd-plugin -> S3

30分毎にS3にUpload

S3 -> Redshift

copyを発行

Page 27: Not Enterpriseな会社でRedshiftを使ってみた

Development

Page 28: Not Enterpriseな会社でRedshiftを使ってみた

staging

Page 29: Not Enterpriseな会社でRedshiftを使ってみた

DB

複数のDBを作成

development

many development tables

production

many tables (Each system)

Page 30: Not Enterpriseな会社でRedshiftを使ってみた

UserRoot User

Management All DB and Cluster

Service User

Each Service and WLM User Group

Development User

Page 31: Not Enterpriseな会社でRedshiftを使ってみた

1つのクラスタに複数のDB

開発用のDB

複数サービス用のテーブル

サービス・用途ごとに異なるクエリ

実行時間

対象データ

Page 32: Not Enterpriseな会社でRedshiftを使ってみた

Work Load Management

Page 33: Not Enterpriseな会社でRedshiftを使ってみた

Redshiftへのクエリはキューごとに管理される

キュー毎に並列度が設定されている

defaultでは1つのキュー・5並列

並列度を超えた場合は先行クエリが終わるのを待つ

キューの識別

ユーザ

クエリグループ

サーバリソースは全てのキューで共有

Page 34: Not Enterpriseな会社でRedshiftを使ってみた

最優先

アプリケーションから発行されるクエリ

並列度高め

優先度低

バッチなどから発行されある程度時間がかかってい

いもの

どうにもこうにも時間内に収まらない場合はクラス

タサイズアップも検討

最低

開発用

Page 35: Not Enterpriseな会社でRedshiftを使ってみた

Parameter Group -> WLM

Max 8キュー (default キュー含)

並列度合計 15

Superuserキュー 並列度1 (設定不可)

wildcardproduction_a

production_b

Timeout

statement_timeout

Timeoutとstatement_timeout

短い方優先

default queue

Page 36: Not Enterpriseな会社でRedshiftを使ってみた

1. Superuserでログインしていて、クエリグルー

プでSuperuserを指定している場合はSuperuserキ

ューで実行

2. ログインユーザがユーザグループに含まれて

いる場合は、一番最初にマッチするユーザグルー

プで指定されているキューで実行

3. ユーザグループに存在しておらず、クエリグ

ループが指定されている場合は、最初にマッチし

たクエリグループのキューで実行

4. どれにも当てはまらない場合はデフォルトキ

ューで実行

ユーザグループ > クエリグループ

Page 37: Not Enterpriseな会社でRedshiftを使ってみた

http://bit.ly/15PNAvD

ユーザグループ

クエリグループ

Page 38: Not Enterpriseな会社でRedshiftを使ってみた

Access Control

Page 39: Not Enterpriseな会社でRedshiftを使ってみた
Page 40: Not Enterpriseな会社でRedshiftを使ってみた

クエリやデータのロード状況を確認したい

実行計画

クラスタリソース状況

クエリ毎のリソース使用状況・実行時間

Page 41: Not Enterpriseな会社でRedshiftを使ってみた

ViewQueriesInConsole

Describe*

Page 42: Not Enterpriseな会社でRedshiftを使ってみた

redshift:get*

Page 43: Not Enterpriseな会社でRedshiftを使ってみた

Resource Type ARN

Clusterarn:aws:redshift:ap-northeast-1:123456789012:cluster:oreore-

cluster

Parameter Grouparn:aws:redshift:ap-

northeast-1:123456789012:parametergroup:oreore-pm-group

Security Grouparn:aws:redshift:ap-

northeast-1:123456789012:securitygroup:oreore-sg

Snapshotarn:aws:redshift:ap-northeast-1:123456789012:snapshot:oreore-

cluster/*

Subnet Grouparn:aws:redshift:ap-

northeast-1:123456789012:subnetgroup:oreore-subnet

Page 44: Not Enterpriseな会社でRedshiftを使ってみた

{

“Statement": [

{

"Action": [

"redshift:CreateClusterSnapshot"

],

"Effect": "Allow",

"Resource": [

"arn:aws:redshift:ap-northeast-1:123456789012:snapshot:oreore-cluster/*"

}

]

}

管理権限を細かくIAMユーザに割り当て可能

Page 45: Not Enterpriseな会社でRedshiftを使ってみた

Query

Page 46: Not Enterpriseな会社でRedshiftを使ってみた
Page 47: Not Enterpriseな会社でRedshiftを使ってみた
Page 48: Not Enterpriseな会社でRedshiftを使ってみた

Generate Compiled Code

libpq and ODBC

JDBC

事前にアクセスされそうなクエリは流しておく

最初の実行は数秒かかる

プレースホルダに入る値が変わってもOK

Page 49: Not Enterpriseな会社でRedshiftを使ってみた

Happening

Page 50: Not Enterpriseな会社でRedshiftを使ってみた

キーワード ▲キーワード ▲キーワー

ド...

select substring(cast(substring(keywords from 5) as

varchar(100)) from 9) from hoge;

Page 51: Not Enterpriseな会社でRedshiftを使ってみた

_人人人人人人人人人人人人_

> Leader Node is DEAD <

‾^Y^Y^Y^Y^Y^Y^Y^^Y^Y^Y^Y^‾

Page 52: Not Enterpriseな会社でRedshiftを使ってみた

UTF8 な文字のバイト境界を下手にぶった切ると

Leader Nodeが落ちてるぽいようで

切断されて数十秒繋がらなくなる

7月下旬に治った

Page 53: Not Enterpriseな会社でRedshiftを使ってみた

Maintenance Window中でもCOPYが成功し

てしまう

調査お願い中…

Page 54: Not Enterpriseな会社でRedshiftを使ってみた

Maintenance Windowの時間でメンテナン

スが告知されている場合はCOPYを実行し

ないように改良

Page 55: Not Enterpriseな会社でRedshiftを使ってみた

Conclusion

Page 56: Not Enterpriseな会社でRedshiftを使ってみた

ユーザ動向だけじゃない

監査ログにも

最初は複数システムまとめてもOK

WLMはしっかりと

メンテナンス動向は要確認

Watch Forum

Page 57: Not Enterpriseな会社でRedshiftを使ってみた

Thank you!!