SlideShare a Scribd company logo
既存Redshift/ETLから
Spectrum/Glueへの移⾏を
徹底解明!
秋本 ⼤樹
ネットビジネス本部
データマネジメントグループ
データプラットフォームチーム
1
秋本 ⼤樹
株式会社 リクルートライフスタイル
ネットビジネス本部
データマネジメントグループ
データプラットフォームT
Facebook: daiki.akimoto.50
2011年 ユーザ系SIerに⼊社
• 客先常駐でインフラ構築のPM
• 購買データを⽤いたデータ分析
2014年 ゲーム会社に転職
• ゲームデータ分析基盤の構築
• 社内KPI算出の⾃動化
2017年12⽉より現職
2/38
3/38
会社紹介
4/38
保持するデータ
5/38
HPB HPG
JLN
事業データ
CSV
外部データ
S3
Redshift
Redshift (mirror)
BigQuery
Cloud Storage
アクセスログ
アプリログ Treasure Data
ORACLE
Exadata
データ分析基盤
6/38
BigQuery
Cloud Storage
アプリログ Treasure Data
ORACLE
Exadata
CSV
外部データ
S3
Redshift
Redshift (mirror)
アクセスログ
事業データ
HPB HPG
JLN
今回はRedshiftにフォーカス
7/38
実データ容量
約120TB
(クラスタは
ds2.8xlarge(16TB)*11node=176TB
で構成)
ユーザアカウント数
1,200
クエリ数
20,000/day
テーブル数(データマートも含む)
約4,000
Redshift利⽤状況
ETL処理
JP1によりETL処理を制御しており
オンプレDBデータをS3を経由して
RedshiftにCOPYしている
HPB HPG
JLN
S3
Redshift
JP1により
スケジュール実行
データ抽出
COPY
.end
オンプレサーバ
.endファイルを
ポーリングし
完了次第COPY
EC2
オンプレDB
アップロード
TSV
8/38
ETL処理の単位
複数テーブルを
事業領域と優先度でグループ化して
毎⽇のロードを⾏なっている。
後続のマート作成で使⽤するものの
優先度を⾼くしている。
HPG
優先度⾼
ロード
HPB
優先度⾼
ロード
HPG
優先度低
ロード
JP1
ロード開始
早朝 夜
ロード開始
HPG
マートA
作成
HPG
マートC
作成
HPG
マートB
作成
HPB
優先度低
ロード
HPB
マートAʼ
作成
HPB
マートCʼ
作成
HPB
マートBʼ
作成
…
9/38
マート作成処理
各優先ロードが完了次第
外部DWHからのデータマート抽出、
CTAS等を⽤いたマート作成処理が動く
優先ロードの完了を
トリガーにしてJP1から
マート作成処理を実行
Redshift
オンプレサーバ
ORACLE
Exadata
BigQuery
マートデータ
抽出
外部DWHから
抽出したマートデータを
書き込み
CTAS等を用いて
Redshift内部で
マートを作成
マートデータ
抽出
10/38
Redshiftに対する⼀⽇の処理
事業毎に並列して
複数の処理が動き
終⽇Redshiftに対する負荷を
引き上げている
HPG
優先度⾼
ロード
HPB
優先度⾼
ロード
HPG
優先度低
ロード
JP1
ロード開始
早朝 夜
ロード開始
HPG
マートA
作成
HPG
マートC
作成
HPG
マートB
作成
HPB
優先度低
ロード
HPB
マートAʼ
作成
HPB
マートCʼ
作成
HPB
マートBʼ
作成
…
11/38
Redshiftへの負荷は過⼤
Redshiftへの負荷が⾼く
例えばETL処理は夜23時過ぎまでかかる
ETL処理 マート作成処理
ユーザからの
アドホック
クエリ
Redshift
12/38
⼀時間あたりのコミット数
⽇中帯のコミット数は⼀時間あたり300を超え
また待ち時間も30秒を超えることがある
0
10
20
30
40
50
60
70
80
90
100
0
100
200
300
400
500
600
700
800 6/50
6/56
6/512
6/518
6/60
6/66
6/612
6/618
6/70
6/76
コミット数
コミット平均待ち秒数
秒
13/38
ユーザレスポンス
軽い分析クエリでも
10秒以上かかることがあり
体感的にもかなり遅い
14/38
退避Redshiftの導⼊
2013年にRedshift導入
2016年にユーザレスポンス悪化
業務に影響が出始める
ユーザクエリとバッチ処理を
一時的に分離する措置が取られる
ユーザクエリ実行を一時的に退避する
退避クラスタを構築
(現在はds2.8xlarge(16TB)*6node=96TBで構築)
15/38
退避Redshiftの仕組み
S3
本番
Redshift
⼀⽇⼀回
ロード
退避
Redshift
毎週⼟曜
同期
毎週⼟曜に本番Redshiftの
スナップショットを⽤いて
退避Redshiftを作成する
16/38
退避Redshift
S3
本番
Redshift
⼀⽇⼀回
ロード
鮮度を求めないデータに関しては
退避を使うことで
ユーザはレスポンスを早くできる
退避
Redshift
毎週⼟曜
同期
本番Redshift
(⼀⽇⼀回)
退避Redshift
(毎週⼟曜)
データの
鮮度
新鮮なデータ 古いデータ
負荷 ⾼い 低い
レスポンス 遅い 速い
17/38
Slackによるデータロード
本番Redshift
(⼀⽇⼀回)
退避Redshift
(毎週⼟曜)
データの
鮮度
新鮮なデータ
負荷 ⾼い 低い
レスポンス 遅い 速い
ユーザがSlackで呟くことで
S3を介して新鮮なデータが
退避Redshiftにも⼊る
呟く
Slack
S3
新鮮なデータ
18/38
退避Redshiftの課題
• 約100TBのRedshiftを⼀時的な環境として
持ち続けている
コスト増
• データが⼀元化されてないことの管理の負担
• 週に⼀度の作り変え作業の負担
運⽤の負担増
• アドホックなクエリはBigQueryで実⾏する
ようになっており役割が失われつつある
BigQueryとの競合
19/38
よし、
Spectrumを使おう
20/38
昨年発表されたSpectrum
• Redshift上で外部スキーマと外部テーブルを
定義することで使える
• 結合処理についてはRedshift本体を⽤いるため
遅くなる傾向がある
RedshiftからS3に直接クエリ
• 他のRedshiftクラスタからも参照可能
GlueCatalogによる⼀元管理
• 1TBのS3読み出しあたり5ドルかかる
クエリ課⾦
21/38
マート作成に⽤いるテーブルは
結合処理に多く⽤いるために
Spectrumを使⽤せずに本体に持つ
Spectrumの導⼊(本番)
HPB HPG
JLN
S3
本番Redshift
JP1により
スケジュール実行
データ抽出
優先度高のみ
COPY
オンプレサーバオンプレDB
アップロード
TSV
or
Parquet
マートは作成後
UNLOAD
優先度低テーブルは
Spectrum参照
22/38
全てのテーブルがS3に配置されるので
検証クラスタからは
全テーブルをSpectrum参照する
Spectrumの導⼊(検証)
HPB HPG
JLN
S3
検証Redshift
JP1により
スケジュール実行
データ抽出
全テーブルを
Spectrum参照
オンプレサーバオンプレDB
アップロード
TSV
or
Parquet
23/38
ETL負荷の変化推測
Spectrum参照により
COPYに関するコミットが減るので
ETL処理による負荷は半分になるはず
事業側DBより
テーブルデータ抽出
S3にアップロード
RedshiftにCOPY
Spectrumテーブルの
S3Pathを付け替えるのみ
約2000テーブル
優先度低
約1000テーブル
優先度⾼
約1000テーブル
24/38
Spectrum化に伴う⽅針
• コミット数を減らし負荷を下げる
負荷を下げる
• 数年前に書かれたものであり変更が困難
• ETLの失敗による業務影響が⼤きい
既存のETL処理への影響を
最⼩限にする
• ETL処理が23時まで及んでおりスケジュール
での実⾏が困難
イベントドリブンな
データパイプラインの構築
25/38
Spectrum実践上の課題1
Aginityで外部スキーマが認識されないので
Late Binding Viewを⽤いて
通常スキーマから参照可能にしている
26/38
Spectrum実践上の課題2
schema.table
コミットを減らすつもりだったのに
Redshift上でS3Pathを付け替えようとすると
なぜかコミットも⾛る
schema.table
27/38
Spectrum実践上の課題2
直接GlueCatalogを修正する
APIを書くことでRedshiftを経由せずに
S3Pathを変更しコミット数を削減
変更後のPathを
Spectrum参照
オンプレサーバ
アップロード
TSV
or
Parquet Redshift
S3
Glue
Catalog
Lambda
API
Gateway
S3Pathとテーブル名で
CURL
GlueAPIを⽤いて
Catalogを変更
28/38
Spectrum実践上の課題3
COPYコマンドでは
NULL AS句でNULL⽂字の指定ができたが
SpectrumではNULL⽂字の指定ができない
Redshift本体ではNULL AS ʻ<NL>ʼ
とすることでNULLと認識される
Spectrumでは単なる⽂字列として
解釈されてしまう
NULLにするためにはʼ¥Nʼを
⽤いる必要がある
29/38
Spectrum実践上の課題3
抽出されたtsvがS3に置かれた時点で
Lambdaを発⽕し
⽂字列を置き換える変換を加えて
再配置する
S3
Redshift
.end
オンプレサーバ
アップロード
TSV
Lambda
TSV
LambdaでTSVの⽂字列を置き換え
.end
StepFunction
全てのTSVに対する変換が完了したら
endファイルを配置する
Spectrum参照
30/38
Spectrum実践上の課題4
SpectrumのBestPracticeとして
S3上のデータをParquetにするのが良いと
⾔われているが
気軽にParquetに変換できるツールが無い
Batch
Lambda EMR
Glue
いずれかにてParquet変換を⾏いたい
TSV
S3
Parquet
S3
31/38
仮にGlueで変換すると
GlueCatalogからDynamicFrameを
作成することで
わずか2⾏でシンプルに変換することができる
Glue
32/38
仮にGlueで変換すると
最低課⾦が10分からとなっており
仮に2000テーブルを1ヶ⽉間変換すると
$0.44(DPU*h) * 2DPU * 1/6h * 2000tbl * 30days
= $8,800(約100万)
最低でも約100万かかる
※DPU(DataProcessingUnit) Glueのコンピュータリソースの単位
・
・
・
・
・
・
イベントドリブンで設計すると
1テーブルにつき1ジョブが⾛る
Glue
S3
33/38
Spectrum実践上の課題4
良い点 悪い点
実装が簡単(4⾏で書ける) 最低10分課⾦になっておりコスト
がとても⾼い(サイズの⼩さいも
のでも10分間のコスト)
コストが安い
使い慣れている
Parquet変換を⾃前で実装
サイズが⼤きいとLambdaのリソー
スに収まらない
使い慣れていない ロードが23時まで及ぶので常時起
動させなければならずコストが⾼
い
使い慣れている Parquet変換を⾃前で実装
ジョブ間のオーバーヘッドが⼤き
いBatch
Lambda
EMR
Glue
34/38
Spectrum実践上の課題4
ファイルサイズが⼤きいテーブルは
Glueを⽤いてSpectrum化させ
それ以外のテーブルは
直接TSVで⾒せるようにする
オンプレサーバ
アップロード
TSV
Redshift
S3
GlueJob
Lambda
Parquet
小さいサイズのものは
TSVで参照
大きいサイズのものは
Parquetで参照
ファイルサイズを判定し
GlueにてParquetに変換
35/38
Spectrum/Glueを⽤いた
最終的な構成案
36/38
オンプレサーバ
アップロード
TSV
本番Redshift
S3
GlueJob
Lambda
Parquet
TSV
検証RedshiftNULL文字変換
Parquet変換
優先度高テーブルのみ
COPY
小さいテーブルは
TSVでSpectrum参照
大きいテーブルは
ParquetでSpectrum参照
Spectrum参照
まとめ
• NULL⽂字の変換をS3上でかける必要あり
• ⼿軽にParquetに変換できるツールがない
Spectrumの導⼊には課題も多い
• 直接S3Pathを書き換えることでRedshiftへの
負荷を下げられる
• GlueCatalogで⼀元管理されるため他クラスタ
でも容易に参照可能
負荷の低減とデータの可搬性には
⼤きな効果あり
37/38
38/38
http://engineer.recruit-lifestyle.co.jp/recruiting/
⼤募集!!
⼀緒に分析基盤を作ろう!

