āĻāĻŽāĻžāĻĻā§āϰ āĻļāĻŋāĻā§āώāĻžāĻŽā§āϞāĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻā§āϞāĻŋ āĻĒā§āϰāϏā§āϤā§āϤ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻŽāϰāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāϰāĻā§āĻāĻžāĻŽāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻžāϰ āĻā§āώā§āϤā§āϰ⧠āĻĒāϰā§āϝāĻžāϝāĻŧāĻā§āϰāĻŽā§ āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽā§āĻŽā§āĻā§āύ āĻšāĻāĨ¤ āĻāĻŦāĻ āĻāĻ āĻŽā§āĻšā§āϰā§āϤ⧠āϝāĻāύ āĻāĻŽāϰāĻž āϤāĻžāĻĻā§āϰ āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāĻ, āϏā§āĻāĻžāύ⧠āϏāϰā§āĻŦāĻĻāĻž āϝāĻĨā§āώā§āĻ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ āĻāĻŦāĻ āύāĻŋāĻŦāύā§āϧ āĻĨāĻžāĻā§ āύāĻž āϝāĻž āĻāĻŽāĻžāĻĻā§āϰ āĻāĻ āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āĻŽā§āĻāĻžāĻŦā§āϞāĻž āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§āĨ¤
āĻāĻāĻŋ āĻāĻŋāϞ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, 2015 āϏāĻžāϞā§, āĻāĻŦāĻ "āĻŦāĻŋāĻ āĻĄā§āĻāĻž āϏā§āĻĒā§āĻļāĻžāϞāĻŋāϏā§āĻ" āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϰ āϏāĻŽāϝāĻŧ āĻāĻŽāϰāĻž 35 āĻāύ āĻāĻāϝā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāύā§āϝ āϏā§āĻĒāĻžāϰā§āĻ āϏāĻš āĻāĻāĻāĻŋ āĻšā§āϝāĻžāĻĄā§āĻĒ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻāĻŋāĨ¤ āĻāϝāĻŧāĻžāϰā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻ āϧāϰāύā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻā§āĻāĻžāĻŦā§ āĻāĻāĻŋ āĻĒā§āϰāϏā§āϤā§āϤ āĻāϰāĻž āϝāĻžāϝāĻŧ āϤāĻž āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāĻŋāϞ āύāĻžāĨ¤ āĻļā§āώ āĻĒāϰā§āϝāύā§āϤ, āĻāĻāĻŋ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰ⧠āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āϰ āύāĻŋāĻāϏā§āĻŦ āĻĒāĻĨā§ āĻšāĻžāĻāĻāĻž, āĻāĻŽāϰāĻž āϤāĻž āĻāϰā§āĻāĻŋ āĻāĻŦāĻ āĻ āϏāĻā§āĻāĻžāϞāĻŋāϤ .
āĻĒā§āϰāĻžāĻāĻāϤāĻŋāĻšāĻžāϏāĻŋāĻ
āĻāĻŦāĻžāϰ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻāĻŋāύā§āύ āĻāϰā§āĻŽāϏā§āĻāĻŋ āύāĻŋāϝāĻŧā§ āĻāĻĨāĻž āĻŦāϞāĻŦ- . āĻāĻŽāĻžāĻĻā§āϰ āĻ āĻāĻļāĻā§āϰāĻšāĻŖāĻāĻžāϰā§āϰāĻž āĻāĻāĻŋāϤ⧠āĻĻā§āĻāĻŋ āϧāϰāĻŖā§āϰ āϏā§āĻĨāĻžāĻĒāϤā§āϝ āϤā§āϰāĻŋ āĻāϰā§: āϞā§āϝāĻžāĻŽā§āĻŦāĻĻāĻž āĻāĻŦāĻ āĻāĻžāĻĒāĻžāĨ¤ āĻāĻŦāĻ lamdba āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰā§, āĻŦā§āϝāĻžāĻ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻāϰāĻŖā§āϰ āĻ āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§, āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠HDFS āĻĨā§āĻā§ āĻā§āϞāĻŋāĻ āĻšāĻžāĻāϏ⧠āϞāĻ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤
āϏāĻŦāĻāĻŋāĻā§āĻ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻžāϞā§āĨ¤ āϤāĻžāĻĻā§āϰ āύāĻŋāĻāϏā§āĻŦ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĻāĻŋāύāĨ¤ āϝāĻžāĻāĻšā§āĻ, āĻāĻāĻāĻŋ āĻāĻŋāύā§āϤ⧠āĻāĻā§: āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŽāϏā§āϤ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻļā§āĻāĻžāϰ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāϰ āĻĻā§āώā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§ āĻĒā§āϰāϝā§āĻā§āϤāĻŋāĻāϤāĻāĻžāĻŦā§ āĻāύā§āύāϤāĨ¤ āϞā§āϝāĻžāĻŦ āĻā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻŽāϰāĻž āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋ: āĻ āĻāĻļāĻā§āϰāĻšāĻŖāĻāĻžāϰā§āĻā§ āϤāĻžāϰ āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻā§ āϝā§āϤ⧠āĻšāĻŦā§, "āĻā§āĻ" āĻŦā§āϤāĻžāĻŽā§ āĻā§āϞāĻŋāĻ āĻāϰāϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻŋāĻā§ āϏāĻŽāϝāĻŧā§āϰ āĻĒāϰ⧠āϏ⧠āϝāĻž āĻāϰā§āĻā§ āϤāĻžāϰ āĻāĻĒāϰ āĻāĻŋāĻā§ āĻŦāϰā§āϧāĻŋāϤ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āĨ¤ āĻāĻŦāĻ āĻāĻ āĻŽā§āĻšā§āϰā§āϤ⧠āĻāĻŽāϰāĻž āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŽāϏā§āϝāĻžāϰ āĻāĻžāĻā§ āϝā§āϤ⧠āĻļā§āϰ⧠āĻāϰāĻŋāĨ¤
āĻāĻ āϞā§āϝāĻžāĻŦā§āϰ āϝāĻžāĻāĻžāĻāĻāϰāĻŖāĻāĻŋ āĻāĻāĻāĻžāĻŦā§ āĻāĻ āĻŋāϤ: āĻāĻŽāϰāĻž āĻ āĻāĻļāĻā§āϰāĻšāĻŖāĻāĻžāϰā§āϰ āĻāĻžāĻĢāĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻāύā§āĻā§āϰā§āϞ āĻĄā§āĻāĻž āĻĒā§āϝāĻžāĻā§āĻ āĻĒāĻžāĻ āĻžāĻ, āϤāĻžāϰāĻĒāϰ āĻāĻŦāϞāĻŋāύ āĻāĻ āĻĄā§āĻāĻž āĻĒā§āϝāĻžāĻā§āĻāĻāĻŋ HDFS-āĻ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāϰā§, āϤāĻžāϰāĻĒāϰ Airflow āĻāĻ āĻĄā§āĻāĻž āĻĒā§āϝāĻžāĻā§āĻāĻāĻŋ āύāĻŋāϝāĻŧā§ āĻā§āϞāĻŋāĻ āĻšāĻžāĻāϏ⧠āϰāĻžāĻā§āĨ¤ āĻā§āĻļāϞāĻāĻŋ āĻšāϞ āϝ⧠āĻāϝāĻŧāĻžāϰāĻĢā§āϞā§āĻā§ āϰāĻŋāϝāĻŧā§āϞ āĻāĻžāĻāĻŽā§ āĻāĻāĻŋ āĻāϰāϤ⧠āĻšāĻŦā§ āύāĻž, āĻāĻāĻŋ āĻāĻāĻāĻŋ āϏāĻŽāϝāĻŧāϏā§āĻā§ āĻ āύā§āϏāĻžāϰ⧠āĻāĻāĻŋ āĻāϰā§: āĻĒā§āϰāϤāĻŋ 15 āĻŽāĻŋāύāĻŋāĻā§ āĻāĻāĻŋ āĻāĻāĻā§āĻā§āĻ āĻĢāĻžāĻāϞ āύā§āϝāĻŧ āĻāĻŦāĻ āϏā§āĻā§āϞāĻŋ āĻāĻĒāϞā§āĻĄ āĻāϰā§āĨ¤
āĻĻā§āĻāĻž āϝāĻžāĻā§āĻā§ āϝ⧠āĻā§āĻāĻžāϰ āĻāĻāĻžāύ⧠āĻāĻŦāĻ āĻāĻāύ āĻāϞāĻā§ āϤāĻāύ āĻāĻŽāĻžāĻĻā§āϰ āĻ
āύā§āϰā§āϧ⧠āϤāĻžāĻĻā§āϰ āĻĄāĻŋāĻāĻāĻŋāĻā§ āύāĻŋāĻā§āĻĻā§āϰāĻā§ āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻā§āĻāϞāĻŋāĻāϝāĻŧā§āϰ āĻĒāϰā§, āĻāĻŽāϰāĻž āĻā§āĻāĻā§ āĻĒā§āϝāĻŧā§āĻāĻŋ āϝ⧠āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āĻāϰ āĻĒāϰāĻŦāϰā§āϤ⧠āϏāĻāϏā§āĻāϰāĻŖāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϤāĻĨāĻžāĻāĻĨāĻŋāϤ āϰāϝāĻŧā§āĻā§ āĨ¤ āĻļāĻŦā§āĻĻ experimental, āĻ
āĻŦāĻļā§āϝāĻ, āĻāĻāĻž āĻā§āϤāĻŋāĻāϰ āĻļā§āύāĻžāĻā§āĻā§, āĻāĻŋāύā§āϤ⧠āĻāĻŋ āĻāϰāĻŦ... āĻšāĻ āĻžā§ āĻāϰā§āĻ āϤāĻž āĻŦāύā§āϧ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤
ĐаĐģĐĩĐĩ ĐžĐŋиŅĐĩĐŧ вĐĩŅŅ ĐŋŅŅŅ: ĐžŅ ŅŅŅаĐŊОвĐēи Airflow Đ´Đž ŅĐžŅĐŧиŅОваĐŊĐ¸Ņ POST-СаĐŋŅĐžŅа, ĐēĐžŅĐžŅŅĐš ŅŅĐ¸ĐŗĐŗĐĩŅĐ¸Ņ DAG, иŅĐŋĐžĐģŅСŅŅ Experimental API. РайОŅаŅŅ ĐąŅĐ´ĐĩĐŧ Ņ Ubuntu 16.04.
1. āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āĻāύāϏā§āĻāϞā§āĻļāύ
āĻāĻŽāĻžāĻĻā§āϰ Python 3 āĻāĻŦāĻ virtualenv āĻāĻā§ āϤāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āϝāĻžāĻāĨ¤
$ python3 --version
Python 3.6.6
$ virtualenv --version
15.2.0
āϝāĻĻāĻŋ āĻāϰ āĻā§āύāĻāĻŋ āĻ āύā§āĻĒāϏā§āĻĨāĻŋāϤ āĻĨāĻžāĻā§ āϤāĻŦā§ āĻāĻāĻŋ āĻāύāϏā§āĻāϞ āĻāϰā§āύāĨ¤
āĻāĻāύ āĻāĻāĻāĻŋ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰāĻž āϝāĻžāĻ āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āύāĻŋāϝāĻŧā§ āĻāĻžāĻ āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāĻŦāĨ¤
$ mkdir <your name of directory>
$ cd /path/to/your/new/directory
$ virtualenv -p which python3 venv
$ source venv/bin/activate
(venv) $
āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āĻāύāϏā§āĻāϞ āĻāϰā§āύ:
(venv) $ pip install airflow
āĻāĻŽāϰāĻž āϝ⧠āϏāĻāϏā§āĻāϰāĻŖā§ āĻāĻžāĻ āĻāϰā§āĻāĻŋ: 1.10āĨ¤
āĻāĻāύ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻāĻŋ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻšāĻŦā§ airflow_home, āϝā§āĻāĻžāύ⧠DAG āĻĢāĻžāĻāϞ āĻāĻŦāĻ āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āĻĒā§āϞāĻžāĻāĻāύāĻā§āϞāĻŋ āĻ
āĻŦāϏā§āĻĨāĻŋāϤ āĻšāĻŦā§ā§ˇ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻĒāϰā§, āĻĒāϰāĻŋāĻŦā§āĻļ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻļā§āϞ āϏā§āĻ āĻāϰā§āύ AIRFLOW_HOME.
(venv) $ cd /path/to/my/airflow/workspace
(venv) $ mkdir airflow_home
(venv) $ export AIRFLOW_HOME=<path to airflow_home>
āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒāĻĻāĻā§āώā§āĻĒāĻāĻŋ āĻšāϞ āĻāĻāĻāĻŋ āĻāĻŽāĻžāύā§āĻĄ āĻāĻžāϞāĻžāύ⧠āϝāĻž SQLite āĻ āĻāĻāĻāĻŋ āĻĄā§āĻāĻžāĻĢā§āϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āϤā§āϰāĻŋ āĻāĻŦāĻ āĻāϰāĻŽā§āĻ āĻāϰāĻŦā§:
(venv) $ airflow initdb
āĻĄāĻžāĻāĻžāĻŦā§āϏ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāĻŦā§ airflow.db āĻĄāĻŋāĻĢāϞā§āĻ.
āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āĻāύāϏā§āĻāϞ āĻāϰāĻž āĻāĻā§ āĻāĻŋāύāĻž āϤāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āϝāĻžāĻ:
$ airflow version
[2018-11-26 19:38:19,607] {__init__.py:57} INFO - Using executor SequentialExecutor
[2018-11-26 19:38:19,745] {driver.py:123} INFO - Generating grammar tables from /usr/lib/python3.6/lib2to3/Grammar.txt
[2018-11-26 19:38:19,771] {driver.py:123} INFO - Generating grammar tables from /usr/lib/python3.6/lib2to3/PatternGrammar.txt
____________ _____________
____ |__( )_________ __/__ /________ __
____ /| |_ /__ ___/_ /_ __ /_ __ _ | /| / /
___ ___ | / _ / _ __/ _ / / /_/ /_ |/ |/ /
_/_/ |_/_/ /_/ /_/ /_/ ____/____/|__/
v1.10.0
āϝāĻĻāĻŋ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻāĻžāĻ āĻāϰā§, āϤāĻŦā§ āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āϤāĻžāϰ āύāĻŋāĻāϏā§āĻŦ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰā§āĻā§ airflow.cfg в AIRFLOW_HOME:
$ tree
.
âââ airflow.cfg
âââ unittests.cfg
āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āĻāĻāĻāĻŋ āĻāϝāĻŧā§āĻŦ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻā§. āĻāĻāĻŋ āĻāĻŽāĻžāύā§āĻĄ āĻāĻžāϞāĻžāύā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻžāϞ⧠āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§:
(venv) $ airflow webserver --port 8081
āĻāĻĒāύāĻŋ āĻāĻāύ āĻšā§āϏā§āĻā§āϰ āĻĒā§āϰā§āĻ 8081-āĻ āĻāĻāĻāĻŋ āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠āĻāϝāĻŧā§āĻŦ āĻāύā§āĻāĻžāϰāĻĢā§āϏ⧠āĻāĻāĻžāϤ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝā§āĻāĻžāύ⧠Airflow āĻāϞāĻāĻŋāϞ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ: <hostname:8081>.
2. āĻĒāϰā§āĻā§āώāĻžāĻŽā§āϞāĻ API āĻāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻž
āĻāĻ āĻŽā§āĻšā§āϰā§āϤā§, āĻāϝāĻŧāĻžāϰāĻĢā§āϞ⧠āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻāĻŦāĻ āϝā§āϤ⧠āĻĒā§āϰāϏā§āϤā§āϤāĨ¤ āϝāĻžāĻāĻšā§āĻ, āĻāĻŽāĻžāĻĻā§āϰ āĻĒāϰā§āĻā§āώāĻžāĻŽā§āϞāĻ API āĻāĻžāϞāĻžāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻŽāĻžāĻĻā§āϰ āĻā§āĻāĻžāϰāĻā§āϞāĻŋ āĻĒāĻžāĻāĻĨāύ⧠āϞā§āĻāĻž āĻāĻā§, āϤāĻžāĻ āĻāϰāĻ āϏāĻŽāϏā§āϤ āĻ
āύā§āϰā§āϧ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϤ⧠āĻĨāĻžāĻāĻŦā§ requests.
āĻāϏāϞā§, API āĻāϤāĻŋāĻŽāϧā§āϝ⧠āϏāĻžāϧāĻžāϰāĻŖ āĻ āύā§āϰā§āϧā§āϰ āĻāύā§āϝ āĻāĻžāĻ āĻāϰā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻ āĻ āύā§āϰā§āϧāĻāĻŋ āĻāĻĒāύāĻžāĻā§ āĻāϰ āĻ āĻĒāĻžāϰā§āĻļāύ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧ:
>>> import requests
>>> host = <your hostname>
>>> airflow_port = 8081 #в ĐŊаŅĐĩĐŧ ŅĐģŅŅаĐĩ ŅаĐēОК, а ĐŋĐž Đ´ĐĩŅĐžĐģŅŅ 8080
>>> requests.get('http://{}:{}/{}'.format(host, airflow_port, 'api/experimental/test').text
'OK'
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻ āĻāĻžāϤā§āϝāĻŧ āĻŦāĻžāϰā§āϤāĻž āĻĒāĻžāύ āϤāĻŦā§ āĻāϰ āĻ āϰā§āĻĨ āĻšāϞ āϏāĻŦāĻāĻŋāĻā§ āĻāĻžāĻ āĻāϰāĻā§āĨ¤
āϝāĻžāĻāĻšā§āĻ, āϝāĻāύ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ DAG āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻāĻžāĻ, āϤāĻāύ āĻāĻŽāϰāĻž āĻāĻ āϏāϤā§āϝā§āϰ āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāĻ āϝ⧠āĻāĻ āϧāϰāύā§āϰ āĻ āύā§āϰā§āϧ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāĻžāĻĄāĻŧāĻž āĻāϰāĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤
āĻāĻāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻĒāύāĻžāĻā§ āĻāϰāĻ āĻāϝāĻŧā§āĻāĻāĻŋ āĻĒāĻĻāĻā§āώā§āĻĒ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
āĻĒā§āϰāĻĨāĻŽā§, āĻāĻĒāύāĻžāĻā§ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ⧠āĻāĻāĻŋ āϝā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§:
[api]
auth_backend = airflow.contrib.auth.backends.password_auth
āϤāĻžāϰāĻĒāϰā§, āĻāĻĒāύāĻžāĻā§ āĻ ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻ āϧāĻŋāĻāĻžāϰ āϏāĻš āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻšāĻŦā§:
>>> import airflow
>>> from airflow import models, settings
>>> from airflow.contrib.auth.backends.password_auth import PasswordUser
>>> user = PasswordUser(models.Admin())
>>> user.username = 'new_user_name'
>>> user.password = 'set_the_password'
>>> session = settings.Session()
>>> session.add(user)
>>> session.commit()
>>> session.close()
>>> exit()
āĻāϰ āĻĒāϰā§, āĻāĻĒāύāĻžāĻā§ āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻ āϧāĻŋāĻāĻžāϰ āϏāĻš āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻšāĻŦā§ āϝāĻžāĻā§ DAG āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āĻāϝāĻŧāĻž āĻšāĻŦā§āĨ¤
>>> import airflow
>>> from airflow import models, settings
>>> from airflow.contrib.auth.backends.password_auth import PasswordUser
>>> user = PasswordUser(models.User())
>>> user.username = 'newprolab'
>>> user.password = 'Newprolab2019!'
>>> session = settings.Session()
>>> session.add(user)
>>> session.commit()
>>> session.close()
>>> exit()
āĻāĻāύ āϏāĻŦāĻāĻŋāĻā§ āĻĒā§āϰāϏā§āϤā§āϤāĨ¤
3. āĻāĻāĻāĻŋ POST āĻ āύā§āϰā§āϧ āĻāĻžāϞ⧠āĻāϰā§āύ⧎
āĻĒā§āϏā§āĻ āĻ āύā§āϰā§āϧ āύāĻŋāĻā§āĻ āĻāĻ āĻŽāϤ āĻĻā§āĻāĻžāĻŦā§:
>>> dag_id = newprolab
>>> url = 'http://{}:{}/{}/{}/{}'.format(host, airflow_port, 'api/experimental/dags', dag_id, 'dag_runs')
>>> data = {"conf":"{"key":"value"}"}
>>> headers = {'Content-type': 'application/json'}
>>> auth = ('newprolab', 'Newprolab2019!')
>>> uri = requests.post(url, data=json.dumps(data), headers=headers, auth=auth)
>>> uri.text
'{n "message": "Created <DagRun newprolab @ 2019-03-27 10:24:25+00:00: manual__2019-03-27T10:24:25+00:00, externally triggered: True>"n}n'
āĻ āύā§āϰā§āϧ āϏāĻĢāϞāĻāĻžāĻŦā§ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āĻāϰāĻž āĻšāϝāĻŧā§āĻā§.
āϤāĻĻāύā§āϏāĻžāϰā§, āĻāĻŽāϰāĻž āĻĄāĻŋāĻāĻāĻŋāĻā§ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŋāĻā§ āϏāĻŽāϝāĻŧ āĻĻāĻŋāĻ āĻāĻŦāĻ āĻā§āϞāĻŋāĻāĻšāĻžāĻāϏ āĻā§āĻŦāĻŋāϞ⧠āĻāĻāĻāĻŋ āĻ āύā§āϰā§āϧ āĻāϰāĻŋ, āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻĄā§āĻāĻž āĻĒā§āϝāĻžāĻā§āĻāĻāĻŋ āϧāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŋāĨ¤
āĻā§āĻ āϏāĻŽā§āĻĒāύā§āύ āĻšāϝāĻŧā§āĻā§āĨ¤
āĻāϤā§āϏ: www.habr.com
