seb*_*ian 5 airflow airflow-scheduler
我有一些 dags 似乎无法找到 python 模块。在 Airflow UI 内部,我看到了大量这些消息变化。
Broken DAG: [/home/airflow/source/airflow/dags/test.py] No module named 'paramiko'
在文件内部,我可以直接修改 python sys.path,这似乎减轻了我的问题。
import sys
sys.path.append('/home/airflow/.local/lib/python2.7/site-packages')
尽管必须直接在我的代码中设置我的路径,但这感觉不对。我已经尝试在 Airflow 用户帐户 .bashrc 中导出 PYTHONPATH,但在执行 dag 作业时似乎没有被读取。解决这个问题的正确方法是什么?
谢谢。
- - - 更新 - - -
感谢您的回复。
下面是我的 systemctl 脚本。
::::::::::::::
airflow-scheduler-airflow2.service
::::::::::::::
[Unit]
Description=Airflow scheduler daemon
[Service]
EnvironmentFile=/usr/local/airflow/instances/airflow2/etc/envars
User=airflow2
Group=airflow2
Type=simple
ExecStart=/usr/local/airflow/instances/airflow2/venv/bin/airflow scheduler
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
::::::::::::::
airflow-webserver-airflow2.service
::::::::::::::
[Unit]
Description=Airflow webserver daemon
[Service]
EnvironmentFile=/usr/local/airflow/instances/airflow2/etc/envars
User=airflow2
Group=airflow2
Type=simple
ExecStart=/usr/local/airflow/instances/airflow2/venv/bin/airflow webserver
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
这是 EnvironentFile Contents 从上面使用的
more /usr/local/airflow/instances/airflow2/etc/envars
PATH=/usr/local/airflow/instances/airflow2/venv/bin:/usr/local/bin:/usr/bin:/bin
AIRFLOW_HOME=/usr/local/airflow/instances/airflow2/home
AIRFLOW_CONFIG=/usr/local/airflow/instances/airflow2/etc/airflow.cfg
Run Code Online (Sandbox Code Playgroud)
您的 python 环境似乎已降级 - 您的虚拟机上有多个 python 实例(python 3.6 和 python 2.7)以及多个 pip 实例。有一个 python3.6 的 pip 正在尝试使用,但您的所有模块实际上都在 python 2.7 中。
通过使用符号链接重定向到 2.7 可以轻松解决此问题。
输入命令并查看使用的是哪个 python 实例(2.7.5、2.7.14、3.6 等):
pythonpython2python2.7或键入which python查找您的虚拟机正在使用哪个 python 实例。您还可以which pip查看正在使用什么 pip 实例。
我将假设python并which python导致 python 3(您不想使用它),但python2并python2.7导致您确实想要使用的实例。
要创建符号链接以便/home/airflow/.local/lib/python2.7/使用,请执行以下操作并创建以下符号链接:
cd home/airflow/.local/lib/python2.7ln -s python2 pythonln -s /home/airflow/.local/lib/python2.7 python2 符号链接结构是:ln -s #PATHDIRECTED #LINKNAME
您实质上是在说,当您运行命令时python,转到python2。然后运行时python2,转到/home/airflow/.local/lib/python2.7. 一切都被重定向了。
现在重新运行上面的三个命令(python、python2、python2.7)。所有这些都应该指向您想要的 python 实例。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
9040 次 |
| 最近记录: |