Slide 1

Slide 1 text

DMM.comのビッグデータ基盤を支える技術 TECH PLAY Conference 2017 DMM.com Labo システム本部 ビッグデータ部 鈴木 翔太 / 吉田 龍馬

Slide 2

Slide 2 text

2 © DMM.com Group @szyn 自己紹介 Node.js で内製BIツール開発 Presto導入 Hadoop/日次バッチ運用 最近のお気に入り: Golang 鈴木 翔太 DMM.com Labo システム本部 ビッグデータ部 @i_szyn

Slide 3

Slide 3 text

3 © DMM.com Group 自己紹介 Node.js で内製BIツール開発 Hadoopクラスタの 構築 / 運用 AWS を利用した分析基盤の検証 ユーザートラッキングシステムの刷新 吉田 龍馬 DMM.com Labo システム本部 ビッグデータ部 @ryysud @ryysud

Slide 4

Slide 4 text

4 © DMM.com Group DMM.comについて サービスとグループについて

Slide 5

Slide 5 text

5 © DMM.com Group サービスについて DMM.comは1999年から続く老舗 サービスサイトです。 時代のニーズに合わせた多彩なコ ンテンツを、17年間培った独自プ ラットフォームで安定的に提供し ています。 About Service 40以上の幅広いサービスを展開

Slide 6

Slide 6 text

6 © DMM.com Group グループについて DMM.com Groupは、動画や電子書 籍などのダウンロード販売ほか、 ゲームや通販、オンラインレンタ ルなどを提供するサイト 「DMM.com」の構築から運営まで を手がけているグループです。 About Group ԯԁ ച্ߴਪҠ˞ ʢԯԁʣ ʢ೥݄ʣ ※DMM.comɺDMM.comϥϘɺDMM.comূ݊ɺDMM.com OVERRIDEɺDMM.com Baseɺଞ࿈݁ ձһ਺ਪҠ ձһ਺ ສਓಥഁʂ ʢ೥݄ʣ ʢສਓʣ ※ւ֎ձһؚΉ 株式会社DMM.com 事業の企画・営業 株式会社DMM.comラボ システム開発・運営 ネットワークインフラの提供 Webマーケティング株式会社 株式会社DMM.com証券 FX・CFDの運営 株式会社DMM.futureworks DMM VR THEATERの運営および プロデュース・企画、 音楽・映像コンテンツの制作 株式会社DMM.com Base DISCメディアのプレス、アッセンブリ業務 物流サービス事業 DVD、CD、BDなどのソフトレンタル事業 株式会社DMM.com OVERRIDE DMM GAMES制作・運営 2D / 3Dデザイン制作 ゲームネットワークインフラの運用

Slide 7

Slide 7 text

7 © DMM.com Group ビッグデータ部について 仕事・これまでの活動

Slide 8

Slide 8 text

8 © DMM.com Group ビッグデータ部のミッション ビッグデータを用いて事業のKPI(重要経営指標)向上へ貢献すること データドリブンマーケティング マーケティングオートメーション 施策の効果など今後の計画を 練るための情報を提供 レコメンドや検索エンジンなどを通して ユーザーに適切な情報を提供

Slide 9

Slide 9 text

9 © DMM.com Group ビッグデータ部の仕事 Hadoop 基盤運用 レコメンド 検索 データ分析 メルマガ アフィリエイト

Slide 10

Slide 10 text

10 © DMM.com Group ビッグデータ部の対外活動 ※一部抜粋 2015/02 Developers Summit Winter 2015:Sparkによるリアルタイムレコメンド 2015/09 Developers Summit 2015 FUKUOKA:Kafka・HBaseによるビッグデータ収集 2015/11 Cloudera World Tokyo 2015:Spark+Kafkaを使ったアーキテクチャ説明 2016/02 Hadoop / Spark Conference Japan 2016:Hive on Sparkを活用した高速データ分析 2016/06 IBM Datapalooza Tokyo:DMM.comにおけるビッグデータ処理のためのSQL活用術 2016/11 Cloudera World Tokyo 2016:Deep Learningを用いた類似画像レコメンド DMM.comラボとIDCフロンティア、コンテンツレコメンドの精度向上を共同検証 https://www.idcf.jp/pressrelease/2017/20170516001.html Sparkを活用したアジアパシフィック初のレコメンド基盤実現 http://www.cloudera.co.jp/customers/dmm.html

Slide 11

Slide 11 text

11 © DMM.com Group アジェンダ システム全体図 概要説明 当時の課題 課題解決の事例紹介 CDHクラスタ移行 分散クエリエンジンPresto導入 新ワークフローエンジンDigdagへのリプレイス まとめ

Slide 12

