早上好。
我也试图设置DAG
使用在线教程和stackoverflow我已经能够找到成功实现目标的以下DAG和运算符,但是我希望DAG重新安排或在完成时重新运行,以便开始观察/感知另一个文件
我尝试设置变量public int maxProfit(int[] prices, int fee) {}
然后设置max_active_runs:1
这是重新安排DAG但是开始排队任务并锁定文件。
欢迎关于如何在archive_task之后重新运行DAG的任何想法?
由于
DAG代码
schedule_interval: timedelta(seconds=5)
文件传感器操作员
from airflow import DAG
from airflow.operators import PythonOperator, OmegaFileSensor, ArchiveFileOperator
from datetime import datetime, timedelta
from airflow.models import Variable
default_args = {
'owner': 'glsam',
'depends_on_past': False,
'start_date': datetime.now(),
'provide_context': True,
'retries': 100,
'retry_delay': timedelta(seconds=30),
'max_active_runs': 1,
'schedule_interval': timedelta(seconds=5),
}
dag = DAG('test_sensing_for_a_file', default_args=default_args)
filepath = Variable.get("soucePath_Test")
filepattern = Variable.get("filePattern_Test")
archivepath = Variable.get("archivePath_Test")
sensor_task = OmegaFileSensor(
task_id='file_sensor_task',
filepath=filepath,
filepattern=filepattern,
poke_interval=3,
dag=dag)
def process_file(**context):
file_to_process = context['task_instance'].xcom_pull(
key='file_name', task_ids='file_sensor_task')
file = open(filepath + file_to_process, 'w')
file.write('This is a test\n')
file.write('of processing the file')
file.close()
proccess_task = PythonOperator(
task_id='process_the_file',
python_callable=process_file,
provide_context=True,
dag=dag
)
archive_task = ArchiveFileOperator(
task_id='archive_file',
filepath=filepath,
archivepath=archivepath,
dag=dag)
sensor_task >> proccess_task >> archive_task
答案 0 :(得分:7)
Dmitris方法运作良好。
我也在我的阅读设置schedule_interval=None
中找到了,然后使用TriggerDagRunOperator同样工作
trigger = TriggerDagRunOperator(
task_id='trigger_dag_RBCPV99_rerun',
trigger_dag_id="RBCPV99_v2",
dag=dag)
sensor_task >> proccess_task >> archive_task >> trigger
答案 1 :(得分:4)
设置schedule_interval=None
并使用airflow trigger_dag
中的BashOperator
命令在上一个完成时启动下一个执行。
trigger_next = BashOperator(task_id="trigger_next",
bash_command="airflow trigger_dag 'your_dag_id'", dag=dag)
sensor_task >> proccess_task >> archive_task >> trigger_next
您可以使用相同的airflow trigger_dag
命令手动开始首次运行,然后trigger_next
任务将自动触发下一个。我们现在在生产中使用它已经好几个月了,它运行得很好。