ืืขืช ืืื ืช ืืชืืื ืืืช ืืืื ืืืืืช ืฉืื ื, ืื ื ื ืชืงืืื ืืขืช ืืขืช ืืงืฉืืื ืืื ืืงืฉืืจ ืืขืืืื ืขื ืืืื ืืกืืืืื. ืืืจืืข ืฉืื ื ื ืชืงืืื ืืื, ืื ืชืืื ืืฉ ืืกืคืืง ืชืืขืื ืืืืืจืื ืฉืืขืืจื ืื ื ืืืชืืืื ืขื ืืืขืื ืืื.
ืื ืืื ืืืงืจื, ืืืฉื, ืืฉื ืช 2015, ืืืืืื ืืชืืื ืืช "Big Data Specialist" ืืฉืชืืฉื ื ืืืฉืืื Hadoop ืขื Spark ืขืืืจ 35 ืืฉืชืืฉืื ืื ืืื ืืช. ืื ืืื ืืจืืจ ืืืฆื ืืืืื ืืืชื ืืืงืจื ืฉืืืืฉ ืืื ืืืืฆืขืืช YARN. ืืกืืคื ืฉื ืืืจ, ืืืืจ ืฉืืื ื ืืช ืื ืืืืื ื ืืฉืืื ืืขืฆืื ื, ืขืฉืื ื ืืืช
ืคืจืืืกืืืจืื
ืืคืขื ื ืืืจ ืขื ืชืืื ืืช ืืืจืช -
ืืื ืืื ืืืจื ืืื. ืชื ืืื ืืื ืืช ืฆืื ืืจืืช ืืฉืืื. ืขื ืืืช, ืืฉ "ืืื": ืื ืืชืื ืืืช ืฉืื ื ืืชืงืืืืช ืืืืื ื ืืื ืืืืืืช ืื ืงืืืช ืืืื ืฉื ืชืืืื ืืืืืื ืขืฆืื. ืืื ืืืืืง ืืช ืืืขืืื, ืื ื ืืฉืชืืฉืื ืืืืืงืื ืืืืืืืืื: ืืืฉืชืชืฃ ืฆืจืื ืืขืืืจ ืืืฉืืื ืืืืฉื ืฉืื, ืืืืืฅ ืขื ืืคืชืืจ "ืืืืง", ืืืืืจ ืืื ืื ืืื ืจืืื ืกืื ืฉื ืืฉืื ืืืจืื ืขื ืื ืฉืขืฉื. ืืืจืืข ืื ืื ื ืืชืืืืื ืืืชืงืจื ืืืขืื ืฉืื ื.
ืืืืืืช ืฉื ืืขืืื ืื ืื ืื ืื: ืื ื ืฉืืืืื ืืืืืช ื ืชืื ื ืืงืจื ืืงืคืงื ืฉื ืืืฉืชืชืฃ, ืืื Gobblin ืืขืืืจ ืืช ืืืืืช ืื ืชืื ืื ืืื ื-HDFS, ืืื Airflow ืืืงื ืืช ืืืืืช ืื ืชืื ืื ืืื ืืืื ืืก ืืืชื ื-ClickHouse. ืืืืืื ืืื ืฉ-Airflow ืื ืืืืืช ืืขืฉืืช ืืืช ืืืื ืืืช, ืืื ืขืืฉื ืืืช ืืคื ืืื ืืื ืื: ืื 15 ืืงืืช ืืื ืืืงืืช ืืืืจื ืฉื ืงืืฆืื ืืืขืื ืืืชื.
ืืกืชืืจ ืฉืื ืื ื ืฆืจืืืื ืืืืฉืื ืืืคืขืื ืืช ื-DAG ืฉืืื ืืขืฆืื ื ืืืงืฉืชื ื ืืืื ืฉืืืืืง ืคืืขื ืืื ืืขืืฉืื. ืืืืจ ืืืคืืฉ ืืืืื, ืืืืื ื ืฉืขืืืจ ืืจืกืืืช ืืืืืจืืช ืืืชืจ ืฉื Airflow ืืฉ ืื ืฉื ืงืจื experimental
, ืืืืื, ืื ื ืฉืืข ืืคืืื, ืืื ืื ืืขืฉืืช... ืคืชืืื ืื ืืืจืื.
ืืืืจ ืืื, ื ืชืืจ ืืช ืื ืื ืชืื: ืืืชืงื ืช Airflow ืืขื ืืืฆืืจืช ืืงืฉืช POST ืฉืืคืขืืื ืืช ื-DAG ืืืืฆืขืืช ื-API ืื ืืกืืื ื. ืื ื ื ืขืืื ืขื ืืืืื ืื 16.04.
1. ืืชืงื ืช ืืจืืืช ืืืืืจ
ืืื ื ืืืืง ืฉืืฉ ืื ื Python 3 ื-virtualenv.
$ python3 --version
Python 3.6.6
$ virtualenv --version
15.2.0
ืื ืืฉืื ืืื ืืกืจ, ืื ืืชืงื ืืืชื.
ืืขืช ื ืืฆืืจ ืกืคืจืืื ืื ื ืืฉืื ืืขืืื ืขื Airflow.
$ 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. ืืืืจ ืืฆืืจืช ืืกืคืจืืื, ืืืืจ ืืช ืืฉืชื ื ืืกืืืื 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 ืืืชืงื:
$ 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 ืืฆืจื ืงืืืฅ ืชืฆืืจื ืืฉืื airflow.cfg
ะฒ AIRFLOW_HOME
:
$ tree
.
โโโ airflow.cfg
โโโ unittests.cfg
ืืืจืืืช ืืืืืืจ ืืฉ ืืืฉืง ืืื ืืจื ื. ื ืืชื ืืืคืขืื ืืืชื ืขื ืืื ืืคืขืืช ืืคืงืืื:
(venv) $ airflow webserver --port 8081
ืืขืช ืชืืื ืืืงืืฉ ืขื ืืืฉืง ืืืื ืืจื ื ืืืคืืคื ืืืฆืืื 8081 ืืืืจื ืฉืื ืคืขื Airflow, ืืืืืื: <hostname:8081>
.
2. ืขืืืื ืขื API ื ืืกืืื ื
ืืฉืื ืื, ืืจืืืช ืืืืืืจ ืืืืืจืช ืืืืื ื ืืคืขืืื. ืขื ืืืช, ืขืืื ื ืืืคืขืื ืื ืืช ื-API ืื ืืกืืื ื. ืืืืงื ืฉืื ื ืืชืืื ื-Python, ืื ืฉืืืืฉื ืื ืืืงืฉืืช ืืืื ืื ืืืืฆืขืืช ืืกืคืจืืื 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
ืืงืฉืช ื-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'
ืืืงืฉื ืืืคืื ืืืฆืืื.
ืืืชืื ืืื, ืื ื ื ืืชื ืื ื-DAG ืงืฆืช ืืื ืืขืื ืืืืืืฉ ืืงืฉื ืืืืืช ClickHouse, ืื ืืกืืื ืืชืคืืก ืืช ืืืืืช ื ืชืื ื ืืืงืจื.
ืืืืืงื ืืืฉืืื.
ืืงืืจ: www.habr.com