เปเบเปเบงเบฅเบฒเบเบตเปเบเบฒเบเบเบฐเบเบฝเบกเปเบเบเบเบฒเบเบเบฒเบเบชเบถเบเบชเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฅเบฐเปเบฅเบเบฐเบเบปเบเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบเบทเปเบญเบเบกเบทเบชเบฐเปเบเบฒเบฐเปเบเบซเบเบถเปเบ. เปเบฅเบฐเปเบเปเบงเบฅเบฒเบเบตเปเปเบเปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบปเบเบเบงเบเปเบเบปเบฒ, เบเปเปเบกเบตเปเบญเบเบฐเบชเบฒเบเปเบฅเบฐเบเบปเบเบเบงเบฒเบกเบเบฝเบเบเปเบเบตเปเบเบฐเบเปเบงเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบฎเบฑเบเบกเบทเบเบฑเบเบเบฑเบเบซเบฒเบเบตเป.
เบเบตเปเปเบกเปเบเบเปเบฅเบฐเบเบต, เบเบปเบงเบขเปเบฒเบ, เปเบเบเบต 2015, เปเบฅเบฐเปเบเบฅเบฐเบซเบงเปเบฒเบเปเบเบเบเบฒเบ "Big Data Specialist" เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเปเบเบธเปเบก Hadoop เบเบฑเบ Spark เบชเปเบฒเบฅเบฑเบ 35 เบเบนเปเปเบเปเบเปเบญเบกเปเบเบฑเบ. เบกเบฑเบเบเปเปเบเบฐเปเบเปเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบฐเบเบฝเบกเบกเบฑเบเบชเปเบฒเบฅเบฑเบเบเปเบฅเบฐเบเบตเบเบฒเบเบเปเบฒเปเบเปเบเบฑเปเบเบเปเบฒเบงเปเบเบเปเบเป YARN. เปเบโเบเบตเปโเบชเบธเบ, เปเบเปโเบเบดเบโเบญเบญเบโเบกเบฑเบโเบญเบญเบโเปเบฅเบฐโเปเบเบตเบโเบเบฒเบโเบเบญเบโเบเบปเบโเปเบญเบ, เบเบงเบโเปเบฎเบปเบฒโเปเบเปโเปเบฎเบฑเบ
เบเบฐเบงเบฑเบเบชเบฒเบ
เปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเปเบเบเบเบฒเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ -
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบเบเบเบปเปเบงเปเบเปเบกเปเบเบเบต. เปเบซเปเบเบงเบเปเบเบปเบฒเบชเปเบฒเบเบเปเปเบเบญเบเบเบปเบเปเบญเบ. เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบกเบต "เปเบเป": เปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบซเบกเบปเบเปเบกเปเบเบเปเบฒเบงเบซเบเปเบฒเบเบฒเบเบเปเบฒเบเปเบเบฑเบเปเบเปเบฅเบขเบตเบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบญเบเบเบฐเบเบงเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเบเบปเบงเบกเบฑเบเปเบญเบ. เปเบเบทเปเบญเบเบงเบเปเบเบดเปเบเบซเปเบญเบเบเบปเบเบฅเบญเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบทเปเบญเบเบเบงเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ: เบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบเบซเบฒเบเบฑเบเบเบตเบชเปเบงเบเบเบปเบงเบเบญเบเบฅเบฒเบง, เบเบปเบเบเบธเปเบก "เบเบงเบเปเบเบดเปเบ", เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเปเบงเบฅเบฒเปเบเบซเบเบถเปเบเบฅเบฒเบงเปเบซเบฑเบเบเบฒเบเบเปเบฒเบเบดเบเบปเบกเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบชเบดเปเบเบเบตเปเบฅเบฒเบงเปเบเปเปเบฎเบฑเบ. เปเบฅเบฐเบกเบฑเบเปเบกเปเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบฅเบตเปเบกเปเบเบปเปเบฒเบซเบฒเบเบฑเบเบซเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เบเบฒเบเบขเบฑเปเบเบขเบทเบเบเบญเบเบซเปเบญเบเบเบปเบเบฅเบญเบเบเบตเปเปเบกเปเบเบกเบตเปเบเบเบชเปเบฒเบเปเบเบฑเปเบเบเบตเป: เบเบงเบเปเบฎเบปเบฒเบชเบปเปเบเบเบธเบเบเปเปเบกเบนเบเบเบฒเบเบเบงเบเบเบธเบกเปเบเบซเบฒ Kafka เบเบญเบเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบก, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ Gobblin เปเบญเบเบเบธเบเบเปเปเบกเบนเบเบเบตเปเปเบเบซเบฒ HDFS, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ Airflow เปเบญเบปเบฒเบเบธเบเบเปเปเบกเบนเบเบเบตเปเปเบฅเบฐเบงเบฒเบเปเบงเปเปเบ ClickHouse. เปเบเบฑเบเบฅเบฑเบเปเบกเปเบเบงเปเบฒ Airflow เบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฎเบฑเบเปเบเบเบเบตเปเปเบเปเบงเบฅเบฒเบเบดเบ, เบกเบฑเบเปเบฎเบฑเบเบเบฒเบกเบเบฒเบเบฐเบฅเบฒเบ: เบเบธเบเป 15 เบเบฒเบเบตเบกเบฑเบเปเบเปเปเบงเบฅเบฒเบซเบผเบฒเบเปเบเบฅเปเปเบฅเบฐเบญเบฑเบเปเบซเบฅเบเบเบงเบเบกเบฑเบ.
เบกเบฑเบเบเบฐเบเบปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบฐเบเบธเปเบ DAG เบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบญเบเบเบฒเบกเบเปเบฒเบฎเปเบญเบเบเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบเบฐเบเบฐเบเบตเปเบเบปเบงเบเบงเบเบชเบญเบเบเปเบฒเบฅเบฑเบเปเบฅเปเบเบขเบนเปเบเบตเปเบเบตเปเปเบฅเบฐเปเบเบเบฑเบเบเบธเบเบฑเบ. เบซเบผเบฑเบเบเบฒเบ googling, เบเบงเบเปเบฎเบปเบฒเบเบปเบเปเบซเบฑเบเบงเปเบฒเบชเปเบฒเบฅเบฑเบเบชเบฐเบเบฑเบเบเปเปเบกเบฒเบเบญเบ Airflow เบกเบตเบญเบฑเบเบเบตเปเปเบญเบตเปเบเบงเปเบฒ experimental
, เปเบเปเบเบญเบ, เบกเบฑเบเบเบฑเบเปเบฅเปเบงเปเบเบฑเบเบเบฒเบขเปเบฒเบ, เปเบเปเบเบฐเปเบฎเบฑเบเปเบเบงเปเบ... เบเบฑเบเปเบเบเบฑเปเบเบกเบฑเบเบเปเบญเบญเบเปเบ.
เบเปเปเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบญเบฐเบเบดเบเบฒเบเปเบชเบฑเปเบเบเบฒเบเบเบฑเบเบซเบกเบปเบ: เบเบฒเบเบเบฒเบเบเบดเบเบเบฑเปเบ Airflow เปเบเบทเปเบญเบชเปเบฒเบเบเปเบฒเบฎเปเบญเบเบเป POST เบเบตเปเบเบฐเบเบธเปเบ DAG เปเบเบเปเบเป API เบเบปเบเบฅเบญเบ. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ Ubuntu 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) $
เบเบดเบเบเบฑเปเบ Airflow:
(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>
เบเบฑเปเบเบเบญเบเบเปเปเปเบเปเบกเปเบเปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบชเบฑเปเบเบเบตเปเบเบฐเบชเปเบฒเบเปเบฅเบฐเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบเปเปเบกเบนเบ dataflow เปเบ 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
Airflow เบกเบตเบเบฒเบเปเบเปเบเบญเบเปเบงเบฑเบเปเบเบเป. เบกเบฑเบเบชเบฒเบกเบฒเบเบเบทเบเปเบเบตเบเบเบปเบงเปเบเบเบเบฒเบเปเบฅเปเบเบเปเบฒเบชเบฑเปเบ:
(venv) $ airflow webserver --port 8081
เบเบญเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบตเบเบฒเบเปเบเปเบเบญเบเปเบงเบฑเบเปเบเบเบฃเบฒเบงเปเบเบตเปเบเบดเบเบเบญเบ 8081 เปเบเบดเบเปเบฎเบชเบเบตเป Airflow เปเบฅเปเบเบขเบนเป, เบเบปเบงเบขเปเบฒเบ: <hostname:8081>
.
2. เปเบฎเบฑเบเบงเบฝเบเบเบฑเบ API เบเบปเบเบฅเบญเบ
เปเบเบเบธเบเบเบตเป, Airflow เปเบเปเบเบทเบเบเบฑเปเบเบเปเบฒเปเบฅเบฐเบเปเบญเบกเบเบตเปเบเบฐเปเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฒเปเบเบตเบเบเบฒเบ API เบเบปเบเบฅเบญเบ. checkers เบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบทเบเบเบฝเบเปเบงเปเปเบ 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
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเปเบฒเบเบเบนเปเปเบเปเบเบญเบเบเปเบฒเบเบเปเบงเบเบชเบดเบเบเบด admin:
>>> 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