Airflow入門しようと公式ドキュメント読んだメモとリンク集

# 公式ドキュメント
###[公式DOC](https://airflow.apache.org/index.html)

# Tutorial

####[Tutorial](https://airflow.apache.org/tutorial.html)
まずはこれを動かしながら読んで感覚掴む。

- `airflow test ${dag_id} ${task_id} ${start_date}` で依存無視して確認できる
- `airflow backfill ${dag_id} -s ${start_date} ${end_date}` で依存性考慮して実行する
  - start_dateで指定した日付からDagがキューに積まれる

# Celery Executor

#### [Celery Executor](https://airflow.apache.org/howto/executor/use-celery.html)

- workerをスケールアウトできる実行エンジン
- Redis, RabbitMQとかのバックエンドを用意する必要がある
- dagファイルはクラスタで同期してある必要がある
  - 一箇所のGCSやgithubに配置するなど

![スクリーンショット 2019-11-05 11.48.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20307/b3e7a2b6-9c49-c0f4-1cc5-2c4fe8523145.png)


- worker: タスクを実行する
- scheduler: queueにタスクを追加する
- web server: dagやtaskのステータス情報を提供する
- database: dag, task, variables, connectionsなどのステータスを保持
- celery: queueの仕組み
  - celeryは2つの要素を持つ
     - broker: 実行コマンドを保存
     - result backend: 実行済コマンドの保存



#### airflow.cfgで設定できる並行設定

##### [Airflow parallelism](https://stackoverflow.com/questions/38200666/airflow-parallelism)

- parallelist: クラスタ全体でのタスクの最大実行数
- dag_concurrency: worker毎のタスク最大実行数
- max_active_runs_per_dag: dag毎のタスク最大実行数
- worker_concurrency: worker毎のスレッド最大数
- max_threads: schedulerのスレッド最大数

#### [Pool](https://airflow.apache.org/concepts.html#pools)とこの並行設定でチューニングを行う

# Concepts
ここ一番読み応えあり。各種用語の説明がされる。

#### [Dags](https://airflow.apache.org/concepts.html#dags)
実行したいタスクを集めて、関係性を定義したもの。

#### [Operators](https://airflow.apache.org/concepts.html#operators)
実行したいタスクを定義する

#### [Dag Assignment](https://airflow.apache.org/concepts.html#dag-assignment)
いろんな方法が記載されてる

#### [Tasks(Life Cycle)](https://airflow.apache.org/concepts.html#tasks)
Taskにどういうステータスがあるのかがわかる

#### [Hook](https://airflow.apache.org/concepts.html#hooks)
外部システムとのインターフェイスらしい。Operatorでも普通に外部システムとやり取りするのでなぜこれを切り出したのかは謎。

#### [Pool](https://airflow.apache.org/concepts.html#pools)
- 並列実行の制限数
- Menu -> Admin -> Pools で確認できる
- タスクが作られるときにどこかのPoolにアサインされる
- priority_numberでqueueからPoolにアサインされる順位が変わる
- poolがないとqueueにつめられる
- default の pool数は 128

#### [Connections](https://airflow.apache.org/concepts.html#connections)
- UIから設定できる外部への接続情報
- Menu -> Admin -> Connections で確認できる
- GCPとの接続情報とか、DBとの接続情報とかを入れたりできる
- 設定をDagにハードコーディングしたくない人用。

#### [Queues](https://airflow.apache.org/concepts.html#queues)
- Poolにアサインされて実行されるまでに積まれる場所
- Celeryだとどのqueueに積むかを指定できる
- workerは1つでも、複数でもqueueを持てる
- どのタスクをどのキューに入れるかで優先順位を制御できたりする

#### [XComs](https://airflow.apache.org/concepts.html#xcoms)
- タスク同士でメッセージのやり取りを実現させるやつ

#### [Variables](https://airflow.apache.org/concepts.html#variables)
- あらかじめ変数を設定しておきたい場合にUIから設定できる

#### [Branching](https://airflow.apache.org/concepts.html#branching)
- タスク同士の依存に条件つけできたりする
  - このタスク失敗したら、こっちのタスクだけ実行するみたいな

#### [SubDags](https://airflow.apache.org/concepts.html#subdags)
- 複数タスクを1まとめにして、サブダグとして管理できる
  - 同じようなタスクがいっぱいあるとき便利

#### [Trigger Rule](https://airflow.apache.org/concepts.html#trigger-rules)
- タスクのトリガー条件を決められる
  - 親タスクが全て失敗したら...とか、親タスクが1つでも失敗したら ...など

#### [Latest Only](https://airflow.apache.org/concepts.html#latest-run-only)
- リリースしたときに、直近のタスクだけ実行するようにできる
- データのバックアップなどのように、直近分1回完了していればいいようなタスクの場合は便利

#### [Jinja Template](https://airflow.apache.org/concepts.html#id1)
- Jinja Templateが使えるパラメータはコード見に行って、 パラメータに `templated` って書いてあれば使えるって。笑
- マクロも便利

# Command Line
#### [Command Line](https://airflow.apache.org/cli.html)

# Scheduling
#### [Scheduling](https://airflow.apache.org/scheduler.html)
- Dagのスケジューリングの定義の仕方
- catchupをoffにすると、start_dateからdagがいっぱい生成されない
- TaskやDagを clearすると再実行されるよ

# Timezone
[https://airflow.apache.org/timezone.html](https://airflow.apache.org/timezone.html)
- DBにはUTCで入っている
- UIもUTCで表示される

# Integration
[GCP integration](https://airflow.apache.org/integration.html#gcp)

# Macros
#### [Macro](https://airflow.apache.org/macros.html)
- jinjaで使えるMacro

# API詳細
#### [API](https://airflow.apache.org/_api/index.html)