levycui 发表于 2021-6-22 22:47:45

Azkaban 外部接口的使用与开发

问题导读:
1、如何远程创建一个Azkaban任务项目?
2、如何删除一个任务项目?
3、如何从流中获取job?
4、如何操作取消流的执行?

Azkaban 外部接口的使用与开发

此文档可用于Azkaban 任务的https调用,提供了查看任务的状态信息、执行情况、任务的创建、上传、触发、取消、调度等功能接口。可以使开发者在编程过程中直接通过https api的调用,来对任务进行控制,开发者可参考azkaban官网提供的api文档。

azkaban官网提供的api文档:https://azkaban.github.io/azkaban/docs/latest/#ajax-api

API调研结果:


如下是对于Api简单Demo。

使用Hutool工具,直接进行https调用,pom

    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.5.1</version>
   </dependency>

一、认证

获取session.id,在调用接口时,都会进行session.id的认证,获取到的session.id过期时间为24小时。当会话进行退出、机器关机、切换机器、改变浏览器等操作时,session将会失效。若session.id已过期则重新进行获取即可,应为新会话将覆盖老会话。

请求体【请求方式:post】


代码示例:

    String body = HttpRequest.post("https://localhost:8443")
                  .body("action=login&username=azkaban&password=azkaban")
                  .execute()
                  .body();
            System.out.println(body);
响应体:


{
"status" : "success",
"session.id" : "c001aba5-a90f-4daf-8f11-62330d034c0a"
}


二、远程创建一个任务项目

在上传任务zip包时,进行远程创建任务姓名。

请求体


代码示例:

    String body = HttpRequest.post("https://localhost:8443/manager?action=create")
                  .body("session.id=9089beb2-576d-47e3-b040-86dbdc7f523e&name=aaaa&description=11")
                  .execute()
                  .body();
            System.out.println(body);
响应体 (创建失败):


    {
      "status":"success",
      "path":"manager?project=aaaa",
      "action":"redirect"
    }

三、删除一个任务项目

请求体:


代码示例:

    HttpRequest.get("https://localhost:8443/manager")
                  .body("session.id=bca1d75d-6bae-4163-a5b0-378a7d7b5a91&delete=true&project=test-delete-project")
                  .execute();

四、获取项目中的流

azkaban一个项目中可以创建多个流并且每个流中又含有多个依赖job,在此只能获取流

请求参数:


示例代码:

    String body = HttpRequest.get("https://localhost:8443/manager")
                  .body("session.id=6c96e7d8-4df5-470d-88fe-259392c09eea&ajax=fetchprojectflows&project=azkaban-test-project")
                  .execute()
                  .body();
            System.out.println(body);

响应体:


{
"project" : "test-azkaban",
"projectId" : 192,
"flows" : [ {
    "flowId" : "test"
}, {
    "flowId" : "test2"
} ]
}


五、从流中获取job

azkaban一个项目中可以创建多个流并且每个流中又含有多个依赖job,在此可以获取流以及所有jobs

请求体:


示例代码:

    String body = HttpRequest.get("https://localhost:8443/manager")
                  .body("session.id=bca1d75d-6bae-4163-a5b0-378a7d7b5a91&ajax=fetchflowgraph&project=texter-1-1&flow=test")
                  .execute()
                  .body();
响应体:


{
"project" : "azkaban-test-project",
"nodes" : [ {
    "id" : "test-final",
    "type" : "command",
    "in" : [ "test-job-3" ]
}, {
    "id" : "test-job-start",
    "type" : "java"
}, {
    "id" : "test-job-3",
    "type" : "java",
    "in" : [ "test-job-2" ]
}, {
    "id" : "test-job-2",
    "type" : "java",
    "in" : [ "test-job-start" ]
} ],
"flow" : "test",
"projectId" : 192
}


六、执行流

此api可对流进行执行,也对流中的单独的job进行触发

请求参数:




代码示例:

    String body = HttpRequest.get("https://localhost:8443/executor")
                  .body("session.id=189b956b-f39f-421e-9a95-e3117e7543c9&ajax=executeFlow&project=azkaban-test-project&flow=test")
                  .execute()
                  .body();
            System.out.println(body);
响应体:



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

七、取消流的执行

若未运行,则返回错误信息,成功则无返回

请求体:


代码示例:

    String body = HttpRequest.get("https://localhost:8443/executor")
                  .body("session.id=34ba08fd-5cfa-4b65-94c4-9117aee48dda&ajax=cancelFlow&execid=302")
                  .execute()
                  .body();
            System.out.println(body);

响应体(失败状态):
    {
      "error" : "Execution 302 of flow test isn't running."
    }

注意:
在开发者进行调用时api调用时,Azkaban管理员创建的project其他角色无法访问。

以上是提取了常用的api方法,若需更全的api使用可以查看官网 https://azkaban.github.io/azkaban/docs/latest/#ajax-api

作者:数据小二
来源:https://blog.csdn.net/Mirror_w/article/details/117225097

最新经典文章,欢迎关注公众号http://www.aboutyun.com/data/attachment/forum/201903/18/215536lzpn7n3u7m7u90vm.jpg

若无梦何远方 发表于 2021-6-23 15:00:47

可读性不强 不建议细看 粗略看一眼 后期用到时在查
页: [1]
查看完整版本: Azkaban 外部接口的使用与开发