问题导读:
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
最新经典文章,欢迎关注公众号
|