読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

memo: Digdagの特徴とQuick Start #wfemeetup

勉強会

Digdag :Digdagの特徴とQuick Start #wfemeetup

TreasureData

  • fluentd
  • digdag
  • messagepack

workload automation

  • 手作業の自動化
    • バッチデータ解析
      • アクセスログ
      • ETL 集計処理 レポート生成 通知
      • データロード
    • メール送信
    • システム間のデータ連携
    • プロビジョニング自動化
    • サーバ/DB/ネットワーク機器管理
    • CI

求められる機能

  • タスクを実行
  • 定期実行
  • ファイルを作成されたら実行
  • 過去分の一括ジック
  • エラーハンドリング
    • 失敗通知 -リトライ
  • 状態監視
    • 失敗してないけど実行時間が長いやつ
    • タスクの実行時間
    • 実行ログの収集と保存
  • 高速化
    • タスクの並列
      • 直列実行だと時間がかかる
      • 同時実行数制限
    • ワークフローのバージョン管理
    • GUIによるワークフロー開発
      • ここがまだ
    • ローカルで再現できる
    • Docker

ワークフローエンジン

OSS

  • Makefile
  • Jenkins
  • Luigi

商用

  • CA Workload

プログラミング言語型

  • Pythonなどコーディングで実装する
    • Luigi
    • Airflow
  • なんでもかける
    • 読み書きが少しむずかしい
  • Gitで管理できる
  • なんでも書ける
    • 全体の俯瞰が難しい

GUI型

  • GUIでポチポチやると動く
    • Rundeck
    • Jenkins
  • どのサーバで何を実行するか
  • 誰でも開発できる
  • 組み上げが簡単
  • 複雑なループ処理が難しい
  • バージョン管理が難しい
  • 再現性が低い ローカルで試しづらい

定義ファイル + スクリプト型

  • 定義ファイルに設定を書く
    • Azkaban
  • Gitでバージョン管理できる
  • それなりに書きやすい
  • スクリプトの理解が必要で煩雑になる
  • プログラミング言語型と比較して成約が多い

Digdag

  • 定義ファイル
  • オペレータ
  • グループ化

  • 書きやすい 読みやすい

  • よくやる処理ならプログラミングしなくていい
  • 特殊な処理ならスクリプトを書ける
  • 実行状態をチェックする管理UIがある
  • Gitでバージョン管理できる
  • DSLの理解が必要

グループ化

  • ワークフロー
    • Ingest
    • Enrich
    • Model
    • Load
    • Utilize
  • タスクは直列と並列を織り交ぜて実行される
    • グループ化することで処理の俯瞰が楽になる

デモ

  • TDへクエリを実行して、実行結果をTDのテーブルに突っ込む
    • プラスでグループ化
    • TDとの連携は、楽
    • 書いたdigをdigdagpushすることですることでGUI上で実行できるようになる
    • GUIで進捗を確認できる
    • RETRY FAILEDを押すことで失敗したジョブから先のジョブを実行できる
    • RETRY ALLを押すことで全部再実行できる
    • backfillを使って過去データを再集計できる
      • (過去の時点でジョブを実行できる)

オペレーター

  • wait_for_arrival
    • s3
  • load_table
    • redshift
  • td/mail
  • パラレル実行
  • ループ

  • オペレーターのリストはdigdagのドキュメントにある

    • mail
    • http
    • shell
    • py
    • rb

まとめ

  • architecuteのドキュメント
  • operatorsのドキュメント
  • ruby
  • re:Invent digdag
  • Qiitaのまとめ

今後の展望

  • GUI上での編集機能
  • プラグインのRubyGems化