dmm.com ラボはなぜsparkを採用したのか?...

40
DMM.COM SPARK

Upload: wataru-shinohara

Post on 23-Jan-2018

1.054 views

Category:

Presentations & Public Speaking


1 download

TRANSCRIPT

Page 1: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

DMM.COM SPARK

Page 2: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

2015/4 - DMM labo

API

Page 3: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

AGENDADMM Apache Spark DMM Tips

Page 4: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

DMM

Page 5: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

DMM

Page 6: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します
Page 7: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します
Page 8: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

SPARK

UC Berkekey Apache

Scala, Python, Java, SQL, R API

Page 9: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します
Page 10: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

(2014/09)Mahout

SparkJava, Scala, Python

GraphLab

Page 11: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します
Page 12: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

WHY SPARK

MLlib, GraphX

Hadoop

Page 13: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

Hadoop

Page 14: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

item to item

user to item

popular

Page 15: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

1. (Tracking API)

2. (Hive on Spark)

3. (Spark)

4. (Sqoop)

5. API(Play)

Page 16: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

(TRACKING API)Javascript

API

RDB Hadoop

Page 17: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

(HIVE ON SPARK)Spark

Page 18: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

(SPARK - ITEM2ITEM)

Page 19: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

val itemToItems = userProducts.join(userProducts).filter { case (user, ((item1, keyword1, score1), (item2, keyword2, score2))) => item1 != item2}.map { case (user, ((item1, keyword1, score1), (item2, keyword2, score2))) => ((item1, keyword1, item2), score1 * score2)}.reduceByKey(_ + _).mapValues(math.sqrt(_)).map { case ((item1, keyword1, item2), score) => ((item1, keyword1), (item2, score))}.groupByKey().mapValues(_.toList.sortBy(_._2).reverse.take(config.numDisplayItems)).filter { case ((item1, keyword1), items) => items.size >= config.numDisplayItems}.cache()

Page 20: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

(SPARK -USER2ITEM)

MLlib ALS( )

Page 21: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

val model = ALS.train(ratings.map(_._1), config.alsRank, config.alsNumIterations, config.alsLambda) val predictions = model.predict(candidates).groupBy(_.user).map { case (user, ratings) => (user, ratings.toList.sortBy(_.rating) .reverse.take(config.numDisplayItems)) }.cache()

Page 22: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

(SPARK)RDB Hadoop

Page 23: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

Sqoop MariaDB

Page 24: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

API item2item(id: ItemId): List[ItemId]user2item(id: UserId): List[ItemId]popular : List[ItemId]

Page 25: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

DEPLOY AND EXECUTE

Jenkins + Build Pipeline + BuildFlow

Page 26: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

(2015/09)Jenkins + Build Pipeline + BuildFlow

Job Script + Git

Hive

Spark

Sqoop

Recommend API(Node.js)

MariaDB(Galera Cluster)

Page 27: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

Jenkins + Build Pipeline + BuildFlow

Job Script + Management API

Hive on Spark

Spark

Sqoop

Recommend API(Play)

MariaDB(Galera Cluster)

Page 28: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

Management API

File

Hive on Spark

Hive 3

Play

Spark, Hive UDF Util

Page 29: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します
Page 30: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

AB PDCA

Page 31: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

[ ]

Page 32: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

701

Page 33: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

75 % ↑ 97% ↑

Page 34: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

TIPS

use dataframes or datasetshive

Page 35: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

executor

memoryOverhead

cheat sheet

Top 5 Mistakes to Avoid When Writing Apache Spark

Applications

Page 36: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します
Page 37: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

HIVE

Spark

HiveContext

Hive on Spark

Page 38: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

DATAFRAMES DATASETS (1.3 - ) Dataframes(1.6 - ) Datasets

Project Tungsten(1.5 - )

Page 39: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します
Page 40: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します

Realtime RecommendDataframes & DatasetsGraphframes