我已经与Airflow合作了一段时间,这是由同事建立的。最近,我遇到了几个错误,这需要我进一步了解如何解决Airflow中的某些问题。
我确实了解这三个过程是什么,我只是不了解运行它们时发生的潜在事件。当我运行其中一个命令时会发生什么?之后我可以在某处看到它们正在运行吗?如果我运行这些命令之一,是否会覆盖旧的Web服务器/调度程序/工作器或添加新的Web服务器/调度程序/工作器?
此外,例如,如果我运行airflow webserver
,则屏幕会显示一些正在发生的事情。我可以简单地通过按CTRL + C摆脱这一点吗?因为当我这样做时,它会显示诸如Worker exiting
和Shutting down: Master
之类的内容。这是否意味着我要关闭所有内容?那我该如何离开网络服务器屏幕?
答案 0 :(得分:2)
每个进程都在运行时执行其构建的工作(Web服务器提供一个UI,调度程序确定何时需要运行内容,以及工作人员实际运行任务)。
我认为您的困惑是,您可能会将它们视为告诉某种“气流服务”执行某项操作的命令,但是它们每个都是独立的命令,它们会启动流程来执行操作。即。从零开始,您运行head(BSE_stock_data$sc_name)
[1] "ABB LTD. " "AEGIS LOGIS " "AMAR RAJA BA" "A.SARABHAI " "HDFC " "ANDHRA PETRO"
:现在您正在运行调度程序。运行airflow scheduler
:现在您正在运行Web服务器。运行airflow webserver
时,它正在启动python flask应用程序。在运行该进程的同时,如果您杀死命令,则Web服务器正在运行。
这三个组件都必须运行才能使整个气流正常工作(假设您使用的是需要工作人员的执行器)。您应该只运行过一个调度程序,但是如果要运行两个airflow webserver
进程(忽略端口冲突,那么您将使用相同的元数据数据库运行两个单独的http服务器。工作程序稍有不同您可能需要运行多个工作进程,以便可以同时执行更多任务。因此,如果创建多个airflow webserver
进程,最终将导致多个进程从队列中取出作业,执行它们,并使用以下命令更新任务实例任务状态。
当您运行任何这些命令时,您将在控制台中看到stdout和stderr输出。如果将它们作为守护程序或后台进程运行,则可以检查服务器上正在运行哪些进程。
如果您按Ctrl + C,则正在发送信号以终止该进程。对于生产气流集群的理想选择,您应该让一些主管监视流程并确保其始终运行。在本地,您可以在单独的shell的前台运行命令,将它们最小化,并在需要时保持它们运行。或者使用airflow worker
参数将它们作为后台守护程序运行。即-D
。