【问题标题】:Airflow settings to run Celery workers in different Docker container?在不同的 Docker 容器中运行 Celery 工作人员的气流设置?
【发布时间】:2017-08-02 07:29:05
【问题描述】:

我在 docker 容器中运行 Airflow。我创建了一个单独的容器来运行 Postgres 服务器和 Rabbitmq 服务器,使用 docker 网络连接这些容器 - 遵循这个不错的 article。现在我的 Airflow docker 容器正在运行并使用 docker 网络连接到其他容器 - 到目前为止,该过程进展顺利。问题是如何在同一个容器中运行airflow webserverairflow schedulerairflow worker。经过一番研究我发现:建议在一个容器中运行一项服务。现在我有两个解决方案

  1. 在同一个 Airflow 容器中运行多个服务 - 我想不出一种简单的方法来实现成为 Docker 中的新蜜蜂。
  2. 创建单独的容器来运行 Celery worker 和 Airflow 调度程序 - 但在 airflow.cfg 文件中,与 Celery 相关的设置是:broker_url = 'amqp://guest:guest@ksaprice_rabbitmq:8080//'celery_result_backend = db+postgresql://developer:user889@ksaprice_postgres:5432/airflow。这些设置指的是已经在运行不同容器的数据库或 rabbitmq - 它们不指运行 celery 和调度程序的 ip/url,我假设是这种方式,因为 celery 和调度程序在气流服务器上运行。

我的问题是:

  1. 参考第 1 点:有没有简单的方法在同一个 Airflow 容器中运行 airflow webserverairflow schedulerairflow worker 命令?
  2. 参考第 2 点:airflow.cfg 中是否有办法配置气流调度程序和气流工作程序以在单独的 docker 容器中运行 - 并使用 docker 网络链接它们?

我是 Airflow 和 Docker 的新手。

【问题讨论】:

标签: docker celery airflow


【解决方案1】:

花了很多时间后,我找到了以下答案:

  1. 对于第一个问题: 要在同一个airflow_container 上运行多个服务:docker exec -it airflow_container bash,现在CLI 将附加到airflow_container 然后运行airflow worker。对airflow schedulerairflow flower 重复相同的过程。现在,您将拥有三个不同的 CLI,在同一个 airflow_container 上运行三个服务 - 这是我发现的最简单的方法。
  2. 对于第二个问题:这里有一些选项:airflow cli,比如airflow webserver --hostname=some_host --port=some_portairflow flower --hostname=some_host --port=some_port,可以在不同的服务器上运行它们。但是对于airflow worker,没有在不同服务器上运行的选项 - 可能有其他方法可以在不同服务器上运行工作程序。

【讨论】:

    【解决方案2】:

    1- 我确实安装了所有这些,所以它可能

    2-优化方法是在一台服务器上安装气流(webserver)+后端数据库(Mysql),在另一台服务器上安装队列(RabbitMQ),在另一组服务器上安装 Celery 部分。 下面我将从源头中提及一些内容,这有助于更好地澄清事情:

    CeleryExecutor 是您可以扩展数量的方法之一 工人。为此,您需要设置一个 Celery 后端 (RabbitMQ,Redis,...)并更改您的airflow.cfg 以指向执行程序 参数给 CeleryExecutor 并提供相关的 Celery 设置。

    以下是对您的员工的一些必要要求:

    airflow需要安装,CLI需要在路径中

    气流配置设置应该是同质的 集群

    在 worker 上执行的操作符需要有自己的 在这种情况下遇到的依赖关系。例如,如果您使用 HiveOperator,hive CLI 需要安装在那个盒子上,或者如果 你使用MySqlOperator,需要的Python库需要 以某种方式在 PYTHONPATH 中可用

    工作人员需要有权访问其 DAGS_FOLDER,并且您需要 通过您自己的方式同步文件系统。一个常见的设置是 将您的 DAGS_FOLDER 存储在 Git 存储库中并将其同步 使用 Chef、Puppet、Ansible 或任何您用来配置的机器 环境中的机器。如果你所有的盒子都有一个共同的安装架 点,在那里共享您的管道文件应该也可以工作

    来源:https://airflow.readthedocs.io/en/1.10.6/howto/executor/use-celery.html

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2022-08-16
      • 2020-01-28
      • 2018-09-26
      • 2020-03-20
      • 2017-06-03
      • 1970-01-01
      • 2021-05-03
      • 2013-02-18
      相关资源
      最近更新 更多