EmbulkとDigdagとデータ分析基盤と

959 views
616 views

Published on

第五回ゲームサーバ勉強会
http://eventdots.jp/event/590582

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
959
On SlideShare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Demo:
    $ embulk guess embulk-example/seed.yml -o config.yml
    $ embulk preview config.yml
    $ embulk run config.yml -c config_diff.yml
  • $ digdag run
    $ digdag —rerun
    $ digdag check
    $ digdag scheduler --project .
    $ digdag schedules -e http://127.0.0.1:65432
  • EmbulkとDigdagとデータ分析基盤と

    1. 1. EmbulkとDigdagとデータ分析基盤と 〜第5回 ゲームサーバ勉強会〜 2016.06.18 Toru Takahashi Support Engineering Manager, Treasure Data, Inc.
    2. 2. WHO AM I ? • Toru Takahashi (@nora96o) • Treasure Data, Inc. • Support Engineering Manager • メールにチャットに、ブログ書いたり、コードを書いたり、 • http://qiita.com/toru-takahashi • 気づくと、社会人4年目に突入・・・ 2
    3. 3. 質問です! • Treasure Data を 知っている人は ? • Fluentd を 知っている人は ? • Embulkを知っている人は? • Digdagを聞いたことがある人は? • インフラ / 分析基盤 を普段から運用や開発をしている人は? • iOS / Android / Unity / フロントエンドの人は? 3
    4. 4. 目次 対象:データ分析基盤を普段触っていない人向け。 1. はじめに 〜 データ分析基盤について 〜 2. Embulk 〜 Bulk Data Loader 〜 3. Digdag 〜 Workflow Automation System 〜 4
    5. 5. 1. はじめに 〜 データ分析基盤について 〜 5
    6. 6. オンラインゲームシステムとデータ分析基盤の関わり 6 Client Server DB オンラインゲームシステム
    7. 7. オンラインゲームシステムとデータ分析基盤の関わり 7 Client Server DB オンラインゲームシステム バッチ処理サーバ ストリーミング 処理サーバ SaaS データ分析処理エンジン BIツール データ分析基盤
    8. 8. データ分析基盤をなぜ必要なのか? • 現状を知る • アクセスUU数や、継続率、課金額、課金率等の基本的なKPI • イベント参加率や達成状況 • ガチャやアイテムの売れ行き • ステータスの上位層・中位層・下位層の推移 • データ分析の流れをスムーズに行う • 顧客を特徴別に分類 • ターゲットの決定 • ターゲットの行動を見る • 行動から要因について仮説を立てる • 仮説を統計的に検証 • データの民主化 8
    9. 9. データ分析基盤への更なる期待:3rd Partyとの連携 9 バッチ処理サーバ ストリーミング 処理サーバ SaaS データ分析処理エンジン BIツール データ分析基盤
    10. 10. データ分析基盤への更なる期待:3rd Partyとの連携 10 バッチ処理サーバ ストリーミング 処理サーバ SaaS データ分析処理エンジン BIツール データ分析基盤
    11. 11. データ分析基盤を支えるOSS Digdag ワークフロー オートメーションシステム Embulk バルクデータローダ Fluentd ストリーミングログコレクタ 注: 画像はイメージです
    12. 12. お知らせ)Fluentd、ロゴかわるってよ 12 #924 Fluentd new logo proposal
    13. 13. データ分析基盤を支えるOSS 13 Client Server DB オンラインゲームシステム バッチ処理サーバ ストリーミング 処理サーバ SaaS データ分析処理エンジン BIツール データ分析基盤
    14. 14. データ分析基盤を支えるOSS 14 Client Server DB オンラインゲームシステム バッチ処理サーバ ストリーミング 処理サーバ SaaS データ分析処理エンジン BIツール データ分析基盤
    15. 15. データ分析基盤を支えるOSS 15 Client Server DB オンラインゲームシステム バッチ処理サーバ ストリーミング 処理サーバ SaaS データ分析処理エンジン BIツール データ分析基盤
    16. 16. データ分析基盤を支えるOSS 16 Client Server DB オンラインゲームシステム バッチ処理サーバ ストリーミング 処理サーバ SaaS データ分析処理エンジン BIツール データ分析基盤 Digdag
    17. 17. データ分析基盤を支えるOSS 17 Client Server DB オンラインゲームシステム バッチ処理サーバ ストリーミング 処理サーバ SaaS データ分析処理エンジン BIツール データ分析基盤 Digdag
    18. 18. TreasureData: データ分析基盤を一気通貫で提供 https://www.treasuredata.com/jp/contact_us 18
    19. 19. 2. Embulk 〜 Bulk Data Loader 〜 19
    20. 20. Embulkとは?- http://embulk.org/ • オープンソースのバルク転送ツール • “A”から”B”へレコード転送 • プラグイン機構 • 多様な”A”と”B”の組み合わせ • データ連携を容易に • システム構築の頭痛の種の一つ 20 broken records, error recovery, maintenance, performance, … Storage, RDBMS, NoSQL, Cloud Service, …
    21. 21. バルクデータ転送の難しさ 1. 入力データの正規化 2. エラー処理 3. メンテナンス 4. パフォーマンス 21
    22. 22. 1. 入力データ正規化の難しさ データエンコーディングのバリエーション • null, 時刻, 浮動小数点 • 改行, エスケープ, レコード/カラム区切り • 文字コード, 圧縮有無 → 試行錯誤をしてデータ正規化 22
    23. 23. 2. エラー処理の難しさ • 例外値の扱い • ネットワークエラーからの復旧 • ディスクフルからの復旧 • 重複データ転送の回避 → データバリデーション, リトライ, リジューム 23
    24. 24. 3. メンテナンスの難しさ • 継続的な動作の確保 • データ転送要件変更への対応 → ドキュメント, 汎用化, OSS化 24
    25. 25. 4. 性能の問題 • 転送データ量は通常増えていく • 対象レコードも増えたりする → 並列・分散処理 25
    26. 26. バルクデータ転送の例(1/3) 指定された 10GB CSV file をPostgreSQLにロード 1. コマンド叩いてみる → 失敗 2. データを正規化するスクリプトを作成 ”20150127T190500Z” → “2015-01-27 19:05:00 UTC”に “null” → “N”に変換 元データを見ながら気付く限り… 3. 再度チャレンジ → 取り込まれたが元データと合わない “Inf” → “Infinity”に変換 4. ひたすら繰り返す 5. うっかりレコードが重複して取り込まれた... 26
    27. 27. バルクデータ転送の例(2/3) 指定された 10GB CSV file をPostgreSQLにロード 6. スクリプトが完成 7. cronに登録して毎日バルクデータロードするよう登録 8. ある日、別の原因でエラーに… 不正なUTF-8 byte sequenceをU+FFFDに変換 27
    28. 28. バルクデータ転送の例(3/3) 過去の日次 10GB CSV file を 730個 を取り込む(2年分) 1. たいていのスクリプトは遅い 最適化している暇がない 1ファイル1時間、エラーが発生しなくても1ヶ月必要 2. 並列データロードするようにスクリプト変更 3. ある日、ディスクフル / ネットワークエラーで失敗 どこまで読み込まれた? 4. 障害後に再開し易いよう、データロード単位を調整 5. 安全な再開機能をスクリプトに追加 28
    29. 29. システム構築の頭痛の種 様々な転送データ、データストレージ • CSV, TSV, JSON, XML, MessagePack, SequenceFile, RCFile • AWS S3, Salesforce.com, Google Cloud Storage, Elasticsearch • MySQL, PostgreSQL, Oracle, MS SQL Server, Amazon Redshift, Redis, MongoDB, BigQuery 29
    30. 30. 30
    31. 31. 31
    32. 32. Embulkのアプローチ • プラグインアーキテクチャ • 入力データ正規化支援: guess, preview • 並列・分散実行 • 繰り返し実行 • トランザクション制御 32
    33. 33. 33
    34. 34. 34
    35. 35. プラグインアーキテクチャ • フレームワークによる恩恵 • 並列処理、繰り返し実行、エラー処理、リカバリ • RubyGemとして配布(http://www.embulk.org/plugins/) • DB • Oracle, MySQL, PostgreSQL, Amazon Redshift, … • SaaS • Salesforce.com, Amazon S3, Google Cloud Storage, Google BigQuery, … • File Format • CSV, TSV, JSON, XML, … • gzip, bzip2, zip, tar, … 35
    36. 36. DEMO - Embulk Local の CSV file を PostgreSQL にロード (ネットワークに問題があると悲しい気持ちになるので、ローカルで全て済ませてます。) 1. guessとpreview 2. 実行 3. 繰り返し実行 36
    37. 37. Embulkプラグインアーキテクチャ概要 • 4種のプラグインとそれを組み上げるフレームワーク 1. Executor: 実行 2. Input: バルクデータのレコード群を取り込み • FileInput, Decoder, Parser: ファイル操作 3. Filter: レコードに対するデータ操作 4. Output: バルクデータのレコード群を出力 • FileOutput, Encoder, Formatter: ファイル操作 37
    38. 38. 38
    39. 39. 39
    40. 40. TreasureDataでのEmbulkのユースケース 40 https://docs.treasuredata.com/categories/result https://docs.treasuredata.com/categories/data-connector
    41. 41. Embulkで解決できないこと 1. YAML管理 2. 単体処理フレームワーク • 事前処理・事後処理 3. ジョブキュー 4. 並列数制御 5. 続きから実行 • 処理間の依存関係 41 参考: Embulkに足りない5つのこと https://speakerdeck.com/civitaspo/embulknizu-rinai5tufalsekoto
    42. 42. Embulkで解決できないこと 1. YAML管理 2. 単体処理フレームワーク • 事前処理・事後処理 3. ジョブキュー 4. 並列数制御 5. 続きから実行 • 処理間の依存関係 42 参考: Embulkに足りない5つのこと https://speakerdeck.com/civitaspo/embulknizu-rinai5tufalsekoto 処理の一連の流れを管理する ところで解決すべきこと
    43. 43. 3. Digdag 〜 Workflow Automation System 〜 43
    44. 44. Workflow Automationとは? • あらゆる手作業の自動化 • 例えば… • データ解析の自動化 • データロード → 前処理 → 複数テーブルの結合 → 集計 → レポート生成 → 通知 • テスト・デプロイの自動化(CI: 継続的インテグレーション) • メール一斉通知 • メールアドレス抽出→条件ごとにフィルタ→メール送信 44
    45. 45. Workflow Automation Systemに求められる機能 • 基本機能 • タスクの順次実行 • 定期的な実行 • イベントに反応して実行 • エラー処理 • 失敗したらリトライ • 失敗したらアラート • 実行時間が長ければアラート • 途中からリジューム • 冪等なリトライ • 状態監視 • タスクの依存関係の可視化 • タスクの実行ログの収集 45 • 高速化 • タスクの並列実行 • 複数サーバの分散実行 • 同時実行数の制限 / フェアスケジューラ / プリエンプション • ワークフロー開発 • GUIベースのワークフロー定義 • ソースコードベースのワークフロー定義 • ワークフローのバージョン管理 • 多数のシステムを制御する為のプラグイン / ライブラリシステ ム • どこでも同じ動作をする再現性・仮想環境内でのタスク実行
    46. 46. 既存のWorkflow Automation System • OSS • Makefile • Jenkins • Luigi • Airflow • Rundeck • Azkaban • … • 商用 • JP1 / AJS3 • … 46 • ETLツールも類似のツール • Talend • DataSpidar • …
    47. 47. Digdagとは? Digdag is a simple tool that helps you to build, run, schedule, and monitor complex pipelines of tasks. It handles dependency resolution so that tasks run in order or in parallel. Digdag fits simple replacement of cron, IT operations automation, data analytics batch jobs, machine learning pipelines, and many more by using Directed Acyclic Graphs (DAG) as the infrastructure. 47 http://www.digdag.io/index.html
    48. 48. ワークフローエンジンに求められる機能 = Digdagでユーザがシンプルに実現できるようにしたい機能 • 基本機能 • タスクの順次実行 • 定期的な実行 • イベントに反応して実行 • エラー処理 • 失敗したらリトライ • 失敗したらアラート • 実行時間が長ければアラート • 途中からリジューム • 冪等なリトライ • 状態監視 • タスクの依存関係の可視化 • タスクの実行ログの収集 48 • 高速化 • タスクの並列実行 • 複数サーバの分散実行 • 同時実行数の制限 / フェアスケジューラ / プリエンプション • ワークフロー開発 • GUIベースのワークフロー定義 • ソースコードベースのワークフロー定義 • ワークフローのバージョン管理 • 多数のシステムを制御する為のプラグイン / ライブラリシステ ム • どこでも同じ動作をする再現性・仮想環境内でのタスク実行
    49. 49. DEMO: DIGDAG (LOCAL MODE) Local の CSV file を PostgreSQL にロードし、 SQLで集計した結果をslackで通知。 (+ローカルでスケジューリング) 49 Digdag *画像はイメージです
    50. 50. timezone: UTC _export: rb: require: 'tasks/myworkflow' +dataload: embulk>: demo/config.yml +counting: rb>: MyWorkflow.pg_calc +notify: py>: tasks.MyWorkflow.slack 50 mydag.dig タスク
    51. 51. timezone: UTC _export: rb: require: ‘tasks/myworkflow' +dataload: embulk>: demo/config.yml +calculation: _parallel: true _export: …. +counting: rb>: MyWorkflow.count +summarizing: rb>: MyWorkflow.summary +slack: py>: tasks.MyWorkflow.slack 51 mydag.dig - Parallel 並列実行 タスクの中にタスクを作ってグループ化
    52. 52. timezone: UTC _export: rb: require: ‘tasks/myworkflow' +dataload: embulk>: demo/config.yml +calculation: _parallel: true _export: …. +counting: rb>: MyWorkflow.count +summarizing: rb>: MyWorkflow.summary +slack: py>: tasks.MyWorkflow.slack 52 mydag.dig - Parallel 並列実行 タスク内だけで適用される設定
    53. 53. Operators • call>: Calls another workflow • require>: Depends on another workflow • py>: Python scripts • rb>: Ruby scripts • sh>: Shell scripts • loop>: Repeat tasks • for_each>: Repeat tasks • if>: Conditional execution • fail>: make the workflow failed • mail>: Sending email • embulk>: Embulk data transfer 53 • td>: Treasure Data queries • td_run>: Treasure Data saved queries • td_load>: Treasure Data bulk loading • td_ddl>: Treasure Data operations • td_table_export>: Treasure Data table export to S3
    54. 54. Commands and Mode • Local-mode commands • new • run • check • scheduler • selfupdate 54 • Server-mode commands • server • Client-mode commands • start • retry • log • kill • workflows • schedules • backfill • reschedule • sessions • attempts • tasks • push
    55. 55. TreasureDataでのユースケース(Privateβ) 55
    56. 56. TreasureDataでのユースケース(Privateβ) 56
    57. 57. 57
    58. 58. まとめ • オンラインゲーム・ソーシャルゲームに、データ分析基盤の存在が当たり前に! • 分析だけじゃない役割も求められるようになってきた。 • データ分析基盤にはデータの流れを作るOSSが大事! • Fluentd • Embulk • Digdag • Embulkはバッチでデータ転送の役割をもち、プラグインで色んなデータソースに対応できる ! • Digdagはバッチ処理のワークフローを簡単に扱うためのオートメーションシステム! • リンク集はこちら。 • Fluentdのバッチ版Embulk(エンバルク)のまとめ • ワークフローエンジンDigdagのまとめ 58
    59. 59. Q&A (あとで質問を思いついたら、お気軽に@nora96oまでmentionしてください。) 59

    ×