DMM.com のビッグデータ基盤を支える技術

DMM.com のビッグデータ基盤を支える技術

9fdb6e5b532d7fa8687faebc4e70a865?s=128

Ryuma Yoshida

August 25, 2017
Tweet

Transcript

  1. DMM.comのビッグデータ基盤を支える技術 TECH PLAY Conference 2017 DMM.com Labo システム本部 ビッグデータ部 鈴木

    翔太 / 吉田 龍馬
  2. 2 © DMM.com Group @szyn 自己紹介 Node.js で内製BIツール開発 Presto導入 Hadoop/日次バッチ運用

    最近のお気に入り: Golang 鈴木 翔太 DMM.com Labo システム本部 ビッグデータ部 @i_szyn
  3. 3 © DMM.com Group 自己紹介 Node.js で内製BIツール開発 Hadoopクラスタの 構築 /

    運用 AWS を利用した分析基盤の検証 ユーザートラッキングシステムの刷新 吉田 龍馬 DMM.com Labo システム本部 ビッグデータ部 @ryysud @ryysud
  4. 4 © DMM.com Group DMM.comについて サービスとグループについて

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

    ています。 About Service 40以上の幅広いサービスを展開
  6. 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デザイン制作 ゲームネットワークインフラの運用
  7. 7 © DMM.com Group ビッグデータ部について 仕事・これまでの活動

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

    レコメンドや検索エンジンなどを通して ユーザーに適切な情報を提供
  9. 9 © DMM.com Group ビッグデータ部の仕事 Hadoop 基盤運用 レコメンド 検索 データ分析

    メルマガ アフィリエイト
  10. 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
  11. 11 © DMM.com Group アジェンダ システム全体図 概要説明 当時の課題 課題解決の事例紹介 CDHクラスタ移行

    分散クエリエンジンPresto導入 新ワークフローエンジンDigdagへのリプレイス まとめ
  12. 12 © DMM.com Group システム全体図 2015年12月〜2017年8月のデータ分析基盤変遷

  13. 13 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark

    Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初
  14. 14 © DMM.com Group User Tracking - システム紹介 - CDH

    Spark Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike
  15. 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) にログを格納
  16. 16 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark

    Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初
  17. 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
  18. 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による集計処理
  19. 19 © DMM.com Group 当時の分析基盤における課題 ② アドホック集計が遅い 分散クエリエンジンPresto導入 ③ 日次バッチがJenkins依存

    ワークフローエンジンDigdagへのリプレイス ① CDHクラスタのリソース不足 CDHクラスタ移行
  20. 20 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark

    Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初
  21. 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
  22. 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
  23. 23 © DMM.com Group CDH CDHクラスタ移行

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

    2017年6月 :会員数 2,700万人 ジョブの増加に伴うリソース枯渇
  25. 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
  26. 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
  27. 27 © DMM.com Group CDH クラスタ移行の流れ 新クラスタ構築 物理サーバ調達 構築作業 並行稼動

    distcpでデータ移行 新クラスタ切り替え 旧クラスタから新クラスタ へ切り替え 障害テスト / チューニングも実施 並行稼動は約2週間
  28. 28 © DMM.com Group 並行稼動中に障害試験を実施(全21項目) バッチでのファイル書き込み中に NameNode を停止 HiveでのMapReduce実行中に Hive

    Server2 を停止 HiveでのMapReduce実行中に DataNode 1台の NIC を停止 Hive Metastore DBの停止 (MariaDB Galera Cluster) , etc. 移行の際に併せて実施したこと①
  29. 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. 移行の際に併せて実施したこと②
  30. 30 © DMM.com Group ファイルフォーマット / 圧縮形式の見直し これまで Sequence File

    / Bzip2 (※圧縮率を最優先) 検証の末 ORC / Snappy へ変更 カラムナフォーマットを採用 移行の際に併せて実施したこと③
  31. 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 チューニング前 チューニング後
  32. 32 © DMM.com Group Presto 分散クエリエンジンPresto導入

  33. 33 © DMM.com Group 当時の分析基盤における課題 ② Hive on MapReduceが遅い 同じクラスタで定常バッチ

    / アドホック集計 アドホック分析の際に何度もクエリを書き直し&実行を繰り返すが実行 時間が長いため非常に効率が悪い
  34. 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
  35. 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
  36. 36 © DMM.com Group Presto周辺の構成図 Presto Zeppelin Presto Re:dash Elasticsearch

    & Kibana Batch MariaDB API Hadoop
  37. 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
  38. 38 © DMM.com Group Presto周辺の構成図 Presto Zeppelin Presto Re:dash Elasticsearch

    & Kibana Batch MariaDB API Hadoop バッチ環境 システムから発行される クエリの実行環境 Hadoop上のデータをAPI経由 で他システムに連携するため の抽出処理に利用 定型的なクエリがメイン Coordinator 2, Worker 6
  39. 39 © DMM.com Group パフォーマンス比較 下記要領で、パフォーマンス比較を実施 Prestoは分析環境を利用 対象テーブルは ORC /

    Snappy 形式 過去3ヶ月の期間集計 (対象: 約163億レコード) 3パターンのクエリを実行 クエリA: PV数カウント(カウント数) クエリB: 検索されたワードのランキング(Window関数) クエリC: 特定ページのPV数カウント (クエリA + 条件追加)
  40. 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
  41. 41 © DMM.com Group ここが良くなった アドホックな集計が高速にできるようになった Hiveと比較し圧倒的な早さ アナリスト/エンジニアが気軽にデータに触れられるように 1日平均400クエリが実行(過去30日分実績) 高速なバッチ処理を実現

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

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

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

  45. 45 © DMM.com Group Digdagとは Tresure Data社が開発するワークフローエンジン 処理のフローをコード(YAMLのDSL)で管理 高い可用性 タスクの状態はPostgreSQLに永続化

    リトライ機能 スケーラビリティ サーバを増やすことで分散してタスクを実行 タスクの並列実行も簡単 ref. Digdagによる大規模データ処理の自動化とエラー処理 https://www.slideshare.net/frsyuki/digdag-76749443
  46. 46 © DMM.com Group いわゆるETL チーム内における日次バッチ データ収集ツールで実行 ( Python製 )

    加工したデータを Hive / MariaDB に転送 Hiveクエリで データ加工 Extract データ取得処理 ※ sqoop / mysql Transform 取得データ加工処理 Load DWH / Data Mart へ データ転送
  47. 47 © DMM.com Group 保持している データ 扱っているデータは様々 各サービスが保持するデータ を一箇所に集約 Digdagの日次ワークフロー

    23 workflows ※ 一部 ※ ただし個人情報は除く 検索ログ 検索INDEXのデータ メール配信ログ メルマガ 配信ログ レコメンドログ 提供した レコメンド情報 購買ログ ユーザー 購買ログ 行動ログ ユーザーの行動ログ PVなど , etc.
  48. 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
  49. 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
  50. 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. テーブルメタデータ取得
  51. 51 © DMM.com Group ここが良くなった 日次バッチの Jenkins からの脱却に成功 処理フローも全てコード &

    Gitで管理 コードで依存関係をでき見通し改善 バッチ処理時のリトライも WEB UI から簡単に
  52. 52 © DMM.com Group Digdagへ日次バッチを移行して幸せになるお話 https://goo.gl/7pZAFC 参考: Digdagの発表事例

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

  54. 54 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark

    Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初
  55. 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
  56. 56 © DMM.com Group 各プロジェクトで得られた成果 CDHクラスタ移行により… リソース増強&チューニングによるジョブの高速化 Presto導入により… アドホック分析が高速に 高速なバッチ集計処理を実現

    Digdag導入により… 日次バッチの見通しが改善 並列処理により処理が高速化
  57. 57 © DMM.com Group 今後の展望 直近の課題および取り組みについて

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

    データ分析を全社展開する際のオンプレリソース不足 AWS活用: Athenaなど
  59. ご清聴ありがとうございました!

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

    )و✧ ※ Wantedlyにて募集中