分享

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调研结果:
2021-06-22_224637.jpg

如下是对于Api简单Demo。

使用Hutool工具,直接进行https调用,pom
  1.     <dependency>
  2.         <groupId>cn.hutool</groupId>
  3.         <artifactId>hutool-all</artifactId>
  4.         <version>5.5.1</version>
  5.      </dependency>
复制代码

一、认证

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

请求体【请求方式:post】
2021-06-22_224720.jpg

代码示例:

  1.     String body = HttpRequest.post("https://localhost:8443")
  2.                     .body("action=login&username=azkaban&password=azkaban")
  3.                     .execute()
  4.                     .body();
  5.             System.out.println(body);
复制代码

响应体:
2021-06-22_224755.jpg

  1. {
  2.   "status" : "success",
  3.   "session.id" : "c001aba5-a90f-4daf-8f11-62330d034c0a"
  4. }
复制代码



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

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

请求体
2021-06-22_224832.jpg

代码示例:

  1.     String body = HttpRequest.post("https://localhost:8443/manager?action=create")
  2.                     .body("session.id=9089beb2-576d-47e3-b040-86dbdc7f523e&name=aaaa&description=11")
  3.                     .execute()
  4.                     .body();
  5.             System.out.println(body);
复制代码

响应体 (创建失败):
2021-06-22_224905.jpg

  1.     {
  2.       "status":"success",
  3.       "path":"manager?project=aaaa",
  4.       "action":"redirect"
  5.     }
复制代码


三、删除一个任务项目

请求体:
2021-06-22_224939.jpg

代码示例:

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


四、获取项目中的流

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

请求参数:
2021-06-22_225015.jpg

示例代码:

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


响应体:
2021-06-22_225052.jpg

  1. {
  2.   "project" : "test-azkaban",
  3.   "projectId" : 192,
  4.   "flows" : [ {
  5.     "flowId" : "test"
  6.   }, {
  7.     "flowId" : "test2"
  8.   } ]
  9. }
复制代码



五、从流中获取job

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

请求体:
2021-06-22_225146.jpg

示例代码:

  1.     String body = HttpRequest.get("https://localhost:8443/manager")
  2.                     .body("session.id=bca1d75d-6bae-4163-a5b0-378a7d7b5a91&ajax=fetchflowgraph&project=texter-1-1&flow=test")
  3.                     .execute()
  4.                     .body();
复制代码

响应体:
2021-06-22_225228.jpg

  1. {
  2.   "project" : "azkaban-test-project",
  3.   "nodes" : [ {
  4.     "id" : "test-final",
  5.     "type" : "command",
  6.     "in" : [ "test-job-3" ]
  7.   }, {
  8.     "id" : "test-job-start",
  9.     "type" : "java"
  10.   }, {
  11.     "id" : "test-job-3",
  12.     "type" : "java",
  13.     "in" : [ "test-job-2" ]
  14.   }, {
  15.     "id" : "test-job-2",
  16.     "type" : "java",
  17.     "in" : [ "test-job-start" ]
  18.   } ],
  19.   "flow" : "test",
  20.   "projectId" : 192
  21. }
复制代码



六、执行流

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

请求参数:
2021-06-22_225313.jpg
2021-06-22_225332.jpg
2021-06-22_225346.jpg

代码示例:

  1.     String body = HttpRequest.get("https://localhost:8443/executor")
  2.                     .body("session.id=189b956b-f39f-421e-9a95-e3117e7543c9&ajax=executeFlow&project=azkaban-test-project&flow=test")
  3.                     .execute()
  4.                     .body();
  5.             System.out.println(body);
复制代码

响应体:

2021-06-22_225441.jpg

  1.     {
  2.       message: "Execution submitted successfully with exec id 295",
  3.       project: "foo-demo",
  4.       flow: "test",
  5.       execid: 295
  6.     }
复制代码


七、取消流的执行


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

请求体:
2021-06-22_225515.jpg

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


响应体(失败状态):
  1.     {
  2.       "error" : "Execution 302 of flow test isn't running."
  3.     }
复制代码

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

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

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

最新经典文章,欢迎关注公众号


已有(1)人评论

跳转到指定楼层
若无梦何远方 发表于 2021-6-23 15:00:47
可读性不强 不建议细看 粗略看一眼 后期用到时在查
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条