Mar a nì thu inneal-brosnachaidh DAG ann an Airflow a’ cleachdadh an API Experimental

Nuair a bhios sinn ag ullachadh ar prògraman foghlaim, bidh sinn bho àm gu àm a’ tighinn tarsainn air duilgheadasan a thaobh a bhith ag obair le innealan sònraichte. Agus aig an àm a choinnicheas sinn riutha, chan eil an-còmhnaidh sgrìobhainnean agus artaigilean gu leòr ann a chuidicheadh ​​​​sinn gus dèiligeadh ris an duilgheadas seo.

Bha seo fìor, mar eisimpleir, ann an 2015, agus rè a’ phrògram “Big Data Specialist” chleachd sinn cruinneachadh Hadoop le Spark airson 35 neach-cleachdaidh aig an aon àm. Cha robh e soilleir ciamar a dhèanadh tu ullachadh airson a leithid de chùis cleachdaidh a’ cleachdadh YARN. Aig a’ cheann thall, an dèidh dhuinn obrachadh a-mach agus an t-slighe a choiseachd leinn fhìn, rinn sinn sin post air Habré agus chluich e cuideachd aig Coinneamh Moscow Spark.

ro-eachdraidheil

An turas seo bruidhnidh sinn mu phrògram eile - Innleadair Dàta. Bidh na com-pàirtichean againn a’ togail dà sheòrsa ailtireachd air: lambda agus kappa. Agus ann an ailtireachd lamdba, mar phàirt de ghiollachd baidse, thathas a’ cleachdadh Airflow gus logaichean a ghluasad bho HDFS gu ClickHouse.

Tha a h-uile dad math san fharsaingeachd. Leig leotha na pìoban aca fhèin a thogail. Ach, tha “ach” ann: tha na prògraman againn uile adhartach gu teicneòlach bho shealladh a’ phròiseas ionnsachaidh fhèin. Gus sgrùdadh a dhèanamh air an obair-lann, bidh sinn a ’cleachdadh luchd-dearbhaidh fèin-ghluasadach: feumaidh an com-pàirtiche a dhol chun chunntas pearsanta aige, cliog air a’ phutan “Thoir sùil”, agus às deidh beagan ùine chì e fios air ais leudaichte air na rinn e. Agus is ann aig an àm seo a thòisicheas sinn a’ tighinn faisg air ar trioblaid.

Tha dearbhadh an obair-lann seo air a structaradh mar seo: bidh sinn a’ cur pasgan dàta smachd gu Kafka a’ chom-pàirtiche, an uairsin bidh Gobblin a’ gluasad a’ phacaid dàta seo gu HDFS, an uairsin bidh Airflow a’ toirt a’ phacaid dàta seo agus ga chuir ann an ClickHouse. Is e an cleas nach fheum Airflow seo a dhèanamh ann an àm fìor, bidh e ga dhèanamh a rèir clàr-ama: a h-uile 15 mionaid bheir e dòrlach de fhaidhlichean agus gan luchdachadh suas.

Tha e a ’tionndadh a-mach gum feum sinn dòigh air choireigin an DAG aca a phiobrachadh leis an iarrtas againn fhad‘ s a tha an neach-dearbhaidh a ’ruith an seo agus an-dràsta. Às deidh googling, fhuair sinn a-mach gu bheil sin ann airson dreachan nas fhaide air adhart de Airflow API deuchainneach. Am facal experimental, gu dearbh, tha e a' faireachdainn eagallach, ach dè a nì thu... Gu h-obann bheir e dheth.

An ath rud, bheir sinn cunntas air an t-slighe gu lèir: bho bhith a’ stàladh Airflow gu bhith a’ gineadh iarrtas POST a bhrosnaicheas an DAG a’ cleachdadh an API Experimental. Obraichidh sinn le Ubuntu 16.04.

1. Stàladh airflow

Feuch an dèan sinn cinnteach gu bheil Python 3 agus virtualenv againn.

$ python3 --version
Python 3.6.6
$ virtualenv --version
15.2.0

Ma tha gin de seo a dhìth, an uairsin stàlaich e.

