Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20141106_cwt-zenmyo-naito

980 views

Published on

Cloudera World Tokyo 2014 CyberAgent

Published in: Technology
  • Be the first to comment

  • Be the first to like this

20141106_cwt-zenmyo-naito

  1. 1. AmebaにおけるHBase活用事例 株式会社サイバーエージェント 技術本部 善明晃由、内藤遥
  2. 2. 2 本日の内容 •Amebaについて •HBase活用事例 •ログ解析基盤Patriot •投稿監視システムOrion •トレンド分析システム 株式会社サイバーエージェント
  3. 3. Amebaについて
  4. 4. 4 Ameba事業 •スマートフォン向けの「Ameba」を中心に事業展開 •ブログだけではなく様々なコミュニティサービスやゲームを提供 株式会社サイバーエージェント
  5. 5. 5 Ameba Technology Laboratoryについて •Amebaの大規模データを集約的に扱う組織 •2011年4月に開設、現在約25名が所属 株式会社サイバーエージェント 推薦 フィルタリング ログ解析 データマイニング 検索 大規模 分散処理 (ログ解析基盤)
  6. 6. ログ解析基盤Patriotにおける HBase
  7. 7. 7 Amebaのログ解析基盤:Patriot •Amebaのサービス共通のログ解析基盤 •Ameba Technology Laboratoryで開発・運用 •サービスのユーザ行動の分析、アクセスログの集計など •レコメンド等の大規模データ活用による機能の提供 •Hadoopクラスタ上に構築 •HDFSにログデータを集約 •Hive/MapReduceを用いた集計 •HBaseを用いて処理結果を活用 •Flumeを用いたデータ収集
  8. 8. 8 株式会社サイバーエージェント システム構成 Ameba サービス ログ転送(SCP) MySQLレプリ 【Logサーバ】 ログの一時集約 Hadoop クラスタ ログ整形 Hiveインポート サマリView、 アドホックHiveクエリ (自作WebUI) 【Batchサーバ】 ワークフロー スケジューラ HiveJobをキック ログのリアルタイム転送 (Flume) 各部門の レポーティングツール 【外部連携サーバ】 サマリーデータ取得 Hiveクエリ実行 ジョブステータス取得
  9. 9. 9 Amebaのログ解析基盤:Patriot 昨年のCloudera World Tokyo で運用体制等について紹介 Amebaにおけるログ解析基盤Patriotの活用事例 http://www.slideshare.net/cyberagent/cloudera-world-tokyo-2013 株式会社サイバーエージェント
  10. 10. 10 システム概要(HBase関連) 株式会社サイバーエージェント ログ (Hive) 集計結果 (HBase) ログ ログ ログ ログ •Hiveの集計結果をHBaseに出力 •HBaseのデータをレポーティングツールなどに出力 •用途に応じて複数のテーブル(スキーマ)を利用 •アクセス解析、行動ログ解析、など アクセス 解析 行動ログ 解析
  11. 11. 11 HBaseスキーマの例 アクセスログ解析 株式会社サイバーエージェント RowKey ColumnFamily Column Value <サービス名>-<デバイス種別>- <パス>-<日付>-<指標名>-<集 計種別>-<集計対象> a <Hour>? <集計結果> •指標名;pv、レスポンスタイムなど •集計種別/集計区分:リファラ、検索ワードなど •Hour •日時集計では空文字、時間単位の集計のみ[0-24] •集計対象に任意の文字列が入りうるためColumnに分離
  12. 12. 12 HBaseを利用する上での課題 •アプリケーションのデータとKeyValue間の変換が必要 •スキーマの管理が分散 •データをKeyValueにどのように配置するか •Hiveからの入力、レポーティングへの出力、管理ツール(CLI) •データの管理確認が面倒 •CLIがイマイチ •手動でrowkeyの作成、Filterの設定 •スキーマ毎に管理ツールをつくるのも手間 •byte[]の連結と分割 •大量のデータの入出力 •細粒度での集計 •データの修正 株式会社サイバーエージェント
  13. 13. 13 HBaseを利用する上での課題(例) •誤って書き込まれたデータの削除 •不正なログ、Hiveクエリのミス 株式会社サイバーエージェント 集計結果 (HBase) 指標名 値 service1-pv 12345 service1-unknown1 -999 service1-unknown2 -999 service1-uu 300 変なデータ が見える > delete ‘anapat’, ‘service1-unknown1’,,,, > delete ‘anapat’, ‘service1-unknown2’,,,, … Deleteをそれぞれのデータに対して発行
  14. 14. 14 HBaseを利用する上での課題(例) • 指標名が統一されてない •複数人、複数部門がバッチ処理を追加 •レポートの作成が複雑 株式会社サイバーエージェント 集計結果 (HBase) 指標名 値 service1-uu 1000 service2-dau 2000 service3-uu 3000 service2のデー タがみえない 指標名 値 service1-uu 1000 service3-uu 3000 修正対象データ (実際は大量、数年分) > import org.apache.hadoop.hbase.filter.RowFilter > import org.apache.hadoop.hbase.filter.RegexStringComparator > filter = RowFilter.new(RowFilter::CompareOp::EQUAL, RegexStringComparator.new('.*i1.*')) > scan 'anapat', {FILTER => filter} > put ‘anapat’ , ‘service-uu’,,,, ‘ 2000’ Scanした結果を書き換え
  15. 15. 15 Relation定義 汎用HBaseラッパー(Blackhawk) •スキーマ定義を一元管理し、アプリケーションデータとKeyValueと の変換を実現 •byte[]を意識せずにKeyValueデータをあつかうインタフェース •SQLライクなクエリ •CLI、JDBCドライバ •Hive Integration •HBaseの多様なスキーマに対してHiveで処理 株式会社サイバーエージェント Blackhawk スキーマ リポジトリ SELECT * FROM patriot-kpi WHERE service = ‘ameba’ AND indicator = ‘uu’ Scan table: patriot-pac3 {"startRow":"ameba-uu",” stopRow":"ameba-uv”, "families":{"data":["ALL"]}} Schema定義 Schema定義
  16. 16. 16 スキーマの定義DDL •KeyValueの各要素中の属性の配置を記述 •各属性に区切りを示す修飾子を設定(suffix(“-”)) 株式会社サイバーエージェント define primary schema v1 for apdata { table "anapat", row suffix(“-”){service}:suffix(“-”){dev}:suffix(“- ”){path}:regexp("[0-9]{4}-[01][0-9]-[0-3][0-9]"){dt}:"-”:suffix(“- ”){indicator}:suffix("-"){target_type}:target_value, family "a", qualifier hour, value val };
  17. 17. 17 動作例 KeyValue → アプリケーションデータ 株式会社サイバーエージェント define primary schema v1 for apdata { … row suffix(“-”){service}: suffix(“-”){dev}: suffix(“-”){path}: regexp("[0-9]{4}-[01][0-9]-[0-3][0-9]"){dt}:"-”: suffix(“-”){indicator}: suffix("-"){target_type}: target_value, … }; service=ameba, dev= pc, path=/, dt=2014-11-06, indicator=pv, target_type=search, target_value=word ameba-pc- /-2014-11-06-pv-search-word RowKey
  18. 18. 18 利用例1 誤って書き込まれたデータの削除 株式会社サイバーエージェント 集計結果 (HBase) 指標名 値 service1-pv 12345 service1-unknown1 -999 service1-unknown2 -999 service1-uu 300 変なデータ が見える DELTE FROM apdata WHERE service = ‘serivce1’ AND indicator like ‘unknown%’ 対象範囲をScanし、 条件を満たすKeyValueに対してDeleteを発行
  19. 19. 19 利用例2 • 指標名が統一されてない 株式会社サイバーエージェント 集計結果 (HBase) 指標名 値 service1-uu 1000 service2-dau 2000 service3-uu 3000 service2のデー タがみえない 指標名 値 service1-uu 1000 service3-uu 3000 修正対象データ (実際は大量、数年分) hive –e “INESRT OVERWRITE TABLE patdata SELECT service, ‘uu’ AS indicator,,, FROM patdata WHERE indicator = ‘dau’ 大量のKVをMapReduceで 容易に修正
  20. 20. 20 株式会社サイバーエージェント 利用例3 • JDBCドライバにより開発を効率化 • HBaseのAPIを知らなくても利用可能 • 性能が必要な場合はある程度の知識は必要 • KeyValueとの変換処理は実装不要 Ameba サービス Hadoop クラスタ 必要な機能の 実装に集中 【外部連携サーバ】 サマリーデータ取得 Hiveクエリ実行 ジョブステータス取得
  21. 21. 21 現在の取り組み •スキーマ変換 •設計に失敗したスキーマの処理 •Wide-tableなど •用途に応じたスキーマを容易に追加可能な枠組み •サービス毎のレポート → 指標毎のレポート •Hive Integrationを用いたユーザ管理データとの連携 •例) サービスのリストをHBaseで管理しオンラインで設定可能し、Hiveの集計 で利用 •OSS化も検討中 株式会社サイバーエージェント
  22. 22. Ameba投稿監視システムOrionにおける HBase
  23. 23. 23 Ameba投稿監視システム Orion •健全性の担保を目的に、Amebaでのユーザ投稿テキスト、投稿画 像を一元的に管理し、投稿内容の監視を支援するシステム •約2500万投稿/day •約150人のオペレータによる監視 株式会社サイバーエージェント http://gihyo.jp/dev/serial/01/cyberagent/0053
  24. 24. 24 Ameba投稿監視システム Orion •機能要件 •日ごとに投稿データを監視、時系列の古いものから処理していく •未処理の投稿データに関しては、オペレータが重複して 監視しないようにする (二重監視の防止) 株式会社サイバーエージェント
  25. 25. 25 Ameba投稿監視システム Orion •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <監視カテゴリID>_<監視状態ID>_ <投稿時間>_<投稿ID> v <投稿情報 (シリアライズ)>
  26. 26. 26 •スキーマ設計 株式会社サイバーエージェント Ameba投稿監視システム Orion RowKey ColumnFamily Column Value <監視カテゴリID>_<監視状態ID>_ <投稿時間>_<投稿ID> v <投稿情報 (シリアライズ)> 監視対象をグルーピングしたID このIDごとに投稿データが監視される
  27. 27. 27 Ameba投稿監視システム Orion •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <監視カテゴリID>_<監視状態ID>_ <投稿時間>_<投稿ID> v <投稿情報 (シリアライズ)> 投稿データの監視状態 0: 未処理 1: 監視中 2: 監視済
  28. 28. 28 Ameba投稿監視システム Orion •スキーマ設計 株式会社サイバーエージェント UNIX時間 例)2014/11/01 00:00:00 ->1414767600000 RowKey ColumnFamily Column Value <監視カテゴリID>_<監視状態ID>_ <投稿時間>_<投稿ID> v <投稿情報 (シリアライズ)>
  29. 29. 29 Ameba投稿監視システム Orion •スキーマ設計 株式会社サイバーエージェント 投稿データを識別するID RowKey ColumnFamily Column Value <監視カテゴリID>_<監視状態ID>_ <投稿時間>_<投稿ID> v <投稿情報 (シリアライズ)>
  30. 30. 30 Ameba投稿監視システム Orion •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <監視カテゴリID>_<監視状態ID>_ <投稿時間>_<投稿ID> v <投稿情報 (シリアライズ)> ColumnFamily、Columnは 全てのValueに付随して保存されるため、 なるべく短くする(Columnは空)
  31. 31. 31 Ameba投稿監視システム Orion •スキーマ設計 株式会社サイバーエージェント 投稿データ、オペレータ対応情報など シリアライズして容量の節約 キーがソートされたキーバリューストア として利用可能 RowKey ColumnFamily Column Value <監視カテゴリID>_<監視状態ID>_ <投稿時間>_<投稿ID> v <投稿情報 (シリアライズ)>
  32. 32. 32 Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 株式会社サイバーエージェント
  33. 33. 33 Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 •データ取得(全体像) 株式会社サイバーエージェント API HBase Step1: HTTPリクエスト Step2: ロック Step3: ロック取得 Step4: Scan Step5: データ取得 Step6: Put Step7: Delete Step9: データ取得 Step8: ロック解除 ZooKeeper
  34. 34. 34 Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 •監視カテゴリのロック •ZooKeeperを使って監視カテゴリごとにロックを取得する 株式会社サイバーエージェント API Step2: ロック 監視カテゴリID=1 Step3: ロック取得 成功するまで一定数リトライ Step1: HTTPリクエスト ZooKeeper
  35. 35. 35 Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 •StartRow、StopRowを生成 •StartRow: 1_0_1414767600000 •StopRow : 1_0_1414854000000 •RowKeyは昇順にソートされているため、時系列の古いデータから取得可能 株式会社サイバーエージェント API HBase 2014/11/01 00:00:00 2014/11/02 00:00:00 未処理 Step4: Scan Step5: データ取得
  36. 36. 36 Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 •HBaseからデータ取得 株式会社サイバーエージェント API HBase Step4: Scan Step5: データ取得 クエリ(Scan) StartRow: 1_0_1414767600000 StopRow: 1_0_1414854000000 ColumnFamily: v 取得件数: 100件 検索結果 RowKey: 1_0_1414767612345_83B197E4 Value: <投稿情報>
  37. 37. 37 API Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 •RowKeyの更新 •監視状態IDを0(未処理) -> 1(監視中)に変更 •RowKeyが変わるため、Put、Deleteの処理を連続して行う 株式会社サイバーエージェント HBase Step6: Put Step7: Delete クエリ(Put) RowKey: 1_1_1414767612345_83B197E4 ColumnFamily: v Value: <投稿情報> クエリ(Delete) RowKey: 1_0_1414767612345_83B197E4 ColumnFamily: v
  38. 38. 38 Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 •監視カテゴリのロック解除、データ取得 株式会社サイバーエージェント API Step9: データ取得 Step8: ロック解除 監視カテゴリID=1 ZooKeeper
  39. 39. 39 Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 •オペレータによる目視監視 •投稿データに対応情報を付与 株式会社サイバーエージェント RowKey: 1_1_1414767612345_83B197E4 Value: <投稿情報(更新)>
  40. 40. 40 Ameba投稿監視システム Orion 例)監視カテゴリID:1 の 2014/11/01の未処理データを監視 •HBaseにデータを格納 •監視状態IDを1(監視中) -> 2(監視済)に変更 株式会社サイバーエージェント API HBase Put Delete クエリ(Put) RowKey: 1_2_1414767612345_83B197E4 ColumnFamily: v Value: <投稿情報(更新)> クエリ(Delete) RowKey: 1_1_1414767612345_83B197E4 ColumnFamily: v
  41. 41. トレンド分析システムにおける HBase
  42. 42. 42 •各サービスの検索ワードやハッシュタグ、投稿画像など、幅広いオブジェクトの トレンドを分析、検知するシステム •Daily、Hourlyなどの時系列ごとにオブジェクトに対するアクティビティ (検索した、いいねを押したなど)をカウント トレンド分析システム 株式会社サイバーエージェント
  43. 43. 43 •機能要件 •オブジェクトの急上昇ランキングの提供(バッチ処理) •オブジェクトの時系列のカウント情報の提供(オンライン処理) トレンド分析システム 株式会社サイバーエージェント
  44. 44. 44 •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <サービスID>_<日時フォーマット>_ <カテゴリID>_<サブカテゴリID>_ <オブジェクト> d <count> … h <count> … m <count> トレンド分析システム
  45. 45. 45 トレンド分析システム •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <サービスID>_<日時フォーマット>_ <カテゴリID>_<サブカテゴリID>_ <オブジェクト> d <count> … h <count> … m <count> サービスを一意に 識別するID
  46. 46. 46 トレンド分析システム •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <サービスID>_<日時フォーマット>_ <カテゴリID>_<サブカテゴリID>_ <オブジェクト> d <count> … h <count> … m <count> 時系列の種類ごとに フォーマットされた日時 Daily -> yyyyMMdd Hourly -> yyyyMMddHH 10分ごと -> yyyyMMddHHm0
  47. 47. 47 トレンド分析システム •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <サービスID>_<日時フォーマット>_ <カテゴリID>_<サブカテゴリID>_ <オブジェクト> d <count> … h <count> … m <count> 『検索ワード』、『投稿画像』 など、カテゴリを識別するID
  48. 48. 48 トレンド分析システム •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <サービスID>_<日時フォーマット>_ <カテゴリID>_<サブカテゴリID>_ <オブジェクト> d <count> … h <count> … m <count> 『投稿画像』 の 『いいね』、 『コメント』など、カテゴリを 更に細分化するID (任意)
  49. 49. 49 トレンド分析システム •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <サービスID>_<日時フォーマット>_ <カテゴリID>_<サブカテゴリID>_ <オブジェクト> d <count> … h <count> … m <count> 『検索ワード』の『AKB』など、 分析対象となるオブジェクト
  50. 50. 50 トレンド分析システム •スキーマ設計 株式会社サイバーエージェント RowKey ColumnFamily Column Value <サービスID>_<日時フォーマット>_ <カテゴリID>_<サブカテゴリID>_ <オブジェクト> d <count> … h <count> … m <count> 時系列の種類によって ColumnFamilyを分ける Daily -> d Hourly -> h 10分ごと -> m
  51. 51. 51 トレンド分析システム •スキーマ設計 株式会社サイバーエージェント オブジェクトに対する アクティビティのカウント HBaseのカウンタ機能を利用 RowKey ColumnFamily Column Value <サービスID>_<日時フォーマット>_ <カテゴリID>_<サブカテゴリID>_ <オブジェクト> d <count> … h <count> … m <count>
  52. 52. 52 トレンド分析システム 例1) アメブロの検索ワード急上昇ランキング •時系列の種類:Hourly •集計期間: 2014/11/01 0時 ~ 2014/11/02 0時 株式会社サイバーエージェント
  53. 53. 53 トレンド分析システム 例1) アメブロの検索ワード急上昇ランキング •StartRow、StopRowを生成 (0時 ~ 1時) •StartRow: 1_2014110100_1 •StopRow : 1_2014110100_2 株式会社サイバーエージェント アメブロの サービスID 『検索ワード』の カテゴリID Hourlyの フォーマット
  54. 54. 54 トレンド分析システム 例1) アメブロの検索ワード急上昇ランキング •データ取得 (0時 ~ 1時) 株式会社サイバーエージェント Batch HBase Scan データ取得 クエリ(Scan) StartRow: 1_2014110100_1 StopRow: 1_2014110100_2 ColumnFamily: h 検索結果 RowKey: 1_2014110100_1_AKB Value: 100
  55. 55. 55 トレンド分析システム 例1) アメブロの検索ワード急上昇ランキング •24時間分のデータを1時間ごとに取得 •データ整形後、変化点検出のロジックを使ってオブジェクトごとに 急上昇の度合いを算出 -> ランキング生成 株式会社サイバーエージェント
  56. 56. 56 トレンド分析システム 例2) アメブロの検索ワード 『AKB』 の時系列カウント情報取得 •時系列の種類:Daily •集計期間: 2013/11/01 00:00 ~ 2014/11/01 00:00 株式会社サイバーエージェント
  57. 57. 57 トレンド分析システム 株式会社サイバーエージェント API HBase Get データ取得 検索結果 RowKey: 1_20131101_1_AKB Value: 1000 クエリ(Get) RowKey: 1_20131101_1_AKB ColumnFamily: d 例2) アメブロの検索ワード 『AKB』 の時系列カウント情報取得 •データ取得 •Result[] get(List<Get> gets) のクライアントAPIを利用(Java) •集計期間内で日ごとのRowKey、Getインスタンスを生成 •RowKey: 20131101_1_AKB ~ 20141031_1_AKB
  58. 58. 58 トレンド分析システム 例2) アメブロの検索ワード 『AKB』 の時系列カウント情報取得 •管理ツールでグラフ化 株式会社サイバーエージェント
  59. 59. 59 トレンド分析システム 例2) アメブロの検索ワード 『AKB』 の時系列カウント情報取得 •管理ツールでグラフ化 株式会社サイバーエージェント 2014/02/25 AKB48グループ大組閣祭り (AKB48グループ内の 人事異動を発表するイベント) 2014/05/25 AKB48握手会傷害事件 2014/06/08 大島優子卒業コンサート
  60. 60. 60 まとめ •ログ解析基盤PatriotにおけるHBase •HBaseのデータ管理を効率化するツール •投稿監視システムOrionにおけるHBase •二重監視を防ぐ仕組み •トレンド分析システムにおけるHBase •オブジェクトのランキング、時系列情報提供のためのスキーマ設計 株式会社サイバーエージェント
  61. 61. 61 「HBase徹底入門」鋭意執筆中です!2015年初旬発売予定! •本の内容(予定) 第1部 HBaseの基礎 HBaseの基礎について解説します。チ ュートリアルでHBaseを動かします。 第2部 HBaseを用いたアプリケーシ ョン開発 Java API、HBaseのスキーマ設計の考 え方、アプリケーション設計の流れを解説 します。 第3部 HBaseクラスタの構築・運用 クラスタ設計についての考え方、構築 方法、運用方法について解説します。 第4部 HBaseの高度なトピック パフォーマンス・チューニング、 HBaseのエコシステムなどについて解説し ます。 ※画像はイメージです 株式会社サイバーエージェント
  62. 62. 62 最後に •Ameba Technology Laboratoryではエンジニアを募集して います! •akb-lab@cyberagent.co.jp •Hadoop / データマイニング / 機械学習/ 検索 などに 興味がある人はお声がけください。 株式会社サイバーエージェント
  63. 63. ご清聴ありがとうございました。

×