More Related Content

PPTX
アプリケーション開発者のためのAzure Databricks入門
PPTX
初心者向けMongoDBのキホン!
PDF
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PPTX
Power BI をアプリに埋め込みたい? ならば Power BI Embedded だ!
PDF
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
PDF
データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)
アプリケーション開発者のためのAzure Databricks入門
初心者向けMongoDBのキホン!
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
Power BI をアプリに埋め込みたい? ならば Power BI Embedded だ!
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
データ分析基盤、どう作る?システム設計のポイント、教えます - Developers.IO 2019 (20191101)

What's hot (20)

PDF
Apache NiFi の紹介 #streamctjp
PPTX
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
PPTX
マルチクラウドDWH(Snowflake)のすすめ
PDF
データ分析を支える技術 DWH再入門
PDF
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
PPTX
分散システムについて語らせてくれ
PDF
Data platformdesign
PDF
データ基盤に関わる問い合わせ対応を仕組みで解決する
PDF
リクルートライフスタイル流!分析基盤との賢い付き合い方
PPTX
グラフデータベース入門
PDF
Amazon Aurora - Auroraの止まらない進化とその中身
PDF
DMBOKをベースにしたデータマネジメント
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
PPTX
MLOpsはバズワード
PDF
マイクロにしすぎた結果がこれだよ!
PDF
ナレッジグラフとオントロジー
PDF
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
PPTX
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
PostgreSQLでスケールアウト
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
Apache NiFi の紹介 #streamctjp
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
マルチクラウドDWH(Snowflake)のすすめ
データ分析を支える技術 DWH再入門
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
分散システムについて語らせてくれ
Data platformdesign
データ基盤に関わる問い合わせ対応を仕組みで解決する
リクルートライフスタイル流!分析基盤との賢い付き合い方
グラフデータベース入門
Amazon Aurora - Auroraの止まらない進化とその中身
DMBOKをベースにしたデータマネジメント
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
MLOpsはバズワード
マイクロにしすぎた結果がこれだよ!
ナレッジグラフとオントロジー
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PostgreSQLでスケールアウト
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
Ad

