Airflow:`airflow webserver`、`airflow scheduler`和`airflow worker`分别是什么?

11

我已经在使用Airflow一段时间了,这是由一位同事设置的。最近我遇到了几个错误,需要更深入地了解如何修复Airflow中的某些问题。

我确实理解这3个进程是什么,但我不理解运行它们时发生的底层事情。当我运行其中一个命令时,究竟会发生什么?我可以在之后的某个地方看到它们正在运行吗?如果我运行其中一个命令,这会覆盖旧的web服务器/调度程序/工作器还是添加一个新的?

此外,例如当我运行airflow webserver时,屏幕上显示了一些正在发生的事情。我可以通过按CTRL + C简单地退出吗?因为当我这样做时,它会说类似于Worker exitingShutting down: Master的东西。这是否意味着我正在关闭所有内容?那么我应该如何退出web服务器屏幕?

1个回答

11

每个进程在运行时都会执行其所建立的功能(Web服务器提供UI、调度程序确定何时需要运行,工作器实际运行任务)。

我认为你的疑惑在于你可能把它们看作是命令,告诉某种“Airflow服务”去做某些事情,但它们各自是独立的命令,启动进程来执行任务。例如,从零开始,你运行airflow scheduler:现在你有一个调度程序正在运行。运行airflow webserver:现在你有一个Web服务器正在运行。当你运行airflow webserver时,它启动了一个Python flask应用程序。在该进程运行时,Web服务器正在运行,如果你终止该命令,则Web服务器停止运行。

所有三个进程都必须运行才能使整个Airflow工作正常(假设你正在使用需要工作者的执行程序)。你应该只有一个调度程序在运行,但如果你运行了两个airflow webserver进程(忽略端口冲突),则会有两个使用相同元数据数据库的独立HTTP服务器在运行。工作者稍有不同,你可能希望多个工作者进程同时运行,以便可以并发地执行更多任务。因此,如果你创建多个airflow worker进程,你将得到多个进程从队列中获取作业、执行它们,并更新任务实例的状态。

当你运行任何这些命令时,你会在控制台上看到标准输出和错误输出。如果你作为守护进程或后台进程运行它们,你可以检查服务器上正在运行的进程。

如果你按下ctrl+c,你就发送了一个杀死进程的信号。理想情况下,在生产airflow集群中,你应该有一些监管程序来监控进程并确保它们始终运行。在本地,你可以在单独的shell前台运行命令,将它们最小化,只在需要时保持运行状态。或者使用-D参数将它们作为后台守护进程运行。例如:airflow webserver -D


1
谢谢。还有一个相关的问题:我该如何查看有多少调度程序正在运行,以便我可以杀死它们?因为我认为在这种情况下可能会启动多个。 - Marjolein
1
那个有点难。调度程序将会启动看起来相似的子进程。我建议要么配置它们作为服务运行,这样你就可以只启动/停止服务,并允许它确保如果服务应该被启动,则它会一直运行。将其保持在前台运行,这样你就可以看到它是否正在运行。或者通过Docker运行它。 - cwurtz
1
有没有办法完全停止空气流动(即所有的),然后再运行3个命令?我将在Docker中运行它,但必须先关闭旧的。 - Marjolein
@Marjolein,**@cwurtz** 我使用 Linuxscreen 来启动 Airflowschedulerwebserver(每个都是单独的 screens),但我从未启动过任何 worker。然而,我仍然能够通过 UI 触发 DAG。但神秘并没有结束。为了应用 airflow.cfg 中的更改(包括更改 AIRFLOW_HOME),我计划杀死现有的 screen 并启动新的 screen。令人惊讶的是,即使在杀死 webserver screen 后,我仍然能够访问 UI,然后运行 ps -aux | grep 'airflow' 让我意识到我正在运行多个 webserver(不确定是否有多个 scheduler)。 - y2k-shubham
1
@y2k-shubham,您可以无问题地运行多个Web服务器。就工作程序而言,我猜测您正在使用本地执行器,该执行器在调度程序上运行任务,因此不需要工作程序。 - cwurtz
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接