Airflow
workflow as code with python
コード例
開始タイミングや頻度はパラメータ指定の延長で書ける
cron式書いてるし
>>演算子で依存関係
タスクはインスタンスまたは関数呼び出しで表現される
このオペレーターと呼ばれてる「特定の処理を行うクラス」的なものがポイントのようだ?sta.icon
コード例ではBashコマンドラインを実行するBashOperatorってのを使っている
Not
あくまでワークフローツールなので、単にAPI使った処理の自動化用途ではない
GUIでかんたんに組みたい場合も向かない
architecture overview
タスクという作業片を配置していく
taskは3種類
operator …… 定義済みタスク
sensor …… 外部イベントの発生を待つ
@task decorator …… Python関数をタスクとしてパッケージングしたもの
内部的には全部BaseOperatorからサブってるsta.icon
Control flow
>> も << も使える
内部的には task.set_upstream(nexttask) や .set_downstraem(prevtask)
タスクはデフォでは「上流全ての完了を待つ」、が変えられる
これはBranching、LatestOnly、Trigger Rulesなどの機能を使ってカスタマイズすることが可能です。
タスク間でデータを受け渡す、という概念がある
コンポーネント
https://gyazo.com/06deec53dd38432e0dc39f35a9589537
Executorが実行するマン(が実際はWorkerに投げるだけが多いらしい)
Schedulerはスケジューラで、スケジュール満たしたらExecutorを呼ぶ
Workerはタスクを実行するマシン
UIは便利機能を提供する画面
リーダブル
Sub DAG。再利用可能なDAGをつくる
TaskGroup。UIで視覚的にタスクをグルーピング
フックは、DBへの接続などを事前準備する
プールは、並行処理を制限する
以下は公式ではない、端的な解説
components
taskを実行するExecuter、実行スケジュールを管理するScheduler、WebUIでブラウザ上に表示を行うWebserverが存在する。
program kinds
DAG : どのような順序で実行されるかを記述したプログラム
Operator : プログラムを実行するためのテンプレート
Task の定義に Operator が記述されており、Python で処理を実行するための PythonOperator Bash 実行のための BashOperator、他各種 RDBMS や Hive、AWS や GCP など 様々なサービスの APIをコールする Operator が用意されている。
Task : 実行する処理
operatorにはDAGとcommand(タスクの処理内容)を指定しているsta.icon
bashoperatorの例
(上記コード例だけど)@task decoratorで直接関数に処理を書くことでもタスクの処理は書ける
sta.icon