Similar to 既存Redshift/ETLからSpectrum/Glueへの移行を徹底解明! (20)

PDF
[de:code 2019 振り返り Night!] Data Platform
PDF
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
PDF
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
PDF
【de:code 2020】 Power Platform で広がるデータ インテグレーションの世界 (2/2)
PPTX
え?まだフルスクラッチで開発してるの!?Power Platform をフル活用すると普通にシステムができるんですよ
PPTX
郡山 Connect 2022 ハッカソン 基調講演 - Hackathon からサービスインになったらデータを扱いましょう
PDF
【de:code 2020】 Power Platform で広がるデータ インテグレーションの世界 (1/2)
PDF
Expectations and reality of hybrid cloud
PDF
The Design for Serverless ETL Pipeline (48:9)
PDF
データプロダクトを支えるビッグデータ基盤
PDF
[Oracle Innovation Summit Tokyo 2018] 水環境の持続を支えるクラウド型ICTプラットフォーム「Water Busine...
PPTX
Flow を使って効率的にデータを集めたその後は Power BI に繋げよう
PDF
「Data Infrastructure at Scale 」#yjdsw4
PDF
Developers.IO 2019 Effective Datalake
PPTX
え?まだフルスクラッチで開発してるの!? Power Platformをフル活用すると普通にシステムができるんですよ
PDF
MonotaRO のデータ活用と基盤の過去、現在、未来
PDF
[C32] 正確でスピーディーな決断を促す、日立の高速データアクセス基盤~性能検証事例と活用効果~ by Taichi Ishikawa
PPT
マーケティング向け大規模ログ解析事例紹介
PDF
NTT Communications' Initiatives to Utilize Infrastructure Data
PPTX
リクルートを支える横断データ基盤と機械学習の適用事例
[de:code 2019 振り返り Night!] Data Platform
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
【de:code 2020】 Power Platform で広がるデータ インテグレーションの世界 (2/2)
え?まだフルスクラッチで開発してるの!?Power Platform をフル活用すると普通にシステムができるんですよ
郡山 Connect 2022 ハッカソン 基調講演 - Hackathon からサービスインになったらデータを扱いましょう
【de:code 2020】 Power Platform で広がるデータ インテグレーションの世界 (1/2)
Expectations and reality of hybrid cloud
The Design for Serverless ETL Pipeline (48:9)
データプロダクトを支えるビッグデータ基盤
[Oracle Innovation Summit Tokyo 2018] 水環境の持続を支えるクラウド型ICTプラットフォーム「Water Busine...
Flow を使って効率的にデータを集めたその後は Power BI に繋げよう
「Data Infrastructure at Scale 」#yjdsw4
Developers.IO 2019 Effective Datalake
え?まだフルスクラッチで開発してるの!? Power Platformをフル活用すると普通にシステムができるんですよ
MonotaRO のデータ活用と基盤の過去、現在、未来
[C32] 正確でスピーディーな決断を促す、日立の高速データアクセス基盤~性能検証事例と活用効果~ by Taichi Ishikawa
マーケティング向け大規模ログ解析事例紹介
NTT Communications' Initiatives to Utilize Infrastructure Data
リクルートを支える横断データ基盤と機械学習の適用事例
Ad

