Airflow dags 和 PYTHONPATH

标签 airflow airflow-scheduler

我有一些似乎无法找到 python 模块的 dag。在 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

这是上面使用的 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

最佳答案

我有类似的问题:

  • Python 没有从 virtualenv 加载来运行 Airflow (这个固定的 Airflow 依赖不是从 virtualenv 获取的)
  • 由于不同的基本路径,未加载 dags 路径下的子模块(此修复了在 dags 文件夹
  • 下导入自己的模块

    我在 systemd 服务的环境文件中添加了以下字符串
    ( /usr/local/airflow/instances/airflow2/etc/envars 在你的情况下)
    source /home/ubuntu/venv/airflow/bin/activate
    PYTHONPATH=/home/ubuntu/venv/airflow/dags:$PYTHONPATH
    

    关于 Airflow dags 和 PYTHONPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711645/

    相关文章:

    Airflow worker 卡住 : Task is in the 'running' state which is not a valid state for execution. 必须清除任务才能运行

    ssl - 如何在 Apache Airflow 上启用 SSL?

    airflow - gcloud Composer 命令失败 "executable file not found in $PATH"

    python - 与 Airflow 的集成测试

    python - 在 TriggerDagRunOperator 中提供上下文

    Airflow 无法识别 DAG 调度

    airflow - 如果 DAG 已在运行,则跳过运行

    postgresql - 无法运行 Airflow 调度程序

    airflow - 为什么 ds 和 ds_nodash 宏返回昨天的日期?

    python - 如何运行超过 10 万个任务的 Airflow dag?