A-nis cruthaichidh sinn eòlaire anns am bi sinn ag obair còmhla ri Airflow.

$ mkdir <your name of directory>
$ cd /path/to/your/new/directory
$ virtualenv -p which python3 venv
$ source venv/bin/activate
(venv) $

Stàlaich Airflow:

(venv) $ pip install airflow

An dreach air an do dh'obraich sinn: 1.10.

A-nis feumaidh sinn eòlaire a chruthachadh airflow_home, far am bi faidhlichean DAG agus plugins Airflow suidhichte. Às deidh dhut an eòlaire a chruthachadh, suidhich caochladair na h-àrainneachd AIRFLOW_HOME.

(venv) $ cd /path/to/my/airflow/workspace
(venv) $ mkdir airflow_home
(venv) $ export AIRFLOW_HOME=<path to airflow_home>

Is e an ath cheum òrdugh a ruith a chruthaicheas agus a thòisicheas stòr-dàta sruth-dàta ann an SQLite:

(venv) $ airflow initdb

Thèid an stòr-dàta a chruthachadh ann an airflow.db àbhaisteach.

Feuch an dèan sinn cinnteach a bheil Airflow air a chuir a-steach:

$ 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

Ma dh ’obraich an àithne, chruthaich Airflow am faidhle rèiteachaidh aige fhèin airflow.cfg в AIRFLOW_HOME:

$ tree
.
├── airflow.cfg
└── unittests.cfg

Tha eadar-aghaidh lìn aig Airflow. Faodar a chuir air bhog le bhith a’ ruith an àithne:

(venv) $ airflow webserver --port 8081

Faodaidh tu a-nis bualadh air an eadar-aghaidh lìn ann am brobhsair air port 8081 air an aoigh far an robh Airflow a ’ruith, mar eisimpleir: <hostname:8081>.

2. Ag obair le Experimental API

Aig an ìre seo, tha Airflow air a rèiteachadh agus deiseil airson a dhol. Ach, feumaidh sinn cuideachd an API Experimental a ruith. Tha na seiceadairean againn sgrìobhte ann am Python, agus mar sin bidh a h-uile iarrtas ann a’ cleachdadh an leabharlainn requests.

Gu dearbh, tha an API mar-thà ag obair airson iarrtasan sìmplidh. Mar eisimpleir, leigidh an t-iarrtas seo leat deuchainn a dhèanamh air a ghnìomhachd:

>>> import requests
>>> host = <your hostname>
>>> airflow_port = 8081 #в нашем случае такой, а по дефолту 8080
>>> requests.get('http://{}:{}/{}'.format(host, airflow_port, 'api/experimental/test').text
'OK'

Ma gheibh thu a leithid de theachdaireachd mar fhreagairt, tha e a 'ciallachadh gu bheil a h-uile càil ag obair.

Ach, nuair a tha sinn airson DAG a bhrosnachadh, tha sinn nar n-aghaidh nach urrainnear an seòrsa iarrtas seo a dhèanamh gun dearbhadh.

Gus seo a dhèanamh, feumaidh tu grunn cheumannan a bharrachd a dhèanamh.

An toiseach, feumaidh tu seo a chur ris an config:

[api]
auth_backend = airflow.contrib.auth.backends.password_auth

An uairsin, feumaidh tu do neach-cleachdaidh a chruthachadh le còraichean rianachd:

>>> 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()

An ath rud, feumaidh tu neach-cleachdaidh a chruthachadh le còraichean àbhaisteach a gheibh cead an DAG a phiobrachadh.

>>> 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()

A-nis tha a h-uile dad deiseil.

3. Cuir air bhog iarrtas POST

Bidh an t-iarrtas POST fhèin a’ coimhead mar seo:

>>> 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'

Chaidh an t-iarrtas a phròiseasadh gu soirbheachail.

Mar sin, bidh sinn an uairsin a’ toirt beagan ùine don DAG airson pròiseasadh agus iarrtas a chuir gu clàr ClickHouse, a’ feuchainn ris a’ phacaid dàta smachd a ghlacadh.

Check crìochnaichte.

Source: www.habr.com

Cuir beachd ann