从Airflow连接PostgreSQL数据库时出现错误

13

使用以下代码:

sql_alchemy_conn = db+postgresql://username:xxx@127.0.0.1:5432/airflow 时出现错误:

sqlalchemy.exc.NoSuchModuleError: 无法加载插件:sqlalchemy.dialects:db.postgresql

当使用以下代码:

sql_alchemy_conn = postgresql+psycopg2://username:xxx@localhost:5432/airflow 时,我可以运行 airlfow webserver -p 8080,但是在运行调度程序 airflow scheduler 时,它会抛出错误:

ModuleNotFoundError: 没有名为 'MySQLdb' 的模块 enter image description here

我使用的软件包版本:

psycopg2==2.7.3.1
sqlalchemy==1.1.15
sqlalchemy-redshift== 0.7.0
apache_airflow=1.8.2

之前sql_alchemy_conn = db+postgresql://username:xxx@127.0.0.1:5432/airflow对我来说是有效的-两个月前。我不知道现在的问题在哪里。


3
请勿发布文字图片。请将完整的回溯作为文本包含在内。数据库URL的(典型)格式为 方言+驱动程序://用户名:密码@主机:端口/数据库,我相信方言“db”从未存在过。 典型值可能包括postgresql、mysql、mssql等。请注意保持原意不变,并使内容更加通俗易懂。 - Ilja Everilä
之前我按照这里发布的答案进行操作:https://dev59.com/Y1oU5IYBdhLWcg3wIkeI,使用了“db”,当时它起作用了。现在由于某些软件包的升级,它正在引起问题,我尝试了所有可能的解决方案 - 但都没有奏效。 - Javed
啊,这是Celery的配置URL,而不是SQLAlchemy的,所以这就是原因。它们看起来非常相似,但是用于不同的事情,似乎是这样的。关于找不到该模块,似乎Celery出于某种原因正在尝试将使用MySQL方言和MySQLdb驱动程序的DB URL传递给SQLAlchemy。也许是默认设置? - Ilja Everilä
这是连接PostgreSQL数据库的Celery格式,如官方文档所述:http://docs.celeryproject.org/en/latest/userguide/configuration.html,但这也没有起作用。 - Javed
1个回答

17

最终,以下设置起作用 - 在 airflow.cfg 中:

sql_alchemy_conn = postgresql+psycopg2://scot:tiger@localhost:5432/airflow
celery_result_backend = db+postgres://scot:tiger@localhost:5432/airflow

需要注意的是,在Airflow配置文件中,sql_alchemy_conncelery_result_backend这两个设置项所使用的方言和驱动程序是不同的,尽管它们指向同一个数据库。


我按照这个方式进行操作,Web服务器和调度程序也正常运行,但是当我执行 $ airflow celery worker 时,我会得到 sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name "postgres" to address: nodename nor servname provided, or not known 的错误提示。我检查了 airflow.cfg 文件,没有在任何地方将 postgres 错误地放置在了 localhost 的位置。 - saadi
我应该把这些放在settings.py文件中吗?还是其他地方? - Ali Husham
您应该将其放置在 airflow.cfg 中。 - Daniel Chepenko
对于我来说,Celery的结果后端只被称为result_backend,而不是celery_result_backend - tsveti_iko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接