áááºá¹ááá¬áá« Habrá á€áá±á¬ááºážáá«ážááœááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá±á¬áºááá¯áááẠDWH ááá¯á·ááá¯áẠáááºá DataLake á á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬ážááœáẠbatch data processing áá¯ááºáááºážá ááºáá»á¬ážááᯠáá±á¬áºáá±á¬ááºáááºá¡ááœáẠáá±á¬ááºážááœááºáá±á¬ tool áá áºáá¯á¡ááŒá±á¬ááºáž ááŒá±á¬ááŒááá¯áá«áááºá Apache Airflow (áá±á¬áẠAirflow áá¯áááºááœáŸááºážáááº) á¡ááŒá±á¬ááºážááŒá±á¬áá«áááºá áááºážááẠHabré á¡áá±á«áº á¡á¬áá¯á¶á á°ážá áá¯ááºááŸá¯ áááºážáá²á·áá±ááŒá®áž á¡ááá á¡ááá¯ááºážááœáẠáááºá ETL/ELT áá¯ááºáááºážá ááºáá»á¬ážá¡ááœáẠá¡áááºážáá¯á¶áž Airflow ááẠááá·áº ETL/ELT áá¯ááºáááºážá ááºáá»á¬ážá¡ááœáẠá¡áá»áááºááá¬ážááœá²áá°ááᯠááœá±ážáá»ááºááá·áºá¡áá« ááŒáá·áºááŸá¯ááá·áºááẠáᯠáá»áœááºá¯ááºáá¯á¶ááŒááºááẠááŒáá¯ážá á¬ážáá«áááºá
á¡áááºá Tinkoff Bank ááŸá¬ á¡áá¯ááºáá¯ááºáá¯ááºážá DWH áá±á«ááºážá ááºáá²á· áá±á¬ááºážáá«ážááœá± áááºááá¯ááºáá±ážáá²á·áááºá ááá¯áá»áœááºá¯ááºááẠMail.Ru Group á¡ááœá²á·ááá áºá áááºáá áºááá¯ááºážááŒá áºáá¬ááŒá®áž ááááºážáá á¬ážááá·áºá§áááá¬ááŸá áá±áá¬ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡ááœáẠááááºáá±á¬ááºážáá áºáá¯ááᯠáá±á¬áºáá±á¬ááºáá±áá«áááºá á¡ááŸááºááááºáá±á¬á· ááááºážáá²á· á áááºáááºá á¬ážá áá¬áá±á¬ááºážáá²á· ááŒá±ááŸááºážáááºážááœá± áá±á«áºáá¬áá¬áá²á·á¡áá»áŸá áá»áœááºá¯ááºáá²á· á¡ááœá²á·áᬠáá±áá¬ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡ááœáẠáá»áœááºá¯ááºááá¯á·áá²á· ááááºáá±á¬ááºážá¡ááŒá±á¬ááºáž áá®ááŸá¬ ááœá±ážááœá±ážáá«áááºá
á áá¬ážáá»á®áž
áá«ááᯠá
ááá¯ááºáá¡á±á¬ááºá Airflow ááá¯áá¬áá¬áá²á á€áááºááŸá¬ á
á¬ááŒáá·áºááá¯áẠ(ááá¯á·ááá¯ááº)
á¡áᯠAirflow áá²á· á¡ááá á¡á áááºá¡ááá¯ááºážááœá±ááᯠááŒáá·áºáá¡á±á¬ááºá áááºážááá¯á·á á¡ááŸá áºáá¬áááŸáá·áº áááºááœááºáá»ááºááᯠáá¬ážáááºááŒááºážááŒáá·áºá áááºááẠáááºá áá¯ááºáááºážá áẠáááºáá±á¬ááºááŸá¯ áá¯á¶á á¶ááᯠá¡áá±á¬ááºážáá¯á¶áž á á¯á ááºážááá¯ááºáááºá á¡ááá á¡ááŒá±á¬ááºážá¡áá¬ááŸá¬ Directed Acyclic Graph (áá±á¬áẠDAG áᯠáááºááœáŸááºážáááº)á
DAG
DAG ááẠáááá»áá±á¬á¡áá»áááºááá¬ážáá áºáá¯á¡á áááá»á áœá¬áááºááŸááºáá¬ážáá±á¬ á¡á á®á¡á á¥áºáá áºáá¯ááŒáá·áº ááŒá®ážááŒá±á¬ááºááá¯áá±á¬ áááºááá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážá á¡áááá¹áá«ááºááŸááá±á¬ áááºá ááºááŸá¯á¡áá»áá¯á·ááŒá áºáááºá Airflow ááẠDAG áá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáááºá¡ááœáẠá¡áááºááŒá±áá±á¬ áááºá¡ááºáá¬áá±á·á áºááᯠáá¶á·ááá¯ážáá±ážáááº-
DAG ááẠá€áá²á·ááá¯á· ááŒá áºáááº-
developer ááẠDAG ááᯠáá®ááá¯ááºážááœá²ááá·áºá¡áá« DAG á¡ááœááºážááŸá áá¯ááºáá±á¬ááºááá·áº á¡áá¯ááºáá»á¬ážááᯠáááºáá±á¬ááºááá·áº operators á¡á á¯á¶ááᯠáá»áá¬ážáááºá á€ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá¬ážá¡áá±ážááŒá®ážáá±á¬ á¡áá¬ááŒá áºáááº- Airflow á¡á±á¬áºááá±áá¬á
á¡á±á¬áºááá±áá¬
á¡á±á¬áºááá±áá¬áá
áºáá¯ááẠá¡áá¯ááºá¡ááºá
áá®áá»á°ážááŸááºážáá»á¬ážááᯠáááºáá®ážááá·áºá¡áá±á«áº á¡ááŒá±áá¶ááá·áº á¡ááœá²á·á¡á
ááºážáá
áºáá¯ááŒá
áºááŒá®ážá á¡áá¯ááºáá
áºáá¯á¡á¬áž áá¯ááºáá±á¬ááºáá±á
ááºá¡ááœááºáž ááŒá
áºáá»ááºááá·áºá¡áá¬áá»á¬ážááᯠáá±á¬áºááŒáááºá
- BashOperator - bash á¡áááá·áºááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠá¡á±á¬áºááá±áá¬á
- PythonOperator - Python áá¯ááºááá¯áá±á«áºááá¯áááºá¡ááœáẠá¡á±á¬áºááá±áá¬á
- EmailOperator â á¡á®ážáá±ážááºááá¯á·áááºá¡ááœáẠá¡á±á¬áºááá±áá¬á
- HTTPOperator - http áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠá¡á±á¬áºááá±áá¬á
- SqlOperator - SQL áá¯ááºááá¯áá¯ááºáá±á¬ááºáááºá¡ááœááºá¡á±á¬áºááá±áá¬á
- á¡á¬áá¯á¶áá¶áááááá¬ááẠááŒá áºáááºáá áºáá¯ááᯠá á±á¬áá·áºááá¯ááºážáááºá¡ááœáẠá¡á±á¬áºááá±áá¬áá áºáá¯ááŒá áºááẠ(ááá¯á¡ááºáá±á¬á¡áá»áááºáá±á¬ááºááŸáááŸá¯á ááá¯á¡ááºáá±á¬ááá¯ááºáá¡ááœááºá¡ááŒááºá áá±áá¬áá±á·á áºááŸáááá¯ááºážáá áºáá¯á API ááŸáá¯á¶á·ááŒááºááŸá¯á áááºááŒáá·áº)á
ááá¯ááá¯áááá»áá±á¬á¡á±á¬áºááá±áá¬áá»á¬ážááŸááááº- DockerOperatorá HiveOperatorá S3FileTransferOperatorá PrestoToMysqlOperatorá SlackOperatorá
ááá·áºááá¯ááºááá¯ááºááá¹ááá¬áá»á¬ážáá±á«áºáá°áááºá á¡á±á¬áºááá±áá¬áá»á¬ážááᯠáá®ááœááºááá¯ááºááŒá®áž áááºážááá¯á·ááᯠááá·áºááá±á¬áá»ááºááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠMongoDBToHiveViaHdfsTransferá MongoDB á០Hive ááá¯á· á
á¬ááœááºá
á¬áááºážáá»á¬áž áááºááá¯á·áááºá¡ááœáẠá¡á±á¬áºááá±áá¬áá
áºáá¯ááŸáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠá¡á±á¬áºááá±áá¬áá»á¬ážá
áœá¬ááᯠáááºáá®ážáá²á·áááºá
ááá¯á·áá±á¬ááºá á€áá¯ááºáá±á¬ááºá áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááá¯á¡ááºááŒá®ážá ááᯠáá»áœááºá¯ááºááá¯á·ááẠá¡áá»áááºááá¬ážááœá²ááŒááºážá¡ááŒá±á¬ááºáž ááœá±ážááœá±ážáá«áááºá
á á®á ááºáá±ážáá°
Airflow á á¡áá¯ááºáá»áááºááá¬ážááá¯áá±á«áºááœáẠáááºáá±á¬ááºáá¬ážáááºá
áá±áá°ážáááºáá áºáá¯á á®ááœáẠslot á¡áá±á¡ááœááºááá·áºáááºáá»ááºááŸááááºá DAG ááá¯áááºáá®ážáá±á¬á¡áá«á áááºážááᯠáá±áá°ážáááºáá áºáá¯áá±ážáááº-
ALERT_MAILS = Variable.get("gv_mail_admin_dwh")
DAG_NAME = 'dma_load'
OWNER = 'Vasya Pupkin'
DEPENDS_ON_PAST = True
EMAIL_ON_FAILURE = True
EMAIL_ON_RETRY = True
RETRIES = int(Variable.get('gv_dag_retries'))
POOL = 'dma_pool'
PRIORITY_WEIGHT = 10
start_dt = datetime.today() - timedelta(1)
start_dt = datetime(start_dt.year, start_dt.month, start_dt.day)
default_args = {
'owner': OWNER,
'depends_on_past': DEPENDS_ON_PAST,
'start_date': start_dt,
'email': ALERT_MAILS,
'email_on_failure': EMAIL_ON_FAILURE,
'email_on_retry': EMAIL_ON_RETRY,
'retries': RETRIES,
'pool': POOL,
'priority_weight': PRIORITY_WEIGHT
}
dag = DAG(DAG_NAME, default_args=default_args)
dag.doc_md = __doc__
DAG á¡ááá·áºááœáẠáááºááŸááºáá¬ážáá±á¬ áá±áá°ážáááºááᯠá¡áá¯ááºá¡ááá·áºááœáẠááœáŸááºážááá¯ážááá¯ááºáááºá
áá®ážááŒá¬ážáá¯ááºáááºážá
ááºáá
áºáá¯ááŒá
áºááá·áº Scheduler ááẠAirflow ááœáẠáá¯ááºáá±á¬ááºá
áá¬á¡á¬ážáá¯á¶ážááᯠá¡áá»áááºááá¬ážááœá²ááẠáá¬áááºááŸááááºá á¡ááŸááºááŸá¬á Scheduler ááẠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá¡ááœáẠá¡áá¯ááºáá»á¬ážááᯠáááºááŸááºááŒááºážá á
ááºááŒááºá¡á¬ážáá¯á¶ážááŸáá·áº áááºáá¶áááºá á¡áá¯ááºáááŒá®ážáá® á¡ááá·áºáá»á¬ážá
áœá¬ááᯠááŒááºáááºážáááº-
- ááááºáá¯ááºá áá¬áá»á¬ážááᯠDAG ááœáẠááŒá®ážááŒá±á¬ááºáá²á·ááŒá®ážá á¡áá áºáá áºáá¯ááᯠáááºážá á®ááá¯ááºáá«áááºá
- áááºážá á®ááẠá¡áá¯ááºáá»á¬ážá áŠážá á¬ážáá±ážááŸá¯áá±á«áºáá°áááºá á á®áá¬ážááŒááºážááŒá áºááẠ(áŠážá á¬ážáá±ážááŸá¯áá»á¬ážááá¯áááºáž ááááºážáá»á¯ááºááá¯ááºáááº) ááŸáá·áº áá±áá°ážáááºááœáẠá¡ááá²á·á¡ááá¯ááºááŸááá«áá áá¯ááºáááºážááᯠáááºáááºááá¯ááºáá«áááºá
- á¡ááá¬áž á¡áá¯ááºááá¬áž ááá¯ááºáá¶áᶠááŸááá«á á¡áá¯ááºáá¬áááºááᯠáá±ážááá¯á·áááºá ááŒá¿áá¬ááœáẠáááºáááá¯ááááºááŒá¯áá¯ááºáá¬ážáá±á¬ á¡áá¯ááºááẠá¡á±á¬áºááá±áá¬áá áºáᯠááá¯á·ááá¯áẠá¡ááŒá¬ážá¡á±á¬áºááá±áá¬áá áºáá¯ááᯠá¡áá¯á¶ážááŒá¯á á áááºáááºá
ááá¯ážááŸááºážáá¯á¶áá±á¬ááºáá«áááºá
Scheduler ááẠDAG áá»á¬ážá¡á¬ážáá¯á¶ážááŸáá·áº DAGs á¡ááœááºážááŸá á¡áá¯ááºáá»á¬ážá¡á¬ážáá¯á¶ážááœáẠáá¯ááºáá±á¬ááºáááºá
Scheduler ááẠDAG ááŸáá·áº á áááºá¡áá¯ááºáá¯ááºáááºá¡ááœáẠDAG ááẠá¡áá»áááºááá¬ážáá áºáᯠáááºááŸááºááẠááá¯á¡ááºáááº-
dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='@hourly')
á¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ ááŒáá¯áááºáááºááŸááºááŸá¯áá»á¬áž á¡á
á¯á¶ááŸááá«áááºá @once
, @hourly
, @daily
, @weekly
, @monthly
, @yearly
.
cron expressions ááá¯áááºáž áááºáá¯á¶ážááá¯ááºáááº-
dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='*/10 * * * *')
ááœááºáá»ááºáááºá áœá²
Airflow áááºáá²á·ááá¯á· á¡áá¯ááºáá¯ááºáááºááᯠáá¬ážáááºáááºá DAG á¡ááœáẠExecution Date ááẠáááºáááºááᯠáá¬ážáááºááẠá¡áá±ážááŒá®ážáá«áááºá Airflow ááœááºá DAG ááœáẠExecution Date Dimension áá«ááŸááááºá ááá¯ááá¯áááºááŸá¬ DAG á á¡áá¯ááºá¡áá»áááºááá¬ážáá±á«áº áá°áááºá Task instances áá»á¬ážááᯠExecution Date áá áºáá¯á á®á¡ááœáẠáááºáá®ážáá¬ážáááºá Execution Date áá áºáá¯á á®á¡ááœááºá áá¯ááºáá±á¬ááºá áá¬áá»á¬ážááᯠááŒááºáááºáá¯ááºáá±á¬ááºááá¯ááºááẠ- ááá¯á·ááá¯áẠá¥ááá¬á¡á¬ážááŒáá·áºá DAG ááẠExecution Dates á¡áá»á¬ážá¡ááŒá¬ážááœáẠáá áºááŒáá¯ááºááẠáá¯ááºáá±á¬ááºááá¯ááºáááºá á€á¡áá¬ááᯠá€áá±áá¬ááœáẠááŸááºážáááºážá áœá¬ ááŒáá¬ážáááº-
áá¶ááá±á¬ááºážá áœá¬áá² (áá«ááŸááá¯áẠáá¶áá±á¬ááºážáá»ááºáá±á¬á· - á¡ááŒá±á¡áá±áá±á«áºááŸá¬áá°áááºáá«áááº)á DAG áá²á áá¯ááºáááºážáá±á¬ááºáá¬ááœá±ááᯠááŒá¯ááŒááºááŒá®ážáá«áá áááẠExecution Date ááœáẠáááááááºáá»á¬ážááᯠáá»áááºááŸáááŸá¯áá»á¬áž ááá·áºááœááºážá ááºážá á¬ážááŒá®áž áááºáááºáá¯ááºáá±á¬ááºááœá¬ážáá«áááºá á¡ááºáááá¯áá®áááºá¡áá áºááᯠá¡áá¯á¶ážááŒá¯á ááááºáá¬ááá»á¬ážá¡ááœááºáž áá±áá¬ááᯠááŒááºáááºááœááºáá»ááºááẠááá¯á¡ááºáá«á áá±á¬ááºážááœááºáá±á¬áºáááºáž ááááºá ááŒááºáááºáá¯ááºáá¯ááºááá¯ááºá áœááºáž áá¯á¶ážááŸá¯á¶ážááœá¬ážáá±á¬ááŒá±á¬áá·áº ááá¯ážááœá¬ážááẠ(áá¯ááºáá«áááºá Git á០ááá¯á¡ááºáá±á¬ á¡áááºážá¡ááŒá áºáá¯ááºáá¬ážááŸááºážááᯠááŒááºáá±ážááŒá®áž ááœááºáá»ááºááẠáááºáá°áá»áŸ ááá·áºá¡á¬áž á¡ááŸá±á¬ááºá¡ááŸááºáá±ážáááºááá¯ááºáá«á áá áºááŒáááºá áááºááá¯á¡ááºáá±á¬áááºážáááºážá)
á¡áá¯ááºáá»á¬ážááá¯áá¯ááºáá±ážááŒááºážá
DAG ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠPython ááœáẠáá¯ááºááŒá áºáá±á¬ááŒá±á¬áá·áºá á¥ááá¬á¡á¬ážááŒáá·áº sharded á¡áááºážá¡ááŒá áºáá»á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºáá±á¬á¡áá«ááœáẠáá¯ááºááá¬áááᯠáá»áŸá±á¬á·áá»ááẠá¡ááœááºá¡áááºááŒá±áá±á¬áááºážáááºážáá áºáá¯ááŸááááºá ááá·áºááœáẠMySQL shards áá¯á¶ážáá¯ááŸááááºááá¯áá«á áá¯á·á áá áºáá¯á á®ááá¯á·áááºááŒá®áž áá±áá¬á¡áá»áá¯á·ááᯠáá±á¬ááºáá°ááẠááá¯á¡ááºáááºááá¯áá«á áá¯á·á ááá¯á·á¡ááŒáẠá¡ááŸá®á¡ááá¯áááºážá áœá¬ááŸáá·áº ááŒáá¯ááºáá°ááŒá áºáááºá DAG ááŸá Python áá¯ááºááẠá€áá²á·ááá¯á· ááŒá áºááá¯ááºáá«áááºá
connection_list = lv.get('connection_list')
export_profiles_sql = '''
SELECT
id,
user_id,
nickname,
gender,
{{params.shard_id}} as shard_id
FROM profiles
'''
for conn_id in connection_list:
export_profiles = SqlToHiveViaHdfsTransfer(
task_id='export_profiles_from_' + conn_id,
sql=export_profiles_sql,
hive_table='stg.profiles',
overwrite=False,
tmpdir='/data/tmp',
conn_id=conn_id,
params={'shard_id': conn_id[-1:], },
compress=None,
dag=dag
)
export_profiles.set_upstream(exec_truncate_stg)
export_profiles.set_downstream(load_profiles)
DAG ááẠá€áá²á·ááá¯á· ááŒá áºáááº-
á€ááá á¹á ááœááºá áááºááẠáááºáááºáá»á¬ážááᯠáá»áááºááŸáááŒá®áž DAG ááᯠááœááºážáá¶áá¯á¶ááŒáá·áº shard áá áºáá¯ááᯠááá·áº ááá¯á·ááá¯áẠáááºááŸá¬ážááá¯ááºáááºá á¡áááºááŒá±áááº!
áááºááẠááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬ áá¯ááºáá¯ááºáá¯ááºááŒááºážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá±áá¬áá±á·á áºáá¯á¶á ᶠá¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºááá¯ááºááẠááá¯á·ááá¯áẠááá¬ážááœá²á·á ááºážáá¯á¶á ááá¬ážáá áºáá¯ááŸáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠá¡ááºáááá¯áá®áááºáá áºáá¯ááŸáá·áº DWH á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶á á¡ááºá¹áá«áááºáá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážáᬠáá¯ááºáááºážá ááºáá áºáᯠáááºáá®ážáá«á áááºáááá¯ááŸá±á¬ááºááŸá¯áá²ááá¯á· N ááá¬ážáá»á¬ážááá¯áááºáááºá¡ááœááºá ááá¯á·ááá¯áẠá¥ááá¬á¡á¬ážááŒáá·áºá á á¬áááºážáá¯á¶á á¶áá áºáá¯á¡ááœááºáá±á¬ááºááá·áº ááá·áºáááºáá»ááºáá áºáá¯ááŒáá·áºáá¯ááºáá±á¬ááºááŒááºážááᯠááá¶á·ááá¯ážáá±á¬ API áá áºáá¯ááŸáá·áºáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº áááºááẠá€á á¬áááºážá០N áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠDAG ááá¯áá¯ááºáá±ážááá¯ááºááŒá®áž API á¡ááœááºážááŸá áá±á¬ááºážááá¯ááŸá¯áá»á¬ážáááŒáá¯ááºááá¯ááºááŸá¯ááᯠááá·áºáááºááŒá®áž ááŒá áºáá¯ááºááá¯ááºáááºá API ááŸááá¯á¡ááºáá±á¬áá±áá¬á ááŒá±á¬ááºážááœááºááŒááºááœááºá
ááá¯ááŸá±á¬ááºááŸá¯
Airflow ááœáẠáááºážáááá¯ááºááá¯áẠbackend repositoryá database (MySQL ááá¯á·ááá¯áẠPostgres ááŒá áºááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááœáẠPostgres ááŸááááº)á áá¯ááºáá±á¬ááºá áá¬á¡ááŒá±á¡áá±áá»á¬ážá DAGsá áá»áááºáááºááŸá¯áááºáááºáá»á¬ážá global variables á áááºááá¯á·ááᯠááááºážáááºážáá±ážáá±á¬ database áá áºáá¯ááŒá áºáááºá Airflow ááŸá repository ááẠá¡ááœááºááá¯ážááŸááºážááŒá®áž (ááá¬áž 20 ááá·áº) ááŸáá·áº áááºážá¡áá±á«áºááœáẠááá·áºááá¯ááºááá¯áẠáá¯ááºáááºážá ááºáá»á¬ážááᯠáááºáá±á¬ááºááá¯áá«á á¡áááºááŒá±áá«áááºá áá±ážááœááºážáá áºáá¯áááºáá±á¬ááºáá¯á¶ááᯠáá¬ážááááºáá® á¡áá»áááºá¡áá±á¬áºááŒá¬ áá±á·áá¬áá²á·ááá±á¬ Informatica repository ááŸá ááá¬áž 100500 ááᯠááŸááºáááá«áááºá
á á±á¬áá·áºááŒáá·áºáá±á·áá¬ááŒááºáž
repository áááá¯ážááŸááºážááŸá¯ááŒáá·áºá áááºááẠááá·áºá¡ááœáẠá¡áááºááŒá±áá±á¬ á¡áá¯ááºá á±á¬áá·áºááŒáá·áºááŒááºážáá¯ááºáááºážá ááºááᯠáááºáá±á¬ááºááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá¯ááºáá»á¬ážá á¡ááŒá±á¡áá±ááᯠááŒáá·áºáá±á¬ Zeppelin ááœáẠnotepad áá áºáá¯ááᯠá¡áá¯á¶ážááŒá¯áááº-
áááºážááẠAirflow ááá¯ááºááá¯ááºá áááºá¡ááºáá¬áá±á·á áºáááºáž ááŒá áºááá¯ááºáááº-
Airflow áá¯ááºááẠopen source ááŒá áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠTelegram ááá¯á· ááááá±ážáá»áẠáááºááá·áºáá¬ážáááºá á¡áá¯ááºáá áºáá¯á áá¯ááºáá±á¬ááºáá±ááá·áº áá¬áááá áºáá¯á á®ááẠá¡ááŸá¬ážá¡ááœááºážáá áºáá¯ááŒá áºáá±á«áºáá«á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááŸáá·áº áá¶á·ááá¯ážáá°áá®ááŸá¯á¡ááœá²á·áá áºáá¯áá¯á¶ážáá«ááŸáááá·áº Telegram ááœáẠá¡á¯ááºá á¯ááᯠspam áá»á¬ážááá¯á·áááºá
Telegram (ááá¯á¡ááºáá«á) ááŸáááá·áº áá»áœááºá¯ááºááá¯á·ááẠáá»ááºáá»ááºážáá¯á¶á·ááŒááºááŸá¯ááᯠáááºáá¶áááŸáááŒá®áž Zeppelin ááŸáááá·áº Airflow ááœáẠáá¯ááºáá±á¬ááºá áá¬áá»á¬ážá á¡áá¯á¶ážá á¯á¶áá¯á¶áá áºáá¯á¶ááᯠáá»áœááºá¯ááºááá¯á· áááŸááá«áááºá
á á¯á á¯áá±á«ááºáž
Airflow ááẠá¡áááá¡á¬ážááŒáá·áº open source ááŒá áºááŒá®áž áááºážá០á¡á¶á·ááœááºáá±á¬ááºážááŸá¯áá»á¬ážááᯠááẠááá»áŸá±á¬áºááá·áºááá·áºáá«á á¡áá¯ááºááŒá áºááá·áº á¡ááŒá±áá áºáá¯ááᯠáááºáá±á¬ááºááá¯á· á¡áá»áááºáá²á· ááŒáá¯ážá á¬ážá¡á¬ážáá¯ááºááá¯á· ááŒááºáááºáá¬ážáá«á áááºážááá¯ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºááŒá®á áá¯á¶ááŒááºáá«á ááá¯ááºáááºáá«áááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ á¡ááŸáááºá¡áá¯ááºá ááŒá±á¬ááºážááœááºááŒááºááœááºá áá¯ááºáááºážá ááºá¡áá áºáá»á¬áž áá±á«ááºážááá·áºááẠááœááºáá°ááŒááºáž - áááºááŸá áºáááºáááá·áºáááºá áá¯ááºáá«áááºá áááºááẠááá±á¬áá»ááºá¡ááœá²á·á¡á ááºážá Airflow ááá¯ááºááá¯ááºá áááºááŒáááºááŸá¯ááᯠá¡á¬áá¯á¶á áá¯ááºááẠááá¯á¡ááºáááº- á¡á¶á·ááœááºá¡ááŸá¯áá»á¬áž áááŒá áºáá±á«áºáá«á
ááᯠáá»áœááºá¯ááºááá¯á·ááœáẠáá±á·á áẠAirflow áá¯ááºáá±á¬ááºáá±áá«áááºá á¡áá¯áẠá,á áá áá±á¬ááºááŸááááºá. áá°ááá¯á· á ááá¯ááºá áá±á¬áºáá±á¬áº ááœá¬áááºá ááœá²ááŒá¬ážááŒá®áž á¡ááœááºáááá»áá±á¬ áááºážááŒá áºáá»á¬ážá áœá¬á០áááºá DWH ááœáẠáá±áá¬áááºááẠá¡áá¯ááºáá»á¬áž ááŸááááºá áááºá DWH á¡ááœááºážááŸá á ááá¯ážáá»ááºááŸá¬á á¬áá»á¬ážááᯠááœááºáá»ááºááẠá¡áá¯ááºáá»á¬áž ááŸááááºá ááŒááºáááºáá±á¬ DWH ááá¯á· áá±áá¬ááᯠááœáŸáá·áºáááºááẠá¡áá¯ááºáá»á¬áž ááŸááááºá áá»á¬ážá áœá¬á ááœá²ááŒá¬ážáá±á¬ á¡áá¯ááºáá»á¬ážááŸáááẠ- ááŸáá·áº Airflow áá°ááá¯á·ááᯠáá áºáá±á·ááŒá®ážáá áºáá±á· áá«ážáááºá ááááºážáá²á·ááŒá±á¬ááẠáá«á áá®ááá¯áá«á 2,3 DWH (Hadoop) á¡ááœááºážááŸá ááœá²ááŒá¬ážáá±á¬ ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážá ELT áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áá®áá²ááŸá¬ á.á áá ááááºážáááºážááŒá áºá á€áááºá¡ááœá²á·áá¶á០ETL developer 4 áá±á¬ááºDWH ááœáẠDWH ááŸáá·áº ELT data processing ááœáẠETL data processing áá°á ááá¯ááºážááŒá¬ážáá¬ážáá±á¬á admin áá áºáá±á¬ááºáá«ááááºáá±á¬ááºááŸá¯áá¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬ážááŸáá·áº áááºáááº.
á¡áá¬ááá»á¡ááŸáá»á¡á á®á¡á áá»ááŒá¬áž
áá¯ááºáááºážá ááºá¡áá±á¡ááœááºáá»á¬áž áááœá²áááœá± ááá¯ážááœá¬ážáá¬áá±ááŒá®áž Airflow á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááŸáá·áºáááºáááºá áá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºáááá·áº á¡áááá¡áá¬ááŸá¬ á¡ááá¯ááºážá¡áá¬áá áºáá¯ááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠAirflow á¡á á¯á¡áá±ážáá áºáá¯áááºáá±á¬ááºáááºá áááá®áá¯ááºáá¬ážáá»á¬ážá¡ááœáẠááŒá±áá±á¬ááºáá áºá á¯á¶ááᯠááœá²áá±áá±ážáᬠá¡áá¯ááºá¡áá»áááºááá¬ážááœá²ááŒááºážáá¯ááºáááºážá ááºáá»á¬ážááŸáá·áº ááá¯ááŸá±á¬ááºááŸá¯ááŒáá·áº ááá¯ááºááá¯ááºááœá¬ážáá±áá±á¬ áŠážáá±á«ááºážáá áºáá¯ááŒá¯áá¯ááºááá¯áá«áááºá
epilogue
áá«á Airflow á¡ááŒá±á¬ááºáž ááŒá±á¬ááŒáá»ááºáá²á·á¡áá¬á¡á¬ážáá¯á¶ážááá¯ááºáá±ááá·áº á¡áááá¡áá»ááºááœá±ááᯠáá®ážáá±á¬ááºážááá¯ážááŒááá¯á· ááŒáá¯ážá á¬ážáá²á·áááºá á á¬ážáá»ááºá áááºá á ááºážááŒáá·áºá០ááŒáá¯ááºááẠ:)
source: www.habr.com