Python 气流工作者配置

Python 气流工作者配置,python,python-3.x,airflow,airflow-scheduler,Python,Python 3.x,Airflow,Airflow Scheduler,我是个新手。我试图通过参考这篇文章来设置使用芹菜执行器的分布式气流模式 在详细介绍该规范之前,我想确认我已经在一个单独的实例上安装了PostgreSQL 设置的规格如下所示: 核心/服务器计算机 Python 3.5 气流(气流\主气流=~/气流) 芹菜 心理学2 兔子 在气流.cfg中进行的配置: sql_alchemy_conn = postgresql+psycopg2://username:password@192.168.2.12:5432/airflow executor =

我是个新手。我试图通过参考这篇文章来设置使用芹菜执行器的分布式气流模式

在详细介绍该规范之前,我想确认我已经在一个单独的实例上安装了PostgreSQL

设置的规格如下所示:

核心/服务器计算机

  • Python 3.5
    • 气流(气流\主气流=~/气流)
    • 芹菜
    • 心理学2
  • 兔子
在气流.cfg中进行的配置

sql_alchemy_conn = postgresql+psycopg2://username:password@192.168.2.12:5432/airflow
executor = CeleryExecutor
broker_url = amqp://username:password@192.168.1.12:5672//
celery_result_backend = db+postgresql://username:password@192.168.2.12:5432/airflow
进行的测试:

RabbitMQ is running
Can connect to PostgreSQL and have confirmed that Airflow has created tables
Can start and view the webserver (including custom dags)
气流工人计算机

是否已安装以下组件:

  • Python3.5和
    • 气流(气流\主气流=~/气流)
    • 芹菜
  • 心理学2
airflow.cfg中的配置与服务器中的配置完全相同:

sql_alchemy_conn = postgresql+psycopg2://username:password@192.168.2.12:5432/airflow
executor = CeleryExecutor
broker_url = amqp://username:password@192.168.1.12:5672//
celery_result_backend = db+postgresql://username:password@192.168.2.12:5432/airflow
工作计算机上运行的命令的输出:

运行气流花时:

[2018-02-19 14:58:14,276] {__init__.py:57} INFO - Using executor CeleryExecutor
[2018-02-19 14:58:14,360] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/Grammar.txt
[2018-02-19 14:58:14,384] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/PatternGrammar.txt
[I 180219 14:58:15 command:139] Visit me at http://0.0.0.0:5555
[I 180219 14:58:15 command:144] Broker: amqp://username:password@192.168.1.12:5672//
[I 180219 14:58:15 command:147] Registered tasks: 
    ['celery.accumulate',
     'celery.backend_cleanup',
     'celery.chain',
     'celery.chord',
     'celery.chord_unlock',
     'celery.chunks',
     'celery.group',
     'celery.map',
     'celery.starmap']
[I 180219 14:58:15 mixins:224] Connected to amqp://username:password@192.168.1.12:5672//
我正在通过气流核心机中的dag,并且我已将dag将处理的样本数据(Excel表)复制到同一核心机

我的工作日志
raisecalledProcessError(retcode,cmd)
subprocess.CalledProcessError:Command'afflow run dag_name_x task_name_xx 2018-02-19T10:15:41.657243--local-sd/home/Distributedici/afflow/dags/sample_data_xx.py'返回非零退出状态1

现在我的查询是

1) 我是否也应该将dag文件夹复制到工作计算机

2) 现在,我还没有复制工作计算机上的dag文件夹,我无法看到工作进程拾取任务


请指出我在哪里犯了错误,以及如何让工作进程选择该进程。

您的配置文件看起来不错。正如您所怀疑的,所有工作人员确实需要DAG文件夹的副本。您可以使用类似于
git
的工具来保持它们的同步和最新状态。

在气流调度器、气流Web服务器和芹菜工人节点的部署和保持DAG文件和插件同步方面,会出现气流最大的痛点

我们已经创建了一个名为的开放源码项目,该项目可以自动将固定的气流、芹菜和PostgreSQL与其他一些烘焙好的东西结合起来。该项目的动机是看到如此多的人遇到了相同的痛点,创建了一个非常相似的设置

例如,以下是Airflow Dockerfile:

文件:


充分披露:这是我在工作中参与的一个项目——我们也提供一个在Kubernetes上运行的付费项目。也就是说,开放版是完全免费使用的。

这方面有点晚了,但它可能仍然会对某些人有所帮助,因为从现有的答案来看,除了“手动”部署(通过git/scp等)之外,似乎没有办法共享DAG,尽管有办法

气流支持(
-p
来自CLI的参数或docker compose文件中的
命令:调度器-p
),允许在服务器/主机上部署DAG,并将其序列化并发送给工作人员(因此您不必在多个位置部署DAG,也可以避免DAG不同步的问题)

酸洗与CeleryExecutor兼容


pickle有一些限制,可能会反过来影响您,特别是类和函数的实际代码没有序列化(只有完全限定的名称是),因此,如果您尝试反序列化DAG引用目标环境中没有的代码,则会出现错误。有关pickle的更多信息,请查看此处:

是的,DAG必须存在于所有气流节点上—worker、webserver、scheduler

您可以在所有节点上的dags文件夹中使用一个运行git pull的cron来保持同步


Airflow会将所有DAG移动到数据库而不是文件系统-此功能可能在2.0中提供。

非常感谢您的回复。是的,我也试着把DAG文件夹放在worker实例中。。但它仍然不起作用。最后,我明白了,我不仅需要复制DAG文件夹,还需要将worker的fernet_密钥更改为scheduler的fernet_密钥,以使其正常工作。是的,我建议在scheduler/workers/webserver中保持配置相同。请详细说明解决问题的方法?你刚才更改了worker的fernet_键是什么意思?我已经为airflow docker启动并运行了一个aws ec2实例。现在我想升级到airflow docker swarm,以实现可扩展性。你能给点建议吗?这似乎不是开源的more@deontologicianDockerFile的位置似乎已更改,但它们仍然是开源的。您还可以在本地使用Astro CLI,以获得轻松的快速入门体验。如果已经采用了Docker路径,那么使用Airflow的新功能在多个节点上缩放Airflow DAG可能会更容易。@akki感谢您编写此添加内容-它看起来很酷。它解决的问题是(vs DockerPerator)运行Docker容器表示Airflow worker节点外部存在的远程Docker守护程序上的气流任务实例吗?@TaylorEdmiston我自己没有使用远程Docker守护程序对其进行测试,但从PR来看,我知道这是可能的。操作员本身使您能够在甚至不运行Airflow(但属于Docker swarm群集)的服务器上运行Airflow任务。Docker Swarm是Docker的本机编排工具-基本上你有一堆运行Docker的服务器(气流应该在其中一个服务器上运行),然后这个操作员在任何有足够资源的服务器上运行你的任务。