【问题标题】:Debugging Airflow Tasks with IDE tools?使用 IDE 工具调试 Airflow 任务?
【发布时间】:2020-03-14 20:13:37
【问题描述】:

我的 Airflow DAG 主要由 PythonOperators 组成,我想使用我的 Python IDE 调试工具来开发 python“内部”​​气流。 - 我依赖 Airflow 的数据库连接器,我认为将其“移出”气流进行开发会很丑陋。

我使用 Airflow 已经有一段时间了,目前只通过 CLI 实现了开发和调试。这开始让人厌烦了。

有谁知道设置 PyCharm 或其他 IDE 的好方法,使我能够在运行 airflow test .. 时使用 IDE 的调试工具集?

【问题讨论】:

    标签: python debugging pycharm ide airflow


    【解决方案1】:

    聚会可能有点晚了,但也一直在寻找解决方案。希望能够调试代码尽可能接近“生产模式”(所以没有测试等)。

    找到了“Python Debug Server”形式的解决方案。 它的工作方式相反:您的 IDE 进行侦听,并从远程脚本连接到您的编辑器。

    只需添加“Python 调试服务器”类型的新运行配置。 你会看到一个屏幕告诉你远程pip install pydevd-pycharm。在同一页面上,您可以填写本地 IP 和调试器应该可用的端口以及可选的路径映射。

    之后,只需将建议的 2 行代码添加到您希望调试会话开始的位置。

    运行配置以激活侦听器,如果一切顺利,您的编辑器应该在到达settrace-call 的位置后立即中断。

    编辑/注意:如果您在编辑器中停止配置,气流将继续执行任务,请务必意识到这一点。

    【讨论】:

    • 尝试这个是因为它非常适合我的用例,但是当我尝试从我的 ec2 实例远程运行脚本时,我经常遇到套接字超时。 (即编辑器正在积极收听,但从未建立连接)。想知道您是否遇到过类似的问题?我尝试过的事情: - 从 ec2 实例 ping 我的本地 IP(成功 - EC2 实例的出站规则似乎正在工作) - 在 pydevd_comm.py 中将超时时间从 10 秒修改为 60 秒 - 选择不同的端口范围。 (不成功 - 无助于解决问题)
    • 它需要能够与您的本地计算机建立直接连接。如果可以从 ec2 实例(通常仅在您自己的 LAN 中工作)可以做到这一点,我会感到惊讶吗?也许你可以使用某种隧道(ngrok 或类似的东西)?甚至从您的路由器进行端口转发并使用您的外部 IP..
    • 你成功了,成就了我的一年!!谢谢你。巨大的!我正在运行容器化气流构建,只需将 pydevd-pycharm~=202.7319.64 添加到容器的 requirements.txt 文件中,然后选择一个未使用的端口。像魅力一样工作!
    【解决方案2】:

    这可能有点骇人听闻,但我找到了一种设置 PyCharm 的方法:

    • 在本地气流环境中使用which airflow - 在我的情况下它只是一个 pipenv
    • 在 PyCharm 中添加新的运行配置
    • 将 python“脚本路径”设置为所述气流脚本
    • 设置参数以测试任务:test dag_x task_y 2019-11-19

    这仅通过 SequentialExecutor 进行了验证,这可能很重要。

    对于每个新的调试/开发任务,我都必须在运行配置中更改测试参数,这很糟糕,但到目前为止,这对于在“内部”本地气流环境中设置断点和单步执行代码非常有用。

    【讨论】:

    • 您也可以在 Pycharm 的运行/调试配置对话框中的环境变量字段中添加AIRFLOW__CORE__EXECUTOR=DebugExecutor
    【解决方案3】:

    对于 VSCode,以下调试配置附加内置调试器

        {
            "name": "Airflow Test - Example",
            "type": "python",
            "request": "launch",
            "program": "`pyenv which airflow`",  // or path to airflow 
            "console": "integratedTerminal",
            "args": [ // exact formulation may depend on airflow 1.0 vs 2.0
                "test",
                "mydag",
                "mytask",
                "`date +%Y-%m-%dT00:00:00`", // current date 
                "-sd",
                "path/to/mydag" // providing the subdirectory makes this faster
            ]
        }
    

    我假设其他 IDE 也有类似的配置

    【讨论】:

      【解决方案4】:

      我使用 PyCharm 调试 airflow test dag_id task_id,在 vagrant 机器上运行。即使您直接在 localhost 上运行气流,您也应该能够使用相同的方法。

      Pycharm's documentation on this subject 应该向您展示如何创建适当的“Python 远程调试”配置。当您运行此配置时,它会等待您在某处添加的代码位(例如在您的一个操作员中)与它联系。然后你就可以正常调试了,在 Pycharm 中设置断点。

      【讨论】:

        猜你喜欢
        • 2020-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-19
        相关资源
        最近更新 更多