我刚刚设置了芹菜执行器的气流,这里是我的DAG的骨架
dag = DAG('dummy_for_testing', default_args=default_args)
t1 = BashOperator(
task_id='print_date',
bash_command='date >> /tmp/dag_output.log',
queue='test_queue',
dag=dag)
t3 = BashOperator(
task_id='print_host',
bash_command='hostname >> /tmp/dag_output.log',
queue='local_queue',
dag=dag)
t2 = BashOperator(
task_id='print_uptime',
bash_command='uptime >> /tmp/dag_output.log',
queue='local_queue',
dag=dag)
t2.set_upstream(t3)
t2.set_upstream(t1)
我有两个工人。其中一个只运行一个名为local_queue
的队列,另一个运行两个名为local_queue,test_queue
的队列
我想在一台机器上运行任务1,但在两台机器上运行任务2和3。即在仅运行local_queue的worker 1上运行t2和t3,在运行local_queue和test_queue的worker 2上运行所有3(t1,t2和t3)。 任务运行总数应为5。
然而,当我运行它时,只运行3个任务。 1)为worker 2运行print_date(这是正确的) 2)print_host仅针对worker 1运行(不正确。应该为两个worker运行)和 3)print_uptime仅针对worker 2运行(也是不正确的。应该为两个worker运行)
您能否指导我如何设置它以便运行5个任务。在生产中,我想通过将机器分组到队列和所有具有QUEUE_A - >的机器来管理机器。做X和所有机器都有QUEUE_B - >做Y等。
谢谢
答案 0 :(得分:5)
让每个工作人员工作一个队列,而不是让一个工作人员工作2个队列。 因此,worker命令应该如下所示:
airflow worker -q test_queue
airflow worker -q local_queue
然后有两个相同的任务,但在不同的任务中。
dag = DAG('dummy_for_testing', default_args=default_args)
t1 = BashOperator(
task_id='print_date',
bash_command='date >> /tmp/dag_output.log',
queue='test_queue',
dag=dag)
t3 = BashOperator(
task_id='print_host',
bash_command='hostname >> /tmp/dag_output.log',
queue='local_queue',
dag=dag)
t3_2 = BashOperator(
task_id='print_host_2',
bash_command='hostname >> /tmp/dag_output.log',
queue='test_queue',
dag=dag)
t2 = BashOperator(
task_id='print_uptime',
bash_command='uptime >> /tmp/dag_output.log',
queue='local_queue',
dag=dag)
t2_2 = BashOperator(
task_id='print_uptime_2',
bash_command='uptime >> /tmp/dag_output.log',
queue='test_queue',
dag=dag)
t2.set_upstream(t3)
t2.set_upstream(t3_2)
t2.set_upstream(t1)
t2_2.set_upstream(t3)
t2_2.set_upstream(t3_2)
t2_2.set_upstream(t1)