Slide 12 text

12 © DMM.com Group システム全体図 2015年12月〜2017年8月のデータ分析基盤変遷

Slide 13

Slide 13 text

13 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初

Slide 14

Slide 14 text

14 © DMM.com Group User Tracking - システム紹介 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike

Slide 15

Slide 15 text

15 © DMM.com Group User Tracking - システム概要 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ユーザ行動ログ収集 PV/クリック/レコメンド表示/サジェスト表示 API (Node.js) ピークタイム時は 6~7K qps Aerospikeで経由情報の補完 Consumer (Erlang) Hadoop (HDFS) にログを格納

Slide 16

Slide 16 text

16 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初

Slide 17

Slide 17 text

17 © DMM.com Group CDH - システム構成 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) DMM.com MariaDB 各種API (レコメンド等) Jenkins Cloudera社のCDHを利用 Cloudera’s Distribution including Apache Hadoop Hadoopクラスタ運用管理ツールである 『Cloudera Manager』でサーバの設定・管理・ 監視などの運用コストを削減 主な利用コンポーネント HDFS / YARN / Hive / Hue / Spark / Sqoop

Slide 18

Slide 18 text

18 © DMM.com Group CDH - システム構成 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) DMM.com MariaDB 各種API (レコメンド等) Jenkins 動的リソースプールを活用 YARNのリソース配分を動的に変更 昼間はアドホック集計 / 夜間はバッチ向けに レコメンドで Hive on Spark を活用 日次バッチは Jenkins (※2015年12月時点) Sqoopによるデータ取り込み処理 Hiveによる集計処理

Slide 19

Slide 19 text

19 © DMM.com Group 当時の分析基盤における課題 ② アドホック集計が遅い 分散クエリエンジンPresto導入 ③ 日次バッチがJenkins依存 ワークフローエンジンDigdagへのリプレイス ① CDHクラスタのリソース不足 CDHクラスタ移行

Slide 20

Slide 20 text

20 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初

Slide 21

Slide 21 text

21 © DMM.com Group システム全体図 - 2017年08月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Digdag Aerospike Presto Re:dash Batch Zeppelin EFK

Slide 22

Slide 22 text

22 © DMM.com Group システム全体図 - 2017年08月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Digdag Aerospike Presto Re:dash Batch Zeppelin EFK

Slide 23

Slide 23 text

23 © DMM.com Group CDH CDHクラスタ移行

Slide 24

Slide 24 text

24 © DMM.com Group 当時の分析基盤における課題 ① ログの増加に伴うクラスタの容量不足 ビッグデータ部発足時からユーザー数が増加 2015年12月:会員数 1,500万人 2017年6月 :会員数 2,700万人 ジョブの増加に伴うリソース枯渇

Slide 25

Slide 25 text

25 © DMM.com Group システム全体図 - 2017年08月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Digdag Aerospike Presto Re:dash Batch Zeppelin EFK

Slide 26

Slide 26 text

26 © DMM.com Group CDH クラスタについて OLD Cluster CDH 5.7.1 サーバスペック CPU Core: 560C Disk (SSD): 57.5TB Memory: 1.7TB NEW Cluster CDH 5.10.0 サーバスペック CPU Core: 560C Disk (HDD): 1.4PB Memory: 5.1TB

Slide 27

Slide 27 text

27 © DMM.com Group CDH クラスタ移行の流れ 新クラスタ構築 物理サーバ調達 構築作業 並行稼動 distcpでデータ移行 新クラスタ切り替え 旧クラスタから新クラスタ へ切り替え 障害テスト / チューニングも実施 並行稼動は約2週間

Slide 28

Slide 28 text

28 © DMM.com Group 並行稼動中に障害試験を実施(全21項目) バッチでのファイル書き込み中に NameNode を停止 HiveでのMapReduce実行中に Hive Server2 を停止 HiveでのMapReduce実行中に DataNode 1台の NIC を停止 Hive Metastore DBの停止 (MariaDB Galera Cluster) , etc. 移行の際に併せて実施したこと①

Slide 29

Slide 29 text

29 © DMM.com Group 並行稼動中にチューニングを実施  OS のパラメーター変更 txqueuelen → 1000 / 4096 / 10000 /sys/block/sda/queue/scheduler ( I/Oスケジューラ ) → cfq / deadline  HDFS / YARN のパラメーター変更 dfs.datanode.handler.count → 3 / 10 mapred.map.output.compression.codec → BZip2Codec / SnappyCodec mapreduce.reduce.shuffle.parallelcopies → 10 / 40 mapreduce.reduce.input.buffer.percent → 0 / 0.5 / 1 mapreduce.reduce.merge.inmem.threshold → 1000 / 500 / 0 , etc. 移行の際に併せて実施したこと②

