Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Treasure Dataで構築したデータ分析基盤、この1年の振り返り
Search
akitoshi toita
February 20, 2018
Technology
3
1.4k
Treasure Dataで構築したデータ分析基盤、この1年の振り返り
スタディサプリのデータ分析基盤運用にまつわる Tips を、ここ1年間の Treasure Data のアップデートを振り返りながらご紹介します
akitoshi toita
February 20, 2018
Tweet
Share
More Decks by akitoshi toita
See All by akitoshi toita
データ分析基盤を開発・運用するエンジニアリングチームの技術活用とその変遷 / StudySapuri Data Meetup 02 Engineering Team Introduction
toita
6
4.1k
Other Decks in Technology
See All in Technology
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
200
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
360
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
130
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
200
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
170
kargoの魅力について伝える
magisystem0408
0
210
Opcodeを読んでいたら何故かphp-srcを読んでいた話
murashotaro
0
280
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
500
統計データで2024年の クラウド・インフラ動向を眺める
ysknsid25
2
850
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
180
Featured
See All Featured
BBQ
matthewcrist
85
9.4k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Side Projects
sachag
452
42k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Building an army of robots
kneath
302
44k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Rails Girls Zürich Keynote
gr2m
94
13k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Transcript
Treasure Dataで構築したデータ分析基盤 この1年の振り返り 株式会社リクルートマーケティングパートナーズ ⼾井⽥明俊 PLAZMA TD Internal Day: TD
Tech Talk 2018
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. ⾃⼰紹介 ⼾井⽥明俊
リクルートマーケティングパートナーズ ネットビジネス本部 プロダクトディベロップメント部 データ基盤グループ データエンジニア 2017 年⼊社。 前職ではオンプレ Hadoop 分析基盤の構築・運⽤。 2
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 本⽇お話しすること スタディサプリのデータ分析基盤運⽤にまつわるトピックを
ここ1年間の Treasure Data のアップデートも 振り返りながらご紹介します 3
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. アウトライン •
スタディサプリのデータ分析基盤 • TD のアップデートに関する3つのトピック • 運⽤上⼯夫している4つのトピック • まとめ 4
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. アウトライン 5
• スタディサプリのデータ分析基盤 • TD のアップデートに関する3つのトピック • 運⽤上⼯夫している4つのトピック • まとめ
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. スタディサプリ 6
⽉額980円から講義動画が⾒放題なオンライン教育サービス 累計有料会員 42万⼈(2016年度)
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. データ分析基盤のシステム構成 7
PlazmaDB DataTank TD SDK Kinesis + Lambda Embulk Embulk report
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 定常集計の実⾏ 8
• Jenkins x Luigi – ⽤途:データ抽出、定常集計(中間テーブル作成) – 利⽤者:データエンジニア • Treasure Workflow (Digdag) – ⽤途:定常集計(レポートデータ作成) – 利⽤者:データ分析官 • TD Saved Queries – ⽤途:施策評価のアドホック分析など – 利⽤者:事業担当者・マーケティング担当者 • 主に3種類の利⽤者がいて、使い⽅も三者三様
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. アウトライン •
スタディサプリのデータ分析基盤 • TD のアップデートに関する3つのトピック • 運⽤上⼯夫している4つのトピック • まとめ 9
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 1. Presto
Delete ⽂の活⽤ • データを追記(append)するジョブの場合 – 注意点: • 再実⾏時のべき等性を担保するために、追記する前に⼀回書き込み対象のパーティ ションのレコードを消さないといけない – 対応⽅法: • Partial Delete してから INSERT INTO – 問題点: • Partial Delete のリクエストは Hive や bulk import と同じキューに⼊るため、そち らを待つために Presto のジョブ実⾏が遅くなるケースがある • テーブルの削除と追記操作を別々に記述するため、操作対象を間違える可能性がある 10
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 1. Presto
Delete ⽂の活⽤ Presto (v0.188) Delete ⽂をサポート (Dec 1,2017) SQLのみで Delete & Append を表現できるようになった! 11 DELETE FROM target_table WHERE TD_TIME_RANGE(time, ’2018-02- 18’, ’2018-02-19’, JST'); INSERT INTO target_table SELECT … After INSERT INTO target_table SELECT … Before import tdclient with tdclient.Client() as td: job = td.partial_delete( db_name=‘target_db’, table_name=‘target_table’, to= 1518966000, _from= 1518879600) job.wait() ↑Λ͔ͬͯΒҎԼͷpresto࣮ߦ
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 2. Treasure
Workflow の活⽤ ⾮エンジニアでも SQL を逐次実⾏して中間テーブルの作成をしたいことがあるが、 Luigi を採⽤していたためハードルが⾼かった • 解決法 – Treasure Workflow を採⽤ – Workflow ⽤のリポジトリを作成、マージすると Circle CI が⾃動でデプロイ • 結果 – GUI があるので Jenkins を触らずに⾮エンジニアでもワークフローを流せるようになった – 各集計処理の進捗状況の把握も容易 – Saved queries ではなくリポジトリでの⼀元管理になりクエリのレビューがしやすくなった – クエリの編集履歴も残るようになった 12
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 2. Treasure
Workflow の活⽤ 13 PR Λग़ͯ͠Ϛʔδ͢ΔͱࣗಈͰө
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 3. DOMO
連携 14
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 3. DOMO
連携 15 当初は BigQuery を経由していたが… Domo Connector Release (Sep 1, 2017) ίωΫγϣϯΤϥʔͰ σʔλ͕࿈ܞͰ͖ͳ͍͜ͱ… TDͷςʔϒϧΛࢦఆͰ͖ΔΑ͏ʹͳΓղফɺ҆ఆԽ
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. アウトライン •
スタディサプリのデータ分析基盤 • TD のアップデートに関する3つのトピック • 運⽤上⼯夫している4つのトピック • まとめ 16
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 1. TD
Saved Queries のリビジョン管理 • 課題 – 間違った修正を元に戻したい – テーブル変更時に影響範囲を知りたい • 解決法 – 15分おきに saved queries を API 経由で取得してリポジトリに commit & push • 要望 – Pull による更新検知は取りこぼしも起こるので saved queries の変更を push or 任意の リポジトリに反映されるようにして欲しい 17
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 1. TD
Saved Queries のリビジョン管理 18 登録ユーザーごとにディレクトリ作成 保存クエリのファイルの先頭にメタ情報を付記することで様々な⾓度からの検索も可能に
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 2. Presto
のリソース状況の監視 • 課題 – ⾊々なプロダクトが TD に乗ってくるようになったユーザ数もかなり増えた – 各⾃が登録したクエリが⼀⻫に発⽕してジョブが詰まる時間帯がある – クソクエリ ⻑時間実⾏されるジョブがあり、リソースを占有してしまう • 解決法 – 定期的にジョブの状況を監視するボットを開発 – Slack に通知・詰まっているときはメンションを⾶ばす – X 時間以上実⾏されている Presto ジョブを強制終了 19
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 2. Presto
のリソース状況の監視 20
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 3. 定期実⾏バッチのチューニング
• 課題 – 定期実⾏バッチ内で実⾏されるクエリでボトルネックになっているものを洗い出したい – ジョブの実⾏時間の推移を⾒たい • 解決法 – Luigi のジョブの実⾏時間を TD に格納 – 実⾏時間を DOMO で可視化 – 重いクエリから優先的に Hive -> Presto に書き換え、パフォーマンス改善を実現 21
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 3. 定期実⾏ジョブのチューニング
22 @luigi.Task.event_handler(luigi.Event.PROCESSING_TIME) def on_processing_time(task, duration): … with tdclient.Client() as td: query = query_template.format(insert_time, build_date, task_name, duration, task_id) job = td.query( db_name=ʼtarget_db', q=query, type='presto' ) Luigiの各タスクの実⾏後に TD にメトリクスを記録 (Luigi では on_processing_time() が⽤意されていたので楽だった)
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 3. 定期実⾏ジョブのチューニング
23 BI ツールで各ジョブの実⾏時間の推移を可視化
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 4. アカウント管理
• 割と頻繁にユーザー追加依頼があり、オペレーションを簡略化したい • 解決法 – アカウント発⾏処理を半⾃動化 1. 依頼者が依頼フォーム(Google Form)に必要な情報を⼊⼒ 2. アカウント管理者の Slack チャネルに通知 3. アカウント管理者が内容を確認後、アカウント追加コマンドを打つ 4. ボットが管理ページを操作してアカウントを追加 24
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. 4. アカウント管理
25 TD ͷΞΧϯτਃ༻ͷ Slack νϟϯωϧͰίϚϯυΛଧͭͱϢʔβʔՃ ① Google Formからの申請 ③ Jenkins job 実⾏ ④ Jenkins job 成功 ② アカウント追加コマンド
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. アウトライン •
スタディサプリのデータ分析基盤 • TD のアップデートに関する3つのトピック • 運⽤上⼯夫している4つのトピック • まとめ 26
(C) Recruit Marketing Partners Co.,Ltd. All rights reserved. • スタディサプリでのデータ分析基盤の運⽤も3年⽬に⼊り、TD
側での機能追加や アップデートを⽇々キャッチアップしながら改善に活かしている 1. Presto Delete ⽂サポート 2. Treasure Workflow リリース 3. TD DOMO連携サポート • あると便利な機能はまだまだ独⾃開発・運⽤でカバーしているので、ぜひ標準サ ポートしていただけると嬉しいです! 1. TD Saved Queries のリビジョン管理 2. Presto のリソース状況の監視 3. ジョブメトリクスの可視化 4. アカウント管理のための API まとめ 27