我是Airflow的新手。我正在尝试使用Celery Executor设置分布式气流模式,请参阅本文https://stlong0521.github.io/20161023%20-%20Airflow.html
在详细了解规范之前,我想确认我已经在一个单独的实例上安装了PostgreSQL 。
设置规范详述如下:
Airflow核心/服务器计算机
在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
进行了测试:
RabbitMQ is running
Can connect to PostgreSQL and have confirmed that Airflow has created tables
Can start and view the webserver (including custom dags)
气流工作者计算机
安装了以下内容:
在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//
我正在 Airflow Core机器中传递dag,并且我已经将dag将处理的样本数据(Excel工作表)复制到同一个核心机器。
我的工作人员记录
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'airflow run dag_name_x task_name_xx 2018-02-19T10:15:41.657243 --local -sd /home/Distributedici/airflow/dags/sample_data_xx.py' returned non-zero exit status 1
现在我的查询
1)我是否应该将dag文件夹复制到工作者计算机
2)现在,我还没有复制工作者计算机上的dag文件夹,我无法看到工作进程接收任务。
请指出我在哪里犯了错误,以及如何让工人流程接受这个过程。
答案 0 :(得分:2)
Airflow的一些最大难点在于部署,并使DAG文件和插件在Airflow调度程序,Airflow网络服务器和Celery工作节点之间保持同步。
我们创建了一个名为Astronomer Open的开源项目,它可以自动化Dockerized Airflow,Celery和PostgreSQL以及其他一些好东西。该项目的动机是看到这么多人遇到同样的痛点创造了一个非常相似的设置。
例如,这是Airflow Dockerfile:https://github.com/astronomer/astronomer/blob/master/docker/airflow/1.10.2/Dockerfile
文档:https://open.astronomer.io/
完全披露:这是我在工作中贡献的项目 - 我们提供付费enterprise edition以及在Kubernetes (docs)上运行的项目。也就是说,Open Edition完全免费使用。
答案 1 :(得分:1)
您的配置文件看起来不错。如您所料,所有工作人员确实需要DAG文件夹的副本。您可以使用git
之类的内容来保持同步和最新状态。
答案 2 :(得分:0)
这有点晚了,但是它可能仍然对某人有帮助,因为从现有的答案来看,除了“手动”部署(通过git / scp等)外,似乎没有其他方法可以共享DAG,尽管有一个办法。
Airflow支持pickling(CLI中的-p
参数或docker-compose文件中的command: scheduler -p
),该参数允许将DAG部署在服务器/主服务器上并进行序列化并发送给工作人员(因此您不必在多个地方部署DAG,并且可以避免DAG不同步的问题)。
酸洗与CeleryExecutor
兼容。
酸洗有一些限制,可能会咬你,特别是类和函数的实际代码未序列化(只有全限定名称),因此,如果您尝试反序列化DAG引用您的代码,则会出现错误在目标环境中没有。有关泡菜的更多信息,请点击此处:https://docs.python.org/3.3/library/pickle.html
答案 3 :(得分:0)
是的,必须在所有气流节点(工作人员,Web服务器,调度程序)上都存在损坏。
您可以在所有节点上的dags文件夹中运行一个运行git pull的cron,以使其保持同步。
Airflow将所有dag移至数据库而不是文件系统-此功能可能在2.0中提供。