基于Webreques的气流作业

2024-05-16 07:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如果通过HTTP获得请求,airlow任务是否可以执行。我对气流的调度部分不感兴趣。我只想用它来代替芹菜。

所以一个例子就是这样的。

  1. 用户提交一个表单,请求某些报表。
  2. 后端接收请求并向用户发送请求已收到的通知。
  3. 然后,后端使用Airflow计划作业以立即运行。
  4. 然后,Airflow执行与DAG关联的一系列任务。例如,首先从redshift中提取数据,从MySQL中提取数据,对两个结果集进行一些操作,将它们合并,然后将结果上传到Amazon S3,发送电子邮件。

无论我在网上读到什么,您都可以通过在命令行上执行airflow ...来运行airlow作业。我想知道是否有一个python api可以执行相同的操作。

谢谢。


Tags: 数据用户http表单redshift报表作业调度
3条回答

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

我自己只有有限的经验,但我成功地运行了测试dag。根据文件:

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

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

关于如何配置它的文档可以在这里获得:https://airflow.apache.org/api.html

github中的airlow/api/clients下也有一些简单的示例客户机

在这里,Airflow REST API Plugin可以帮你。按照安装插件的说明操作后,只需点击以下url即可: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,并为conf传递url编码的json(使用触发的dag中需要的任何参数)。

下面是一个使用jQuery调用气流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');
        }
    });
}

你应该根据你的需要看Airflow HTTP Sensor。你可以用这个触发一个dag。

相关问题 更多 >