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.

Data Engineering Meetup #1 持続可能なデータ基盤のためのデータの多様性に対する取り組み

940 views

Published on

持続可能なデータ基盤のための
データの多様性に対する取り組み
秋葉原ラボ

Published in: Engineering
  • Be the first to comment

Data Engineering Meetup #1 持続可能なデータ基盤のためのデータの多様性に対する取り組み

  1. 1. 持続可能なデータ基盤のための データの多様性に対する取り組み 20190319 CyberAgent, Inc. All Rights Reserved
  2. 2. 善明 晃由 ●2011年3月中途入社 ●所属:技術本部秋葉原ラボ ●データ解析基盤や関連システムの開発運用を担当 ●前職はメーカの研究所で分散コンピューティングなどの研究開 発を担当
  3. 3. 「データを活用」してサービスと会社の発展に寄与する 秋葉原ラボについて
  4. 4. ● データエンジニアリングの領域は技術的負債が生まれや すい ○ 専門性が高く採用が難しい ○ 規模が比較的大きく各種アップデートもコストが大きい ○ 技術の進歩が早く、専門性を磨いて最新の動向をキャッチアップ する必要がある ● 秋葉原ラボにおける技術的負債を減らし持続的な発展を 目指す取り組みの事例 ○ 共通部分と可変部分を分析しシステム統合を促進 ○ ドメインモデリングなどの活用 概要
  5. 5. ● 問題意識と方針 ● 事例 ○ レポーティングツールの整理統合 ○ 非構造化データ参照のAPIのプロダクト化 ● まとめ 本日の流れ
  6. 6. ● 縦割り組織の弊害 ○ 各サービスが独立 + マーケティングなどの横軸 ○ 様々な案件が独立して進む ■ 似た案件があっても気づきづらい 問題意識 システムのサイロ化
  7. 7. ● サイロ化が加速 ○ それぞれに十分なリソースをさけない ○ 各担当にフルスタックのスキルが求められる 問題意識 ● 開発から運用 ● アプリケーション、ミドル ウェア、CI/CD、監視
  8. 8. ● フルスタック化の結果 ○ 開発から運用まで幅広く担当する必要があり、専門性が深められない ○ 変化が早い分野なので容易に技術的負債につながる 問題意識 アップデートのための 時間がとれない (調査・検証など)
  9. 9. ● フルスタック化の結果 ○ 採用が進まない + 属人化の加速 ○ 退職等による技術的負債化 問題意識 再起動くらいしかでき ない ● 開発から運用 ● アプリケーション、ミドル ウェア、CI/CD、監視 そんなにいない 大規模データ処理や機械 学習まで含めるとほとんど いない
  10. 10. ● 各システムのプロダクト化を促進 ○ 何が同じで何が違うかを分析 ■ ドメインモデリングなど ○ 共通部分をプロダクト化 ● 役割の分離 ○ 専門性を高め機能・品質強化に貢献 ○ システムとして統合し活用できる状態にする 方針
  11. 11. ● 問題意識と方針 ● 事例 ○ WebUIの整理統合 ○ 非構造化データ参照のAPIのプロダクト化 ● まとめ 本日の流れ
  12. 12. ログ解析基盤の全体像 パブリッククラウドレコメンデーションシステム Patriot データ転送管理 ストリーム処理エンジン HTTP API / WebUIMySQL etc.. Logs { “date”:”20190319”, “pv”: 12345 }
  13. 13. ● Hiveでログを集計した結果をHBaseに書き込み ● HBaseから結果を取得し可視化 WebUI 概要 Hive HBase
  14. 14. ● HBaseの各フィールドにどの属性値を置くか ● キーの値が先頭からうまるクエリほど効率的に処理できる ○ アクセスパターンに応じたスキーマ設計が重要 → 用途によってデータの表現が異なる HBaseにおけるスキーマ設計 問い合わせの際にserviceを 指定することが必須
  15. 15. ● 行動ログベースのレポーティング ○ PVやユニークユーザ数を可視化 ○ Rowkeyにはサービス名や指標名など WebUIのサイロ化 data warehouse Hive Table Hive Table Hive Table data mart HBase Tablewrite client read client web app 指標名を指定して一定期間 のデータを取得 行動ログレポーティング (UU, 課金額など)
  16. 16. ● アクセス解析 ○ ページごとのPVやレスポンスタイム ○ RowkeyにはドメインやURLのパスなど WebUIのサイロ化 data warehouse Hive Table Hive Table Hive Table data mart HBase Tablewrite client read client web app指標名固定、URLを指定して 特定日のデータを取得 HBase Table web appwrite client read client アクセス解析 (PV、レスポンスタイム)
  17. 17. ● 広告の効果測定 ○ インプレッション、コンバージョン数 ○ Rowkeyは広告枠や広告の識別子 WebUIのサイロ化 data warehouse Hive Table Hive Table Hive Table data mart HBase Tablewrite client read client web app HBase Table web appwrite client read client 広告効果解析 (IMP、CV) HBase Table web appwrite client read client 様々な分析軸 (広告枠、広告ID, etc)
  18. 18. ● 可変部分 ○ フィールド中の属性リストと区切り方 ● 共通部分 ○ byte[] の結合と分割 (ByteBufferの利用など) HBaseクライアントの分析 public byte[] toRowKey(Map appRecord){ ByteBuffer buf = ByteBuffer.allocate(capacity) buf.writeInt(service.length) buf.write(service) buf.writeInt(indicator.length) buf.write(indicator) … return buf.array() } 属性ごとに繰り返す内容は パターン化できる パターンの 組み合わせ方が異なる
  19. 19. ● 設計モデル ○ フィールドはフォーマッタのリスト ○ フォーマッタにはDecoratorパターンを適用 ● 各エンティティにbyte[]の直列化に対するロールを割り当て 汎用的なツールの設計 FieldLayout RecordFormatter AttributeFormatter FormatDecorator SizePrefixDecorator SuffixDecorator
  20. 20. 汎用的なツールの実装 Hive Table Hive Table Hive Table HBase Tablewrite client read client web app HBase Table web app HBase Table web app ● 標準的なインタフェースでKeyValueとの変換処理を提供 ○ Hive Storage Handler, JDBCドライバ ○ 集計バッチやWebアプリではHBaseを意識しなくてよい ● 各アプリケーションと独立にHBaseに特化した拡張が可能 ○ 対応スキーマの拡張 ○ 問い合わせ処理の最適化 Hive Storage Handler JDBCドライバ
  21. 21. 汎用的なツールの実装 Hive Table Hive Table Hive Table HBase Tablewrite client read client web app HBase Table web app HBase Table web app ● 標準的なインタフェースでKeyValueとの変換処理を提供 ○ Hive Storage Handler, JDBCドライバ ○ 集計バッチやWebアプリではHBaseを意識しなくてよい ● 各アプリケーションと独立にHBaseに特化した拡張が可能 ○ 対応スキーマの拡張 ○ 問い合わせ処理の最適化 サイロ化されたまま
  22. 22. ● 似たようなデータでも表示形式が異なる ○ 時系列データの例 レポート形式の違い value time 20190318 20190319 0時 1時 2時 3時 4時 時系列の変化をみるグラフ 時間帯ごとの比較グラフ
  23. 23. ● 元となるデータは表形式 ○ 表のフォーマットが異なる ○ 表にどう整形するかを体系立てればよい ○ 描画ロジックが再利用可能になる レポート形式の多様性 Time Value 2019-03-18 23 150 2019-03-19 00 200 Data 0時 1時 2時 ... 20190318 100 110 120 ... 20190319 200 210 220 ...
  24. 24. 表と値のモデリング date service action uu sum 20170306 game login 9500 N/A 20170306 game spend 2300 5200 : ● 表 ○ 2種類の軸から構成 ■ 絞りこみに使う軸(キー軸) ■ 取得した値を表示する ● 値 ○ 一つ以上のタグで識別される ■ 既存の時系列データベースと同じ
  25. 25. Grafanaを一般化したイメージ 時系列以外の軸にも対 応できるように
  26. 26. 現在の構成 Hive Table Hive Table Hive Table HBase Tablewrite client read client web app HBase Table HBase Table データストア担当 フロント担当 リアルタイム集計 システム フロントエンドのスキルのみで 可視化やUIの改善が可能 タグ付けメトリクスと みなせれば他のシステムとの 連携も容易 データストア関連の 改善に集中できる
  27. 27. ● "スキーマ定義に基づくSQLライクなKey-Valueストアクラ イアント", 第8回データ工学と情報マネジメントに関する フォーラム (DEIM2016), 2016. ● "可視化のための非構造データの表化手法", 第9回データ 工学と情報マネジメントに関するフォーラム (DEIM2017), 2017. これまでの内容
  28. 28. ● 問題意識と方針 ● 事例 ○ レポーティングツールの整理統合 ○ 非構造化データ参照のAPIのプロダクト化 ● まとめ 本日の流れ
  29. 29. ● HBaseはその他用途以外にも存在 ○ エンドユーザ向けアクセス解析システム ○ 機械学習のオフライン推論 ■ など データ参照のAPIのプロダクト化 ● 前述の技術を活用しシステムの整理統合を促進したい
  30. 30. ● 特定のパスにスキーマを定義 するのみでデータ参照APIが構 成可能 FROM zumwalt:latest ARG VERSION COPY config/source/* /opt/zumwalt/source/ COPY config/table/* /opt/zumwalt/table/ COPY config/record/* /opt/zumwalt/record/ COPY target/zumwalt-owned-${VERSION}.jar /opt/zumwalt/lib/ Dockerコンテナ化 { "attributes": [ {"name": "site_id", "isKey": true, "type": "string"}, ... ], "schemas": [ { "type":”hbase”, "conf": { "hbase.zookeeper.quorum": "xxx.yyyy:2181"}}, "fields": [ {"name": "table", "format": [{"type": "const", "props": {"value": "owned_media"}}]}, {"name": "rowkey","format": [ { "type": "suffix", "props": {"suffix": "u0000"}, "decoratee": {"type": "const", "props": {"value": "u0001"}} },... ] },... }
  31. 31. FROM zumwalt:latest ARG VERSION COPY config/source/* /opt/zumwalt/source/ COPY config/table/* /opt/zumwalt/table/ COPY config/record/* /opt/zumwalt/record/ COPY target/zumwalt-owned-${VERSION}.jar /opt/zumwalt/lib/ Dockerコンテナ化 private TableRowSet getBatchDaily(String siteId, String indicator, String fromDate, String toDate, String type) throws IOException { List<ZumwaltPredicate> conditions = Arrays.asList( new EqualPredicate<>(ATTR_SITE_ID, siteId), new EqualPredicate<>(ATTR_INDICATOR, indicator), new EqualPredicate<>(ATTR_TYPE, type), new BetweenPredicate<>(ATTR_DATE, fromDate, toDate) ); return metricsService.readTableContent(OWNED_MEDIA_DAILY_TABLE, conditions); } ● カスタムコード ○ 単純なデータの取得であれば不要 ○ 後方互換性のためのリクエスト・レスポンス形式の変換など ■ 述語オブジェクトを作成し、データ取得メソッドを呼ぶのみ
  32. 32. ● アノテーション管理ツール ● データ転送管理システム ● 機械学習モデル管理システム 上流工程・ドメインエンジニアリングを重視 多様性を管理し持続可能性を高める その他の取り組み
  33. 33. ● 多様性を管理し技術的負債をうまないための取り組み ● HBase関連システムの統合における事例を紹介 まとめ

×