Python 气流工作者配置
我是个新手。我试图通过参考这篇文章来设置使用芹菜执行器的分布式气流模式 在详细介绍该规范之前,我想确认我已经在一个单独的实例上安装了PostgreSQL 设置的规格如下所示: 核心/服务器计算机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 =
- Python 3.5
- 气流(气流\主气流=~/气流)
- 芹菜
- 心理学2
- 兔子
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
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的服务器(气流应该在其中一个服务器上运行),然后这个操作员在任何有足够资源的服务器上运行你的任务。