More from Recruit Lifestyle Co., Ltd. (20)

PDF
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
OOUIを実践してわかった、9つの大切なこと
PDF
Flutter移行の苦労と、乗り越えた先に得られたもの
PDF
CTIサービスを支える裏側 〜物理デバイスとの戦い〜 | iOSDC Japan 2020
PDF
「進化し続けるインフラ」のためのマルチアカウント管理
PDF
Air事業のデザイン組織とデザイナー
PDF
リクルートライフスタイル AirシリーズでのUXリサーチ
PPTX
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
PDF
Real-time personalized recommendation using embedding
PDF
データから価値を生み続けるには
PDF
データプロダクト開発を成功に導くには
PDF
Jupyter だけで機械学習を実サービス展開できる基盤
PDF
SQLを書くだけでAPIが作れる基盤
PDF
BtoBサービスならではの顧客目線の取り入れ方
PDF
リクルートライフスタイルにおける深層学習の活用とGCPでの実現方法
PDF
ビックデータ分析基盤の成⻑の軌跡
PDF
Refactoring point of Kotlin application
PDF
データサイエンティストとエンジニア 両者が幸せになれる機械学習基盤を求めて
PDF
データ分析基盤運⽤チームの 運⽤業務を改善してみた話
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
分散トレーシングAWS:X-Rayとの上手い付き合い方
OOUIを実践してわかった、9つの大切なこと
Flutter移行の苦労と、乗り越えた先に得られたもの
CTIサービスを支える裏側 〜物理デバイスとの戦い〜 | iOSDC Japan 2020
「進化し続けるインフラ」のためのマルチアカウント管理
Air事業のデザイン組織とデザイナー
リクルートライフスタイル AirシリーズでのUXリサーチ
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
Real-time personalized recommendation using embedding
データから価値を生み続けるには
データプロダクト開発を成功に導くには
Jupyter だけで機械学習を実サービス展開できる基盤
SQLを書くだけでAPIが作れる基盤
BtoBサービスならではの顧客目線の取り入れ方
リクルートライフスタイルにおける深層学習の活用とGCPでの実現方法
ビックデータ分析基盤の成⻑の軌跡
Refactoring point of Kotlin application
データサイエンティストとエンジニア 両者が幸せになれる機械学習基盤を求めて
データ分析基盤運⽤チームの 運⽤業務を改善してみた話

既存Redshift/ETLからSpectrum/Glueへの移行を徹底解明!