เบชเบฐเบเบฒเบเบเบต, Habr! เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเปเบญเบเบเปเบญเบเบเบฒเบเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเปเบเบทเปเบญเบเบกเบทเบเบตเปเบเบตเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบฐเบเบงเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบ batch, เบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เปเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเปเบฅเบดเบชเบฑเบ DWH เบซเบผเบท DataLake เบเบญเบเบเปเบฒเบ. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบ Apache Airflow (เบเปเปเปเบเบเบตเปเปเบญเบตเปเบเบงเปเบฒ Airflow). เบกเบฑเบเปเบเปเบเบทเบเบเบฐเบเบดเปเบชเบเบขเปเบฒเบเบเปเปเบเบธเบเบดเบเปเบฒเบเบญเบเบเบงเบฒเบกเบชเบปเบเปเบเปเบHabre, เปเบฅเบฐเปเบเบชเปเบงเบเบเบปเปเบเบเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเบฐเบเบฒเบเบฒเบกเปเบฎเบฑเบเปเบซเปเปเบเบปเปเบฒเบซเบกเบฑเปเบเปเบเบงเปเบฒเบขเปเบฒเบเบซเบเปเบญเบ Airflow เบกเบตเบกเบนเบเบเปเบฒเปเบเบดเปเบเปเบเปเบงเบฅเบฒเบเบตเปเปเบฅเบทเบญเบเบเบฒเบเบฐเบฅเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฐเบเบงเบเบเบฒเบ ETL / ELT เบเบญเบเบเปเบฒเบ.
เบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฝเบเบเบปเบเปเบฅเบทเปเบญเบเบเปเบฝเบงเบเบฑเบเบซเบปเบงเบเปเปเบเบญเบ DWH เปเบกเบทเปเบญเบเปเบญเบเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเบเบฐเบเบฒเบเบฒเบ Tinkoff. เบเบญเบเบเบตเปเบเปเบญเบเปเบเปเบเบฒเบเปเบเบฑเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบตเบก Mail.Ru Group เปเบฅเบฐเบเปเบฒเบฅเบฑเบเบเบฑเบเบเบฐเบเบฒเปเบงเบเบตเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเปเปเบกเบนเบเปเบเบเบทเปเบเบเบตเปเปเบเบก. เบเบปเบงเบเบดเบเปเบฅเปเบง, เบเปเบญเบเบงเปเบฒเบเปเบฒเบงเปเบฅเบฐเบงเบดเบเบตเปเบเปเปเบเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบเบฒเบเบปเบ, เบเบตเบกเบเบฒเบเบเบญเบเบเปเบญเบเปเบฅเบฐเบเปเบญเบเบเบฐเปเบงเบปเปเบฒเบเบตเปเบเบตเปเบเปเบฝเบงเบเบฑเบเปเบงเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเปเปเบกเบนเบ.
Prologue
เบเบฑเปเบเบเบฑเปเบ, เปเบซเปเปเบฅเบตเปเบกเบเบปเปเบ. Airflow เปเบกเปเบเบซเบเบฑเบ? เบเบตเปเปเบกเปเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบ (เบซเบผเบท
เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเบซเบเปเบงเบเบเบฒเบเบเบปเปเบเบเปเบเบญเบ Airflow. เปเบเบเบเบฒเบเปเบเบปเปเบฒเปเบเปเบเบทเปเบญเปเบเป เปเบฅเบฐเบเบธเบเบเบฐเบชเบปเบเบเบญเบเบเบงเบเบกเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเปเบเบเบชเปเบฒเบเบเบฐเบเบงเบเบเบฒเบเบเบญเบเบเปเบฒเบเปเบเปเบเบตเบเบตเปเบชเบธเบ. เบเบฒเบเบเบตเบซเบปเบงเบซเบเปเบงเบเบเบปเปเบเบเปเปเบกเปเบ Directed Acyclic Graph (เบเปเปเปเบเบเบตเปเปเบญเบตเปเบเบงเปเบฒ DAG).
DAG
A DAG เปเบกเปเบเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบเบตเปเบกเบตเบเบงเบฒเบกเบซเบกเบฒเบเบเบญเบเบงเบฝเบเบเบฒเบเบเบญเบเบเปเบฒเบเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบชเปเบฒเปเบฅเบฑเบเปเบเบฅเปเบฒเบเบฑเบเบเบตเปเบเปเบฒเบเบปเบเปเบงเปเบขเปเบฒเบเปเบเบฑเปเบกเบเบงเบเบเบฒเบกเบเบฒเบเบฐเบฅเบฒเบเบชเบฐเปเบเบฒเบฐ. Airflow เปเบซเปเบเบฒเบเปเบเปเบเบญเบเปเบงเบฑเบเบเบตเปเบชเบฐเบเบงเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ DAGs เปเบฅเบฐเบซเบเปเบงเบเบเบฒเบเบญเบทเปเบเป:
DAG เบญเบฒเบเบเบฐเปเบเบดเปเบเบเบทเบงเปเบฒเบเบตเป:
เบเบฑเบเบเบฑเบเบเบฐเบเบฒ, เปเบกเบทเปเบญเบญเบญเบเปเบเบ DAG, เบงเบฒเบเบเบธเบเบเบญเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเปเบงเบฝเบเบเบฒเบเบเบฒเบเปเบ DAG เบเบฐเบเบทเบเบชเปเบฒเบ. เปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบกเบฒเบฎเบญเบเบซเบเปเบงเบเบเบฒเบเบเบตเปเบชเปเบฒเบเบฑเบเบญเบตเบเบญเบฑเบเบซเบเบถเปเบ: Airflow Operator.
เบเบนเปเบเบฐเบเบดเบเบฑเบเบเบฒเบ
เบเบนเปเบเบฐเบเบญเบเบเบฒเบเปเบกเปเบเบเบดเบเบดเบเบธเบเบเบปเบเบเบปเบเบเบทเปเบเบเบฒเบเบเบญเบเบเบปเบงเบขเปเบฒเบเบงเบฝเบเบเบตเปเบเบทเบเบชเปเบฒเบเบเบถเปเบ, เปเบเบดเปเบเบญเบฐเบเบดเบเบฒเบเบชเบดเปเบเบเบตเปเบเบฐเปเบเบตเบเบเบถเปเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบปเบงเบขเปเบฒเบเบงเบฝเบ.
- BashOperator - เบเบฐเบเบดเบเบฑเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเปเบฒเบชเบฑเปเบ bash.
- PythonOperator - เบเบนเปเบเบฐเบเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบซเบฒเบฅเบฐเบซเบฑเบ Python.
- EmailOperator โ เบเบฐโเบเบดโเบเบฑเบโเบเบฒเบโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบชเบปเปเบโเบญเบตโเปเบกเบงโ.
- HTTPOperator - เบเบฐเบเบดเบเบฑเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเปเบฒเบฎเปเบญเบเบเป http.
- SqlOperator - เบเบฐเบเบดเบเบฑเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบฅเบฐเบซเบฑเบ SQL.
- เปเบเบฑเบเปเบเบตเปเบกเปเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเปเบเปเบฒเปเบซเบเบเบฒเบ (เบเบฒเบเบกเบฒเบฎเบญเบเบเบญเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเบปเบเปเบงเป, เบฎเบนเบเบฅเบฑเบเบชเบฐเบเบฐเบเบญเบเปเบเบฅเปเบเบตเปเบเปเบญเบเบเบฒเบ, เปเบชเบฑเปเบเปเบเบเบฒเบเบเปเปเบกเบนเบ, เบเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเบเบฒเบ API, เปเบฅเบฐเบญเบทเปเบเป).
เบกเบตเบเบนเปเบเบฐเบเบดเบเบฑเบเบเบฒเบเบชเบฐเปเบเบฒเบฐเปเบเบตเปเบกเปเบเบตเบก: DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperator.
เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบนเปเบเบฐเบเบญเบเบเบฒเบเปเบเบเบญเบตเบเปเบชเปเบเบธเบเบฅเบฑเบเบชเบฐเบเบฐเบเบญเบเบเปเบฒเบเปเบญเบเปเบฅเบฐเบเปเบฒเปเบเปเบเบงเบเบกเบฑเบเปเบเปเบเบเบเบฒเบเบเบญเบเบเปเบฒเบ. เบเบปเบงเบขเปเบฒเบเปเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบชเปเบฒเบ MongoDBToHiveViaHdfsTransfer, เบเบนเปเบเบฐเบเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบญเบญเบเปเบญเบเบฐเบชเบฒเบเบเบฒเบ MongoDB เปเบ Hive, เปเบฅเบฐเบเบนเปเบเบฐเบเบญเบเบเบฒเบเบเปเบฒเบเบงเบเบซเบเบถเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ
เบเปเปเปเบ, เบเบธเบเปเบเปเบฅเบฐเบเบตเปเบซเบผเบปเปเบฒเบเบตเปเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เปเบฅเบฐเบเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบปเบงเบเปเบฒเบเบปเบเปเบงเบฅเบฒ.
เบเบนเปเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบ
เบเบปเบงเบเบณเบเบปเบเปเบงเบฅเบฒเปเปเบฒเบงเบฝเบเบเบญเบ Airflow เปเบกเปเบเบชเปเบฒเบเบเบถเปเบ
เปเบเปเบฅเบฐเบชเบฐเบเบธเบเปเบเบตเบกเบตเบเบญเบเปเบเบเบเปเบฒเบเบฑเบเบเปเบฝเบงเบเบฑเบเบเปเบฒเบเบงเบเบเบญเบเบชเบฐเบฅเบฑเบญเบเบเบดเบ. เปเบกเบทเปเบญเบชเปเบฒเบ 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 เบชเบฒเบกเบฒเบเบเบทเบ overridden เปเบเบฅเบฐเบเบฑเบเบซเบเปเบฒเบงเบฝเบ.
เบเบฐเบเบงเบเบเบฒเบเปเบเบเบเปเบฒเบเบซเบฒเบ, Scheduler, เบฎเบฑเบเบเบดเบเบเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเบเบปเบเปเบงเบฅเบฒเบงเบฝเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเปเบ Airflow. เบเบปเบงเบเบดเบเปเบฅเปเบง, Scheduler เบเบฑเบเบเบฒเบเบเบฑเบเบเบปเบเปเบเบเบฒเบเบเปเบฒเบเบปเบเบงเบฝเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ. เบงเบฝเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบงเบเปเบฒเบเบซเบผเบฒเบเบเบฑเปเบเบเบญเบเบเปเบญเบเบเบตเปเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบ:
- เบงเบฝเบโเบเบฒเบโเบเบตเปโเบเปเบฒเบโเบกเบฒโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบชเปเบฒโเปเบฅเบฑเบโเปเบ DAGโ, เปเบเบฑเบโเบซเบเบถเปเบโเปเบซเบกเปโเบชเบฒโเบกเบฒเบโเบเบฑเบโเบเบดเบงโเปเบเปโ.
- เปเบเบงเบเบทเบเบเบฑเบเบฎเบฝเบเบเบถเปเบเบขเบนเปเบเบฑเบเบเบนเบฅเบดเบกเบฐเบชเบดเบเบเบญเบเบงเบฝเบเบเบฒเบ (เบเบนเบฅเบดเบกเบฐเบชเบดเบเบเบฑเบเบชเบฒเบกเบฒเบเบเบงเบเบเบธเบกเปเบเป), เปเบฅเบฐเบเปเบฒเบกเบตเบเปเบญเบเบซเบงเปเบฒเบเปเบเบชเบฐเบเบธเบเปเบเบต, เบงเบฝเบเบเบฒเบเบชเบฒเบกเบฒเบเบเบทเบเบเบฐเบเบดเบเบฑเบ.
- เบเปเบฒเบกเบต celery เบเบฐเบเบฑเบเบเบฒเบเบเบฃเบต, เบงเบฝเบเบเบฒเบเปเบกเปเบเบเบทเบเบชเบปเปเบเปเบเบซเบฒเบกเบฑเบ; เบงเบฝเบเบเบฒเบเบเบตเปเบเปเบฒเบเบเบฑเปเบเปเบเบเบเบฒเบเบขเบนเปเปเบเบเบฑเบเบซเบฒเปเบฅเบตเปเบกเบเบปเปเบ, เบเบฒเบเบเปเบฒเปเบเปเบซเบเบถเปเบเบซเบผเบทเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบญเบทเปเบ.
เบเปเบฒเบเบเบฒเบเบเบฝเบเบเป.
Scheduler เปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเบธเบเบเบญเบ DAGs เบเบฑเบเบซเบกเบปเบเปเบฅเบฐเบซเบเปเบฒเบงเบฝเบเบเบฑเบเบซเบกเบปเบเบเบฒเบเปเบ DAGs.
เบชเปเบฒเบฅเบฑเบ Scheduler เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ DAG, DAG เบเปเบญเบเบเบฒเบเบเปเบฒเบเบปเบเปเบงเบฅเบฒ:
dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='@hourly')
เบกเบตเบเบธเบเบเบญเบ presets เบเบตเปเบเบฝเบกเบเปเบญเบก: @once
, @hourly
, @daily
, @weekly
, @monthly
, @yearly
.
เบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเปเบเปเบเบฒเบเบชเบฐเปเบเบเบญเบญเบ cron:
dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='*/10 * * * *')
เบงเบฑเบเบเบตเบเบฐเบเบดเบเบฑเบ
เปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบ Airflow, เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเบเบตเปเบเบฐเปเบเบปเปเบฒเปเบเบงเปเบฒเบงเบฑเบเบเบตเบเบฐเบเบดเบเบฑเบเปเบกเปเบเบซเบเบฑเบเบชเปเบฒเบฅเบฑเบ DAG. เปเบ Airflow, DAG เบกเบตเบเบฐเบซเบเบฒเบเบเบญเบเบงเบฑเบเบเบตเบเบฐเบเบดเบเบฑเบ, i.e., เบญเบตเบเบเบฒเบกเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบ DAG, เบเบปเบงเบขเปเบฒเบเบงเบฝเบเปเบกเปเบเบเบทเบเบชเปเบฒเบเบเบถเปเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบงเบฑเบเบเบตเบเบฐเบเบดเบเบฑเบ. เปเบฅเบฐเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบงเบฑเบเบเบตเบเบฐเบเบดเบเบฑเบ, เบงเบฝเบเบเบฒเบเบชเบฒเบกเบฒเบเบเบทเบเบเบฐเบเบดเบเบฑเบเบเบทเบเปเบซเบกเป - เบซเบผเบท, เบเบปเบงเบขเปเบฒเบ, DAG เบชเบฒเบกเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเปเบญเบกเปเบเบฑเบเปเบเบซเบผเบฒเบเปเบงเบฑเบเบเบตเบเบฐเบเบดเบเบฑเบ. เบเบตเปเปเบกเปเบเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบขเปเบฒเบเบเบฑเบเปเบเบเบเบตเปเบเบตเป:
เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ (เบซเบผเบทเบญเบฒเบเบเบฐเปเบเบเบเบต: เบกเบฑเบเบเบถเปเบเบเบฑเบเบชเบฐเบเบฒเบเบฐเบเบฒเบ), เบเปเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบเบงเบฝเบเบเบฒเบเปเบ DAG เบเบทเบเปเบเปเปเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบงเบฑเบเบเบตเบเบฐเบเบดเบเบฑเบเบเบตเปเบเปเบฒเบเบกเบฒเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเบดเบเบฒเบฅเบฐเบเบฒเบเบฒเบเบเบฑเบเบเบปเบง. เบเบตเปเปเบกเปเบเบเบตเบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบดเบเปเบฅเปเบเปเปเบกเบนเบเปเบเปเบฅเบเบฐเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเบกเบฒเปเบเบเปเบเป algorithm เปเบซเบกเป, เปเบเปเบกเบฑเบเบเปเปเบเบตเปเบเบฒเบฐเบงเปเบฒเบเบฒเบเบชเบทเบเบเบฑเบเบเบญเบเบเบปเบเปเบเปเบฎเบฑเบเบเบฐเบชเบนเบเปเบชเบ (เปเบเปเบเบญเบ, เบเปเปเบกเบตเปเบเบฅเบปเบเบเบงเบเบเปเบฒเบเบเบตเปเบเบฐเบชเบปเปเบเบเบทเบเบฅเบฐเบซเบฑเบเปเบซเบผเปเบเบเบตเปเบเปเบญเบเบเบฒเบเบเบฒเบ Git เปเบฅเบฐเบเบดเบเปเบฅเปเบงเปเบฒเปเบกเปเบเบซเบเบฑเบ. เบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบฑเปเบเบเบฝเบง, เบงเบดเบเบตเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบ).
เบเบณเบฅเบฑเบเบชเปเบฒเบเปเปเบฒเบงเบฝเบ
เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบ DAG เปเบกเปเบเบฅเบฐเบซเบฑเบเปเบ Python, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบกเบตเบงเบดเบเบตเบเบตเปเบชเบฐเบเบงเบเบซเบผเบฒเบเบเบตเปเบเบฐเบซเบผเบธเบเบเปเบญเบเบเปเบฒเบเบงเบเบฅเบฐเบซเบฑเบเปเบเปเบงเบฅเบฒเบเบตเปเปเบฎเบฑเบเบงเบฝเบ, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เบเบฑเบเปเบซเบผเปเบ sharded. เปเบซเปเปเบงเบปเปเบฒเบงเปเบฒเบเปเบฒเบเบกเบตเบชเบฒเบก MySQL shards เปเบเบฑเบเปเบซเบผเปเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบตเบเปเบเบปเปเบฒเปเบเปเบเปเบเปเบฅเบฐเบเบปเบเปเบฅเบฐเปเบญเบปเบฒเบเปเปเบกเบนเบเบเบฒเบเบขเปเบฒเบ. เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, เปเบเบฑเบเปเบญเบเบฐเบฅเบฒเบเปเบฅเบฐเบเบฐเบซเบเบฒเบ. เบฅเบฐเบซเบฑเบ Python เปเบ DAG เบญเบฒเบเบเบฐเปเบเบดเปเบเบเบทเบงเปเบฒเบเบตเป:
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 เบกเบตเบฅเบฑเบเบชเบฐเบเบฐเบเบตเป:
เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบซเบผเบทเปเบญเบปเบฒ shard เปเบเปเปเบเบเบเบฝเบเปเบเปเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบฅเบฐเบเบฑเบเบเบธเบ DAG. เบชเบฐเบเบงเบเบชเบฐเบเบฒเบ!
เบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเปเบเปเบเบฒเบเบชเปเบฒเบเบฅเบฐเบซเบฑเบเบเบตเปเบชเบฑเบเบชเบปเบเบซเบผเบฒเบ, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบซเบผเปเบเปเบเบฎเบนเบเปเบเบเบเบญเบเบเบฒเบเบเปเปเบกเบนเบเบซเบผเบทเบญเบฐเบเบดเบเบฒเบเปเบเบเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบ, เบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบ, เปเบฅเบฐเบเปเบฒเบเบถเบเปเบเบดเบเบฅเบฑเบเบชเบฐเบเบฐเบเบญเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบ DWH, เบชเปเบฒเบเบเบฐเบเบงเบเบเบฒเบ. เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบซเบผเบเบเบฒเบเบฐเบฅเบฒเบ N เปเบเบปเปเบฒเปเบเปเบเบเปเบญเบเปเบเบฑเบเบเปเปเบกเบนเบเบเบญเบเบเปเบฒเบ. เบซเบผเบท, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ API เบเบตเปเบเปเปเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเปเบเบฎเบนเบเปเบเบเบเบญเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเบงเบฝเบเบเบฒเบ N เปเบ DAG เบเบฒเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบตเป, เบเปเบฒเบเบฑเบเบเบฒเบเบเบฐเบซเบเบฒเบเบเบญเบเบเปเบฒเบฎเปเบญเบเบเปเปเบ API เบเบฑเบเบชเบฐเบเบธเบเปเบเบตเปเบฅเบฐเบเบนเบ. เบเปเปเบกเบนเบเบเบตเปเบเปเบฒเปเบเบฑเบเบเบฒเบ API. เบเปเบฝเบเปเบเบเปเบเป!
เบเบฑเบเปเบเบฑเบเบกเปเบฝเบ
Airflow เบกเบต repository backend เบเบญเบเบเบปเบเปเบญเบ, เบเบฒเบเบเปเปเบกเบนเบ (เบชเบฒเบกเบฒเบเปเบเบฑเบ MySQL เบซเบผเบท Postgres, เบเบงเบเปเบฎเบปเบฒเบกเบต Postgres), เปเบเบดเปเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบชเบฐเบเบฒเบเบฐเบเบญเบเบซเบเปเบฒเบงเบฝเบ, DAGs, เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเปเบเบทเปเบญเบกเบเปเป, เบเบปเบงเปเบเบเบปเปเบงเปเบฅเบ, เปเบฅเบฐเบญเบทเปเบเป. repository เปเบ Airflow เปเบกเปเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ (เบเบฐเบกเบฒเบ 20 เบเบฒเบเบฐเบฅเบฒเบ) เปเบฅเบฐเบชเบฐเบเบงเบเบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบชเปเบฒเบเบเบฐเบเบงเบเบเบฒเบเบเบญเบเบเบปเบเปเบญเบเบขเบนเปเปเบเบดเบเบชเบธเบเบเบญเบเบกเบฑเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบทเป 100500 เบเบฒเบเบฐเบฅเบฒเบเปเบเบเบฑเบเปเบเบฑเบเบเปเปเบกเบนเบ Informatica, เปเบเบดเปเบเบเปเบญเบเปเบเปเบชเบถเบเบชเบฒเปเบเบฑเบเปเบงเบฅเบฒเบเบปเบเบเบฒเบเบเปเบญเบเบเบตเปเบเบฐเปเบเบปเปเบฒเปเบเบงเบดเบเบตเบเบฒเบเบชเปเบฒเบเปเบเบเบชเบญเบเบเบฒเบก.
เบเบฒเบเบเบดเบเบเบฒเบก
เปเบเบทเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒเบเบเบฒเบเบเบญเบ repository, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเบเบฐเบเบงเบเบเบฒเบเบเบดเบเบเบฒเบกเบเบงเบเบเบฒเบงเบฝเบเบเบฒเบเบเบตเปเบชเบฐเบเบงเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบ. เบเบงเบเปเบฎเบปเบฒเปเบเป notepad เปเบ Zeppelin, เบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเบดเปเบเบชเบฐเบเบฒเบเบฐเบเบญเบเบงเบฝเบเบเบฒเบ:
เบเบตเปเบญเบฒเบเบเบฐเปเบเบฑเบเบชเปเบงเบเบเบดเบเบเปเปเปเบงเบฑเบเบเบญเบ Airflow เปเบญเบ:
เบฅเบฐเบซเบฑเบ Airflow เปเบกเปเบเปเบซเบผเปเบเปเบเบตเบ, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบตเปเบกเบเบฒเบเปเบเปเบเปเบเบทเบญเบเปเบชเป Telegram. เปเบเปเบฅเบฐเบเบปเบงเบขเปเบฒเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบงเบฝเบเบเบฒเบ, เบเปเบฒเบกเบตเบเปเปเบเบดเบเบเบฒเบเปเบเบตเบเบเบถเปเบ, spams เบเบธเปเบกเปเบ Telegram, เบเปเบญเบเบเบตเปเบเบตเบกเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบฅเบฐเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฑเบเบซเบกเบปเบเบเบฐเบเบญเบเบเปเบงเบ.
เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเบเบฑเบเบเบตเปเบเบเบเปเบฒเบ Telegram (เบเปเบฒเบเปเบญเบเบเบฒเบ), เปเบฅเบฐเบเปเบฒเบ Zeppelin เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบฎเบนเบเบเบฒเบเบฅเบงเบกเบเบญเบเบงเบฝเบเบเบฒเบเปเบ Airflow.
เบฅเบงเบก
Airflow เปเบกเปเบเปเบซเบผเปเบเปเบเบตเบเบเบปเปเบเบเป, เปเบฅเบฐเบเปเบฒเบเบเปเปเบเบงเบเบเบฒเบเบซเบงเบฑเบเบงเปเบฒเบชเบดเปเบเบกเบฐเบซเบฑเบเบชเบฐเบเบฑเบเบเบฒเบเบกเบฑเบ. เบเบปเปเบเบเบฝเบกเบเปเบญเบกเบเบตเปเบเบฐเปเบญเบปเบฒเปเบงเบฅเบฒเปเบฅเบฐเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบเบตเปเบเบฐเบชเปเบฒเบเบเบฒเบเปเบเปเปเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบ. เปเบเบปเปเบฒเบซเบกเบฒเบเปเบกเปเบเบเบฑเบเบฅเบธเปเบเป, เปเบเบทเปเบญเบเปเบญเบ, เบกเบฑเบเบเบธเปเบกเบเปเบฒ. เบเบงเบฒเบกเปเบงเบเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ, เบเบงเบฒเบกเบเบทเบเบซเบเบธเปเบ, เบเบงเบฒเบกเบเปเบฒเบเบเบญเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบเบงเบเบเบฒเบเปเบซเบกเป - เบเปเบฒเบเบเบฐเบกเบฑเบเบกเบฑเบ. เปเบเปเบเบญเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบญเบปเบฒเปเบเปเบชเปเบซเบผเบฒเบเบเปเปเบญเบปเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบญเบเปเบเบเบเบฒเบ, เบเบงเบฒเบกเบซเบกเบฑเปเบเบเบปเบเบเบญเบ Airflow เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบ: เบกเบฐเบซเบฑเบเบชเบฐเบเบฑเบเบเปเปเปเบเบตเบเบเบถเปเบ.
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบกเบต Airflow เปเบฎเบฑเบเบงเบฝเบเบเบฐเบเปเบฒเบงเบฑเบ เบเบฐเบกเบฒเบ 6,5 เบเบฑเบเบงเบฝเบเบเบฒเบ. เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบกเปเบเบเปเบญเบเบเปเบฒเบเปเบเบเบเปเบฒเบเบเบฑเบเปเบเบฅเบฑเบเบชเบฐเบเบฐ. เบกเบตเบงเบฝเบเบเบฒเบเบเบฒเบเปเบซเบผเบเบเปเปเบกเบนเบเปเบเบปเปเบฒเปเบเปเบ DWH เบเบปเปเบเบเปเบเบฒเบเบซเบผเบฒเบเปเบซเบผเปเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเปเบฅเบฐเบชเบฐเปเบเบฒเบฐเบซเบผเบฒเบ, เบกเบตเบงเบฝเบเบเบฒเบเบเบฒเบเบเบดเบเปเบฅเปเบซเบเปเบฒเบฎเปเบฒเบเบเบฒเบเปเบ DWH เบเบปเปเบเบเป, เบกเบตเบงเบฝเบเบเบฒเบเปเบเบตเบเปเบเปเบเปเปเบกเบนเบเปเบเบปเปเบฒเปเบเปเบ DWH เปเบง, เบกเบตเบซเบผเบฒเบ, เบซเบผเบฒเบเบงเบฝเบเบเบฒเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ - เปเบฅเบฐ Airflow. chews เบเบงเบโเปเบเบปเบฒโเบเบฑเบโเบซเบกเบปเบโเปเบเบดเบโเบกเบทเปโเบเปเปโเปเบโ. เปเบงเบปเปเบฒเปเบเบเบปเบงเปเบฅเบ, เบเบตเปเปเบกเปเบ 2,3 เบเบฑเบ เบงเบฝเบเบเบฒเบ ELT เบเบญเบเบเบงเบฒเบกเบชเบฑเบเบชเบปเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบเบฒเบเปเบ DWH (Hadoop), เบเบฐเบกเบฒเบ. 2,5 เบฎเปเบญเบเบเบฒเบเบเปเปเบกเบนเบ เปเบซเบผเปเบเบเปเปเบกเบนเบ, เบเบตเปเปเบกเปเบเบเบตเบกเบเบฒเบเบเบฒเบ 4 เบเบนเปเบเบฑเบเบเบฐเบเบฒ ETL, เปเบเบดเปเบเปเบเปเบเบญเบญเบเปเบเบฑเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบ ETL เปเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบ DWH เปเบฅเบฐ ELT เบเบฒเบเปเบ DWH เปเบฅเบฐเปเบเปเบเบญเบเบซเบผเบฒเบ. เบซเบเบถเปเบ admin, เบเบนเปเบเบตเปเบเบฑเบเบเบฒเบเบเบฑเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบ.
เปเบเบเบชเปเบฒเบฅเบฑเบเบญเบฐเบเบฒเบเบปเบ
เบเปเบฒเบเบงเบเบเบญเบเบเบฐเบเบงเบเบเบฒเบเปเบกเปเบเบเบฒเบเบเบฐเบซเบเบฒเบเบเบปเบงเบขเปเบฒเบเบซเบผเบตเบเบฅเปเบฝเบเบเปเปเปเบเป, เปเบฅเบฐเบชเบดเปเบเบเบตเปเบชเปเบฒเบเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบฎเบฑเบเปเบเบเปเบฒเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบ Airflow เปเบกเปเบเบเบฒเบเบเบฐเบซเบเบฒเบเบเบฐเบซเบเบฒเบ. เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบชเปเบฒเบเบเบธเปเบก Airflow, เบเบฑเบเบชเบฑเบเบเบฒเบเบนเปเบชเปเบฒเบฅเบฑเบเบเบฐเบเบฑเบเบเบฒเบ Celery, เปเบฅเบฐเปเบฎเบฑเบเปเบซเปเบซเบปเบงเบเบตเปเบเปเปเบฒเบเบฑเบเบเปเบงเบเบเบปเบเปเบญเบเบเปเบงเบเบเบฐเบเบงเบเบเบฒเบเบเปเบฒเบเบปเบเปเบงเบฅเบฒเบงเบฝเบเปเบฅเบฐเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบ.
Epilogue
เบเบตเป, เปเบเปเบเบญเบ, เบเปเปเปเบกเปเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบตเปเบเปเบญเบเบขเบฒเบเบเบญเบเบเปเบฝเบงเบเบฑเบ Airflow, เปเบเปเบเปเบญเบเบเบฐเบเบฒเบเบฒเบกเปเบเบฑเปเบเปเบชเปเบเบธเบเบเบปเปเบเบเป. เบเบงเบฒเบกเบขเบฒเบเบญเบฒเบซเบฒเบเบกเบฒเบเปเบญเบกเบเบฑเบเบเบฒเบเบเบดเบ, เบฅเบญเบเปเบเบดเปเบเปเบฅเปเบงเปเบเบปเปเบฒเบเบฐเบกเบฑเบเบกเบฑเบ :)
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com