Slide 30

Slide 30 text

30 © DMM.com Group ファイルフォーマット / 圧縮形式の見直し これまで Sequence File / Bzip2 (※圧縮率を最優先) 検証の末 ORC / Snappy へ変更 カラムナフォーマットを採用 移行の際に併せて実施したこと③

Slide 31

Slide 31 text

31 © DMM.com Group リソース増強&チューニングで処理高速化 MapReduce の中間データを Bzip2 ➡ Snappy に バッチA 00:48 ➡ 00:26 バッチB 03:59 ➡ 01:55 バッチC 01:07 ➡ 00:44 処理時間が 約半分 に短縮! コンポーネント類のバージョンアップ 特にSpark周り (ver.2系も利用可能に) ここが良くなった 所要時間 (分) 0 75 150 225 300 バッチA バッチB バッチC チューニング前 チューニング後

Slide 32

Slide 32 text

32 © DMM.com Group Presto 分散クエリエンジンPresto導入

Slide 33

Slide 33 text

33 © DMM.com Group 当時の分析基盤における課題 ② Hive on MapReduceが遅い 同じクラスタで定常バッチ / アドホック集計 アドホック分析の際に何度もクエリを書き直し&実行を繰り返すが実行 時間が長いため非常に効率が悪い

Slide 34

Slide 34 text

34 © DMM.com Group Facebook社が開発する分散クエリエンジン(≠DB) ANSI SQLを採用 大規模なデータセットに対して高速にクエリ実行 DAGベースの処理 中間データをメモリ上に持つため低レイテンシ 様々なデータソースに対応 異なるデータソースであってもJOIN可能 例) HiveとRDBにあるデータをクエリでJOIN Prestoとは何か ref. Presto: Interacting with petabytes of data at Facebook https://www.facebook.com/notes/facebook-engineering/presto-interacting-with-petabytes-of-data-at-facebook/10151786197628920

Slide 35

Slide 35 text

35 © DMM.com Group システム全体図 - 2017年08月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Digdag Aerospike Presto Re:dash Batch Zeppelin EFK

Slide 36

Slide 36 text

36 © DMM.com Group Presto周辺の構成図 Presto Zeppelin Presto Re:dash Elasticsearch & Kibana Batch MariaDB API Hadoop

Slide 37

Slide 37 text

37 © DMM.com Group Presto周辺の構成図 Presto Zeppelin Presto Re:dash Elasticsearch & Kibana Batch MariaDB API Hadoop 分析環境 アナリストが任意のクエリを 実行する環境 PrestoクエリはRe:dash / Zeppelinから実行 長期稼働しているクエリは、 Elasticsearch / Kibana で監 視。エンジニアが状況に応じ てクエリをキャンセル Coordinator 1, Worker 20

Slide 38

Slide 38 text

38 © DMM.com Group Presto周辺の構成図 Presto Zeppelin Presto Re:dash Elasticsearch & Kibana Batch MariaDB API Hadoop バッチ環境 システムから発行される クエリの実行環境 Hadoop上のデータをAPI経由 で他システムに連携するため の抽出処理に利用 定型的なクエリがメイン Coordinator 2, Worker 6

Slide 39

Slide 39 text

39 © DMM.com Group パフォーマンス比較 下記要領で、パフォーマンス比較を実施 Prestoは分析環境を利用 対象テーブルは ORC / Snappy 形式 過去3ヶ月の期間集計 (対象: 約163億レコード) 3パターンのクエリを実行 クエリA: PV数カウント(カウント数) クエリB: 検索されたワードのランキング(Window関数) クエリC: 特定ページのPV数カウント (クエリA + 条件追加)

Slide 40

Slide 40 text

40 © DMM.com Group パフォーマンス比較 実行時間 (秒) 0 100 200 300 400 Hive Presto クエリA - PV数 - クエリB - 検索ワードランキング - クエリC - 特定条件PV数 - Hive 176 s 310 s 383 s Presto 10 s 30 s 46 s

Slide 41

Slide 41 text

41 © DMM.com Group ここが良くなった アドホックな集計が高速にできるようになった Hiveと比較し圧倒的な早さ アナリスト/エンジニアが気軽にデータに触れられるように 1日平均400クエリが実行(過去30日分実績) 高速なバッチ処理を実現 高速に集計をしたいバッチはPrestoを利用

Slide 42

Slide 42 text

42 © DMM.com Group DMMでのPrestoおよび周辺エコシステムの運用事例 https://goo.gl/teykfR ビッグデータを使ってバナーを動的表示させたら コンバージョンが323%増加した話 https://goo.gl/j1E43X 参考: Prestoの発表事例

