Sagatavojot savas izglÄ«tÄ«bas programmas, mÄs periodiski saskaramies ar grÅ«tÄ«bÄm darbÄ ar dažiem rÄ«kiem. Un brÄ«dÄ«, kad ar tiem sastopamies, ne vienmÄr ir pietiekami daudz dokumentÄcijas un rakstu, kas palÄ«dzÄtu tikt galÄ ar Å”o problÄmu.
TÄ tas bija, piemÄram, 2015. gadÄ, un mÄs izmantojÄm Hadoop kopu ar Spark 35 vienlaicÄ«giem lietotÄjiem programmÄ Big Data Specialist. Nebija skaidrs, kÄ to sagatavot Å”Ädam lietotÄja gadÄ«jumam, izmantojot DZIJU. RezultÄtÄ, paÅ”i izdomÄjuÅ”i un izstaigÄjuÅ”i ceļu, viÅi to arÄ« izdarÄ«ja
AizvÄsture
Å oreiz mÄs runÄsim par citu programmu -
KopumÄ viss ir labi. Ä»aujiet viÅiem bÅ«vÄt savus cauruļvadus. TomÄr ir viens ābetā: visas mÅ«su programmas ir tehnoloÄ£iski progresÄ«vas paÅ”a mÄcÄ«bu procesa ziÅÄ. Lai pÄrbaudÄ«tu laboratoriju, mÄs izmantojam automÄtiskos pÄrbaudÄ«tÄjus: dalÄ«bniekam ir jÄiet uz savu personÄ«go kontu, jÄnoklikŔķina uz pogas āPÄrbaudÄ«tā, un pÄc kÄda laika viÅÅ” redz sava veida paplaÅ”inÄtas atsauksmes par paveikto. Un tieÅ”i Å”ajÄ brÄ«dÄ« mÄs sÄkam tuvoties savai problÄmai.
Å Ä«s laboratorijas pÄrbaude tiek sakÄrtota Å”Ädi: mÄs nosÅ«tÄm kontroles datu paketi dalÄ«bnieka Kafka, tad Gobblin pÄrsÅ«ta Å”o datu paketi uz HDFS, pÄc tam Airflow paÅem Å”o datu paketi un ievieto to ClickHouse. ViltÄ«ba ir tÄda, ka Airflow tas nav jÄdara reÄllaikÄ, tas dara to pÄc grafika: reizi 15 minÅ«tÄs tas aizÅem vairÄkus failus un augÅ”upielÄdÄ tos.
IzrÄdÄs, ka mums paÅ”iem pÄc mÅ«su pieprasÄ«juma kaut kÄ jÄiedarbina viÅu DAG, kamÄr pÄrbaudÄ«tÄjs darbojas Å”eit un tagad. GooglÄjot noskaidrojÄm, ka jaunÄkÄm Airflow versijÄm ir t.s experimental
, protams, izklausÄs biedÄjoÅ”i, bet ko lai dara... PÄkÅ”Åi paceļas.
TÄlÄk mÄs aprakstÄ«sim visu ceļu: no Airflow instalÄÅ”anas lÄ«dz POST pieprasÄ«juma Ä£enerÄÅ”anai, kas aktivizÄ DAG, izmantojot eksperimentÄlo API. MÄs strÄdÄsim ar Ubuntu 16.04.
1. Gaisa plÅ«smas uzstÄdÄ«Å”ana
PÄrbaudÄ«sim, vai mums ir Python 3 un virtualenv.
$ python3 --version
Python 3.6.6
$ virtualenv --version
15.2.0
Ja kÄda no tÄm trÅ«kst, instalÄjiet to.
Tagad izveidosim direktoriju, kurÄ turpinÄsim strÄdÄt ar Airflow.
$ mkdir <your name of directory>
$ cd /path/to/your/new/directory
$ virtualenv -p which python3 venv
$ source venv/bin/activate
(venv) $
InstalÄjiet gaisa plÅ«smu:
(venv) $ pip install airflow
Versija, pie kuras strÄdÄjÄm: 1.10.
Tagad mums ir jÄizveido direktorijs airflow_home
, kur atradÄ«sies DAG faili un Airflow spraudÅi. PÄc direktorija izveides iestatiet vides mainÄ«go AIRFLOW_HOME
.
(venv) $ cd /path/to/my/airflow/workspace
(venv) $ mkdir airflow_home
(venv) $ export AIRFLOW_HOME=<path to airflow_home>
NÄkamais solis ir palaist komandu, kas izveidos un inicializÄs datu plÅ«smas datu bÄzi programmÄ SQLite:
(venv) $ airflow initdb
DatubÄze tiks izveidota airflow.db
noklusÄjuma.
PÄrbaudiet, vai ir uzstÄdÄ«ta gaisa plÅ«sma:
$ 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
Ja komanda darbojÄs, Airflow izveidoja savu konfigurÄcijas failu airflow.cfg
Š² AIRFLOW_HOME
:
$ tree
.
āāā airflow.cfg
āāā unittests.cfg
Airflow ir tīmekļa saskarne. To var palaist, izpildot komandu:
(venv) $ airflow webserver --port 8081
Tagad varat piekļūt tÄ«mekļa saskarnei pÄrlÅ«kprogrammÄ, kas atrodas resursdatorÄ, kurÄ darbojÄs Airflow, portÄ 8081, piemÄram: <hostname:8081>
.
2. Darbs ar eksperimentÄlo API
Å ajÄ gaisa plÅ«sma ir konfigurÄta un gatava darbam. TomÄr mums ir jÄpalaiž arÄ« eksperimentÄlÄ API. MÅ«su dambrete ir rakstÄ«ta Python valodÄ, tÄpÄc turpmÄk visi pieprasÄ«jumi tiks uz to, izmantojot bibliotÄku requests
.
Faktiski API jau darbojas vienkÄrÅ”iem pieprasÄ«jumiem. PiemÄram, Å”Äds pieprasÄ«jums ļauj pÄrbaudÄ«t tÄ darbu:
>>> import requests
>>> host = <your hostname>
>>> airflow_port = 8081 #Š² Š½Š°ŃŠµŠ¼ ŃŠ»ŃŃŠ°Šµ ŃŠ°ŠŗŠ¾Š¹, Š° ŠæŠ¾ Š“ŠµŃŠ¾Š»ŃŃ 8080
>>> requests.get('http://{}:{}/{}'.format(host, airflow_port, 'api/experimental/test').text
'OK'
Ja atbildÄ saÅÄmÄt Å”Ädu ziÅojumu, tas nozÄ«mÄ, ka viss darbojas.
TomÄr, kad vÄlamies aktivizÄt DAG, mÄs saskaramies ar faktu, ka Å”Äda veida pieprasÄ«jumu nevar veikt bez autentifikÄcijas.
Lai to izdarÄ«tu, jums bÅ«s jÄveic vairÄkas darbÄ«bas.
PirmkÄrt, jums tas jÄpievieno konfigurÄcijai:
[api]
auth_backend = airflow.contrib.auth.backends.password_auth
PÄc tam jums ir jÄizveido savs lietotÄjs ar administratora tiesÄ«bÄm:
>>> 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()
TÄlÄk jums ir jÄizveido lietotÄjs ar normÄlÄm tiesÄ«bÄm, kam bÅ«s atļauts veikt DAG trigeri.
>>> 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()
Tagad viss ir gatavs.
3. POST pieprasījuma palaiŔana
Pats POST pieprasÄ«jums izskatÄ«sies Å”Ädi:
>>> 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'
PieprasÄ«jums veiksmÄ«gi apstrÄdÄts.
AttiecÄ«gi mÄs dodam DAG kÄdu laiku apstrÄdÄt un iesniegt pieprasÄ«jumu ClickHouse tabulai, mÄÄ£inot noÄ·ert kontroles datu paketi.
VerifikÄcija pabeigta.
Avots: www.habr.com