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

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

DMM.com
August 25, 2017

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

TECH PLAY Conference 2017 の発表資料となります
ビッグデータを活用したWebサービスの技術 #techplayconf2017 #techplayjp
https://techplay.jp/event/628968

株式会社DMM.comラボ 鈴木 翔太 / 吉田 龍馬
===
弊社ビッグデータ部では、オンプレミス環境で Hadoop をベースとしたデータ基盤の保守運用を行っており、それに加えアドホック分析には Presto、エンジニア・アナリストが利用するBIツールとして Zeppelin / Re:dash、ETLにワークフローエンジン Digdag など様々なOSSを積極的に採用し、より快適な分析基盤の構築に努めています。当セッションでは、ビッグデータ部発足時の分析基盤の課題を解決するためにこれまでにどのような取り組みを行ってきたかをご紹介します。

DMM.com

August 25, 2017
Tweet

More Decks by DMM.com

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