Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Ryuma Yoshida

August 25, 2017
Tweet

More Decks by Ryuma Yoshida

Other Decks in Technology

Transcript

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

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

    運用 AWS を利用した分析基盤の検証 ユーザートラッキングシステムの刷新 吉田 龍馬 DMM.com Labo システム本部 ビッグデータ部 @ryysud @ryysud
  3. 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デザイン制作 ゲームネットワークインフラの運用
  4. 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
  5. 11 © DMM.com Group アジェンダ システム全体図 概要説明 当時の課題 課題解決の事例紹介 CDHクラスタ移行

    分散クエリエンジンPresto導入 新ワークフローエンジンDigdagへのリプレイス まとめ
  6. 13 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark

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

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

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

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

    Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初
  14. 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
  15. 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
  16. 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
  17. 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
  18. 27 © DMM.com Group CDH クラスタ移行の流れ 新クラスタ構築 物理サーバ調達 構築作業 並行稼動

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

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

    / Bzip2 (※圧縮率を最優先) 検証の末 ORC / Snappy へ変更 カラムナフォーマットを採用 移行の際に併せて実施したこと③
  22. 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 チューニング前 チューニング後
  23. 33 © DMM.com Group 当時の分析基盤における課題 ② Hive on MapReduceが遅い 同じクラスタで定常バッチ

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

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

    Snappy 形式 過去3ヶ月の期間集計 (対象: 約163億レコード) 3パターンのクエリを実行 クエリA: PV数カウント(カウント数) クエリB: 検索されたワードのランキング(Window関数) クエリC: 特定ページのPV数カウント (クエリA + 条件追加)
  29. 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
  30. 45 © DMM.com Group Digdagとは Tresure Data社が開発するワークフローエンジン 処理のフローをコード(YAMLのDSL)で管理 高い可用性 タスクの状態はPostgreSQLに永続化

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

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

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

    Gitで管理 コードで依存関係をでき見通し改善 バッチ処理時のリトライも WEB UI から簡単に
  37. 54 © DMM.com Group システム全体図 - 2015年12月 - CDH Spark

    Hive YARN HDFS Sqoop 各種API (レコメンド等) Consumer RabbitMQ Tracking-API DMM.com JSLibrary MariaDB 各種API (レコメンド等) Jenkins Aerospike ※ ビッグデータ部発足当初
  38. 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