基于 Web 请求在 Airflow 上运行作业

新手上路,请多包涵

我想知道是否可以在通过 HTTP 收到请求后执行气流任务。我对 Airflow 的调度部分不感兴趣。我只是想用它来代替芹菜。

所以一个示例操作是这样的。

  1. 用户提交一个表格请求一些报告。
  2. 后端接收请求并向用户发送请求已收到的通知。
  3. 然后后端使用 Airflow 安排一个作业立即运行。
  4. 然后 Airflow 执行一系列与 DAG 相关的任务。比如先从redshift拉取数据,再从mysql拉取数据,对两个结果集做一些操作,合并,然后将结果上传到Amazon S3,发邮件。

无论我在网上阅读什么,您都可以通过在命令行上执行 airflow ... 来运行气流作业。我想知道是否有一个 python api 可以执行同样的事情。

谢谢。

原文由 Pravin Umamaheswaran 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 825
2 个回答

Airflow REST API 插件 会在这里帮助您。按照说明安装插件后,您只需点击以下网址: http://{HOST}:{PORT}/admin/rest_api/api/v1.0/trigger_dag?dag_id={dag_id}&run_id={run_id}&conf={url_encoded_json_parameters} ,将 dag_id 替换为您的 dag 的 id,省略 run_id 或指定唯一的 id,并传递 url用于 conf 的编码 json(在触发的 dag 中包含您需要的任何参数)。

下面是一个使用 jQuery 调用 Airflow api 的 JavaScript 函数示例:

 function triggerDag(dagId, dagParameters){
    var urlEncodedParameters = encodeURIComponent(dagParameters);
    var dagRunUrl = "http://airflow:8080/admin/rest_api/api/v1.0/trigger_dag?dag_id="+dagId+"&conf="+urlEncodedParameters;
    $.ajax({
        url: dagRunUrl,
        dataType: "json",
        success: function(msg) {
            console.log('Successfully started the dag');
        },
        error: function(e){
           console.log('Failed to start the dag');
        }
    });
}

原文由 Jeremy Farrell 发布,翻译遵循 CC BY-SA 3.0 许可协议

airflow 中的一个新选项是 1.7 和 1.8 的最新版本中的 实验性 但内置的 API 端点。这允许您在气流服务器上运行 REST 服务以侦听端口并接受 cli 作业。

我自己的经验有限,但我已经成功地运行了 test dags。根据文档:

/api/experimental/dags/<DAG_ID>/dag_runs 为给定的 dag id (POST) 创建一个 dag_run。

这将安排立即运行您想运行的任何 dag。不过,它仍然使用调度程序,等待心跳以查看 dag 是否正在运行并将任务传递给 worker。不过,这与 CLI 的行为完全相同,所以我仍然相信它适合您的用例。

有关如何配置它的文档可在此处获得: https ://airflow.apache.org/api.html

github 中也有一些简单的示例客户端,在 airflow/api/clients 下

原文由 apathyman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题