通过Ajax api 动态传参 调用 Azkaban

通过Ajax api 动态传参 调用 Azkaban

前提

azkaban的官方文档
hutool工具库

数据仓库中, 使用 azkaban 作为任务调度的组件.

仓库搭建完成后, 需要执行过去两年的数据, 因为 Web UI 没有提供这个功能, 所以调用官方提供的 api, 然后动态传入日期变量. 达到目的.

Web UI 定时执行

执行时需要传入当天的日期, 获取当天日期的方式就是用 Job Configuration 中提供的参数:
官方文档中的介绍 更多参数查看官方文档

Parameter Description
azkaban.flow.start.year job开始的年
azkaban.flow.start.month job开始的月 (01-12)
azkaban.flow.start.day job开始的日

在 Flow Parameters 列中, key 填入自定义变量, value 为 :

${azkaban.flow.start.year}-${azkaban.flow.start.month}-${azkaban.flow.start.day}

Execute a Flow

这个API通过ajax调用执行一个流,支持多种不同的选项。运行单个作业也可以通过此API禁用同一流中的所有其他作业来实现。

  • 方法: GET
  • 请求 URL: /executor?ajax=executeFlow
  • 参数列表: Request Query String

请求参数列表

Parameter Description
session.id 用户的sessionId, 登录后返回.例如: 30d538e2-4794-4e7e-8a35-25a9e2fd5 300
ajax=executeFlow 固定参数, 当前 ajax 的请求是 executeFlow.
project 项目名.例如: run-all-jobs
flow 要执行的 flow 的id.例如: test-flow
disabled (optional) 禁止执行任务的列表 . 应该是json数组格式.例如: [“job_name_1”, “job_name_2”, “job_name_N”]
successEmails (optional) 执行成功后发送邮件列表. 多个收件人用以下符号隔开 [,|;|\s+].例如: [email protected],[email protected]
failureEmails (optional) 执行失败后发送邮件列表. 多个收件人用以下符号隔开 [,|;|\s+].例如: [email protected],[email protected]
successEmailsOverride (optional) 是否使用系统默认邮件设置来覆盖成功邮件.可选值: true, false
failureEmailsOverride (optional) 是否使用系统默认邮件设置来覆盖失败邮件s.可选值: true, false
notifyFailureFirst (optional) 是否在第一次出现故障时就发送电子邮件通知.可选值: true, false
notifyFailureLast (optional) 是否在最后一次故障发生时发送电子邮件通知.Possible Values: true, false
failureAction (Optional) 如果发生故障,执行什么操作.可选值: finishCurrent, cancelImmediately, finishPossible
concurrentOption (Optional) 并发的选择。如果没有特殊要求,使用 ignore.可选值 ignore, pipeline, skip
flowOverride[flowProperty] (Optional) 用指定的值重写指定的流属性.可选值 : flowOverride[failure.email]=test@ gmail.com

Response Object

Parameter Description
error Error message if the call has failed
flow The executed flow id
execid The execution id

这是一个用 curl 执行的例子:

curl -k --get --data 'session.id=189b956b-f39f-421e-9a95-e3117e7543c9' --data 'ajax=executeFlow' --data 'project=azkaban-test-project' --data 'flow=test' https://localhost:8443/executor

相应:

{
  message: "Execution submitted successfully with exec id 295",
  project: "foo-demo",
  flow: "test",
  execid: 295
}

在官方文档中, 请求参数的最后一个

flowOverride[flowProperty] (Optional)

就是相当于 Web UI 中的自定义参数.

示例代码如下:

package com.whdx.paper.upload.utils;

import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

import java.util.Objects;

public class AzkaBanInvok {
    public static void main(String[] args) {
        String body = HttpRequest.post("https://192.168.109.159:8443/")
                .header("Content-Type", "application/x-www-form-urlencoded")
                .header("X-Requested-With", "XMLHttpRequest")
                .form("action", "login")
                .form("username", "admin")
                .form("password", "admin")
                .execute().body();
        JSONObject jsonObject = JSONUtil.parseObj(body);
        if (Objects.equals(jsonObject.getStr("status"), "success")) {
            String sessionId = jsonObject.getStr("session.id");
            String result = HttpRequest.get("https://192.168.109.159:8443/executor")
                    .header("Content-Type", "application/x-www-form-urlencoded")
                    .header("X-Requested-With", "XMLHttpRequest")
                    .form("session.id", sessionId)
                    .form("ajax", "executeFlow")
                    .form("project", "whadmin")
                    .form("flow", "export_all")
                    // 添加自定义参数, dt=2020-04-05.
                    .form("flowOverride[dt]", "2020-04-05") 
                    .execute().toString();

            System.out.println(result);


        }

    }


}

示例中利用了 hutool 工具库, 简化了请求. 使用 HttpClient, HttpURLConnection 同理

你可能感兴趣的:(大数据)