10. (C) Recruit Technologies Co.,Ltd. All rights reserved.
アジェンダ
1.弊社と運営サービスのご紹介
2.横断データと技術的負債
3.「フレームワークプロジェクト」
4.HDP2.5・Kafka・Spark
5.結論 “On Happiness”
10
11. (C) Recruit Technologies Co.,Ltd. All rights reserved.
横断データ活用:フェーズ
ID基盤が整いデータが増加し、我々は成長期の真っ只中
爆発的な成長を目指すが・・・技術的負債が顕在化
11
黎明期 成長期
・効果額
・施策数
・利用者数
貢献
価値
12. (C) Recruit Technologies Co.,Ltd. All rights reserved.
黎明期:基本戦略
各サービスから各種データを収集、DWH/Datalakeに蓄積し活用
12
DWH
横断データ
活用施策
13. (C) Recruit Technologies Co.,Ltd. All rights reserved.
黎明期:データ統合
サイト毎の仕様差異の吸収 個人情報のマスキング 重複や欠損のクリーニング…
13
DWH
0001
0002
0003
0004
14. (C) Recruit Technologies Co.,Ltd. All rights reserved.
黎明期:経営戦略指標
横断データ活用への最初の要求は、経営陣からの「経営指標」の集計
14
Query
DWH
15. (C) Recruit Technologies Co.,Ltd. All rights reserved.
黎明期:定常化運用
有用なものは日次/月次実行する”資産”となり、加速度的に増加
15
≒1000 Queries
run everyday
Query
DWH
16. (C) Recruit Technologies Co.,Ltd. All rights reserved.
黎明期:機械学習の開始
DMTを機械学習の学習データとして転用
16
Another
Data
DWH
17. (C) Recruit Technologies Co.,Ltd. All rights reserved.
黎明期:機械学習の加速
17
DWH
Prepared
Data1
Prepared
Data2
MLlib
次々と機械学習アルゴリズムを変えるため、データ間の依存度が加速
18. (C) Recruit Technologies Co.,Ltd. All rights reserved.
Sou
rce
DWH DMT APP
黎明期:出来上がったシステム
18
“DMT”
users
DWH MLlibDWH
0001
0002
0003
0004
19. (C) Recruit Technologies Co.,Ltd. All rights reserved.
黎明期〜成長期:システム運用
19
DWH MLlibDWH
0001
0002
0003
0004
Change
prediction
corrupt
Change Change
more
users
Bigger
DMT
more
data
source
We changed
log spec!
bug
mism
atch
halt
mism
atch
rerun!
more
work
21. (C) Recruit Technologies Co.,Ltd. All rights reserved.
技術的負債の溜まり場
黎明期に描かれた古典モデルの破綻?
21
DWH DMT APP
22. (C) Recruit Technologies Co.,Ltd. All rights reserved.
構造的問題への対処:シフト
合理的な判断の結果、問題が生まれている
22
DMTへの投資システム成長
DMTへの投資DMTへの投資
DMTへの投資期待・投資
① 黎明期:急成長
・利用者の増加
・投資金額 etc…
技術的負債
外部要因:
プレッシャー
etc…
② 成長期:鈍化
・ムダな業務の増加
・運用負荷 etc…
歯止め
23. (C) Recruit Technologies Co.,Ltd. All rights reserved.
アジェンダ
1.弊社と運営サービスのご紹介
2.横断データと技術的負債
3.「フレームワークプロジェクト」
4.HDP2.5・Kafka・Spark
5.結論 “On Happiness”
23
24. (C) Recruit Technologies Co.,Ltd. All rights reserved.
フレームワークプロジェクト(var/log)
技術的負債を徹底的に排除するためのコードベース(jar)
24
Integrate software
resources & unlock
their full potential
“Absolute DRY”
common process
auto generated
DSL for processing
typically structured
data of Recruit
Codebase
34. (C) Recruit Technologies Co.,Ltd. All rights reserved.
Move onto Agility
34
DWH DMT APP
DWH DMT Produ
ction
pub
sub
Sandbox
Business
Engineer
Scientist
Everyone
35. (C) Recruit Technologies Co.,Ltd. All rights reserved.
Early Adopter向け機能とは何か
ニーズ:さあ、実験をしよう。
1. 秒単位の応答性能
2. その場の思いつきを実データに適用
• 新しいライブラリ・・・
• 新しい特徴量・・・
• 新しい数式・・・
• 新しい自作関数・・・
3. そのままリリース
→ jar + xml configuration ではない
35
36. (C) Recruit Technologies Co.,Ltd. All rights reserved.
import varlog.jar on Zeppelin
36
.Jar
その場で作った
自作関数(動作確認後varlog.jarにコミット)
データ抜きだし・加工
37. (C) Recruit Technologies Co.,Ltd. All rights reserved.
back to xml
.scala
File
<scala>
xml-tag
autodeploy
37
Release Notes as a Job
.Jar
Zeppelinで動作すれば、xmlにコピーして自動リリースも可能
38. (C) Recruit Technologies Co.,Ltd. All rights reserved.
PUBSUBシステム構成
38
Pub
-sub
DAORDD
xml
DWH
Another
Data
Hadoop
elastic
Job
Powered by hdp2.5
Why
Kafka?
39. (C) Recruit Technologies Co.,Ltd. All rights reserved.
Background Data Store: Kafka
Kafkaとは?
• publish & subscribe方式の分散データストア
利点
1. ビッグデータシステム間のトポロジー構造の単純化
2. 高速なスループット
3. Sparkとの接続性
39
40. (C) Recruit Technologies Co.,Ltd. All rights reserved.
Kafka 1) トポロジー構造の単純化
Jay Kreps(the original author of Kafka)によれば・・・
40
<<
トポロジーが複雑=システム間のデータ転送が多い状況
ex) HBase→Hive, Hive→Oracle, Oracle→Hive, Oracle→Elastic, Prod→Sand…
Before
41. (C) Recruit Technologies Co.,Ltd. All rights reserved.
Kafka 2) 高いスループット性能
put=4000件/秒=11.0MB〜14000件/秒
get=10000件/秒=31.7MB (no OS pagecache)
MessageSize=3kB, Broker=1で上記性能。チューニング・スケールアウトも可
開発環境をローカルVMに構築
41
42. (C) Recruit Technologies Co.,Ltd. All rights reserved.
狙い:最適なシステムの統合による高速化
通常ETLジョブ:全てのSQLがLoad/Join/Function/Persist処理を全部実行。役割分担無し
42
L J F PL J F P L J F P
L/J処理を集約後SparkでF/P処理を実行。明確な役割分担
• DWH:Join,GroupByのみ
• Kafka:Sparkのメモリへのロードのみ
• Spark:ScalaFunction再利用のみ
DWH
EXA
elastic
Hadoop
L
L
J J J
F
P
P
P
L
43. (C) Recruit Technologies Co.,Ltd. All rights reserved.
Kafka 3) Sparkとの接続
OracleやHive内のデータ加工関数のモジュラリティは低い。scalaの関数をjarからExport
43
.Jar
Before:
After:
select
case when
t.name in
(‘a’) then 1
SQL
id num
u1 1
u2 2
u3 3
DMT
public
functions
def func
implict class A(RDD)
mapRow
hiveUdf
scala
Reusablily
44. (C) Recruit Technologies Co.,Ltd. All rights reserved.
“秒”レスポンスの検証
特徴量加工+データを1件覗く
1秒
44
特徴量加工+Reduce
53秒
特徴量加工+train+predict
169秒(50万件)
さらに負荷
306秒(Depth = 30)
ある画面の1週間のImpressionが約50万件。Task「RandomForestでクリック予測」
• overhead: spark=5sec Mllib=120sec
• Spark Memory: 6G/192G
• Kafka Bytes Out: 5G (Throughput: 100M/sec)
Total 300 sec
Kafka 50 ML min 120 ML ext 140〜
Grafana