azkaban的官方文档
hutool工具库
数据仓库中, 使用 azkaban 作为任务调度的组件.
仓库搭建完成后, 需要执行过去两年的数据, 因为 Web UI 没有提供这个功能, 所以调用官方提供的 api, 然后动态传入日期变量. 达到目的.
执行时需要传入当天的日期, 获取当天日期的方式就是用 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}
这个API通过ajax调用执行一个流,支持多种不同的选项。运行单个作业也可以通过此API禁用同一流中的所有其他作业来实现。
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 |
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 同理