Slide 43

Slide 43 text

43 © DMM.com Group Digdag 新ワークフローエンジンDigdagへのリプレイス

Slide 44

Slide 44 text

44 © DMM.com Group 当時の分析基盤における課題 ③ 日次バッチがJenkins依存 処理フローがコードで管理できていない 各データソースの依存関係の認識が難しい バッチ失敗時のリトライが大変

Slide 45

Slide 45 text

45 © DMM.com Group Digdagとは Tresure Data社が開発するワークフローエンジン 処理のフローをコード(YAMLのDSL)で管理 高い可用性 タスクの状態はPostgreSQLに永続化 リトライ機能 スケーラビリティ サーバを増やすことで分散してタスクを実行 タスクの並列実行も簡単 ref. Digdagによる大規模データ処理の自動化とエラー処理 https://www.slideshare.net/frsyuki/digdag-76749443

Slide 46

Slide 46 text

46 © DMM.com Group いわゆるETL チーム内における日次バッチ データ収集ツールで実行 ( Python製 ) 加工したデータを Hive / MariaDB に転送 Hiveクエリで データ加工 Extract データ取得処理 ※ sqoop / mysql Transform 取得データ加工処理 Load DWH / Data Mart へ データ転送

Slide 47

Slide 47 text

47 © DMM.com Group 保持している データ 扱っているデータは様々 各サービスが保持するデータ を一箇所に集約 Digdagの日次ワークフロー 23 workflows ※ 一部 ※ ただし個人情報は除く 検索ログ 検索INDEXのデータ メール配信ログ メルマガ 配信ログ レコメンドログ 提供した レコメンド情報 購買ログ ユーザー 購買ログ 行動ログ ユーザーの行動ログ PVなど , etc.

Slide 48

Slide 48 text

48 © DMM.com Group システム全体図 - 2017年08月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Digdag Aerospike Presto Re:dash Batch Zeppelin EFK

Slide 49

Slide 49 text

49 © DMM.com Group ETLシステム概要図 PostgreSQL (Primary) pgpool-II (Active) PostgreSQL (Standby) Watchdog pgpool-II (Standby) Streaming Replication lsyncd & rsync VIP Digdag Server Digdag Server

Slide 50

Slide 50 text

50 © DMM.com Group ETLシステム概要図 1. 日次バッチ実行 MariaDB 3.2. MariaDBに集計結果転送 (Load) Hadoop DataNode Digdag Server Hadoop DataNode … 2.2. DataNodeから各DBへ接続& データ取り込み(Extract) 3.1. Hiveでデータ加工/集計 (Transform) 事業部所有DB … 2.1. テーブルメタデータ取得

Slide 51

Slide 51 text

51 © DMM.com Group ここが良くなった 日次バッチの Jenkins からの脱却に成功 処理フローも全てコード & Gitで管理 コードで依存関係をでき見通し改善 バッチ処理時のリトライも WEB UI から簡単に

Slide 52

Slide 52 text

52 © DMM.com Group Digdagへ日次バッチを移行して幸せになるお話 https://goo.gl/7pZAFC 参考: Digdagの発表事例

Slide 53

Slide 53 text

53 © DMM.com Group まとめ 各プロジェクトで得られた効果

Slide 54

Slide 54 text

54 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初

Slide 55

Slide 55 text

55 © DMM.com Group システム全体図 - 2017年08月 - CDH Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Digdag Aerospike Presto Re:dash Batch Zeppelin EFK

Slide 56

Slide 56 text

56 © DMM.com Group 各プロジェクトで得られた成果 CDHクラスタ移行により… リソース増強&チューニングによるジョブの高速化 Presto導入により… アドホック分析が高速に 高速なバッチ集計処理を実現 Digdag導入により… 日次バッチの見通しが改善 並列処理により処理が高速化

Slide 57

Slide 57 text

57 © DMM.com Group 今後の展望 直近の課題および取り組みについて

Slide 58

Slide 58 text

58 © DMM.com Group 現在抱えている課題と行っている取り組み ユーザー行動ログが利用できるまでに時間がかかる 現状: 最短でも1時間前のデータ リアルタイム性を重視したアーキテクチャへ 鮮度の高い情報をレコメンドに活かせるように データ分析を全社展開する際のオンプレリソース不足 AWS活用: Athenaなど

Slide 59

Slide 59 text

ご清聴ありがとうございました!

Slide 60

Slide 60 text

60 © DMM.com Group 8F`SFIJSFMJOHతͳ 興味持っていただけた方… ぜひお話しましょう(๑• ̀ ŷ• ́ )و✧ ※ Wantedlyにて募集中