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のドキュメントにある
- http
- shell
- py
- rb
まとめ
- architecuteのドキュメント
- operatorsのドキュメント
- ruby
- re:Invent digdag
- Qiitaのまとめ
今後の展望
- GUI上での編集機能
- プラグインのRubyGems化