我的Ariflow脚本有几个任务,使用python操作符启动一个使用boto3的粘合作业。即使流程依赖于Ariflow中的每个任务。连续的任务不会等到前一个任务成功完成。
一旦调用了前一个粘合作业任务,就会调用下一个粘合作业任务。最后,尽管气流看起来成功完成,但胶水作业仍然运行了几分钟。
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
from airflow.operators.sensors import TimeDeltaSensor
import boto3
import json
default_args = {
'owner': 'SAM',
'start_date': datetime(2019, 5, 27)
}
glue_client = boto3.client('glue', region_name='us-east-1')
def run_customer_job():
glue_client.start_job_run(JobName='customer')
def run_product_job():
glue_client.start_job_run(JobName='product')
with DAG('dataload', default_args=default_args, schedule_interval="0 15 * * *") as dag:
task1 = PythonOperator(task_id='task1',
python_callable=run_customer_job)
task2 = PythonOperator(task_id='task2',
python_callable=run_product_job)
task1 >> task2 发布于 2019-05-29 08:42:51
发布于 2019-05-28 22:49:49
我会在调用start_job_run之后创建一个状态循环,这样直到胶水作业完成后,你的任务才会结束。
快速简单的示例(您将需要处理失败的任务等):
job = glue_client.start_job_run(JobName='customer')
while True:
status = glue.get_job_run(JobName=job['Name'], RunId=job['JobRunId'])
if status['JobRun']['JobRunState'] == 'SUCCEEDED':
break
time.sleep(10)https://stackoverflow.com/questions/56333896
复制相似问题