WebSocket
Linkis提供了WebSocket的接入方式,前端只需要按照Linkis的WebSocket规范就可以实时和Linkis进行交互,不需要通过Restful进行轮询。
1 Linkis接口规范
Linkis在前后端进行交互的时候,定义了一套自己的接口规范。
如果您对接口规范感兴趣,请点击这里查看接口规范
2 WebSocket接口汇总
我们提供以下几个接口,方便用户快速提交执行Job,获取执行结果。
- 建立WebSocket连接
- 提交执行
- 服务端主动推回状态、日志和进度
3 接口详解
3.1 建立连接
此接口是为了和Linkis建立一个WebSocket连接。
/api/rest_j/entrance/connect- 请求方式 GET
- 响应状态码 101
3.2 提交执行
请求执行任务是将用户的作业提交到Linkis进行执行的接口
- 接口
/api/rest_j/entrance/execute - 提交方式
POST - 请求JSON示例
1. {
2. "method":"/api/rest_j/v1/entrance/execute",
3. "data":{
4. "params": {
5. "variable":{
6. "k1":"v1"
7. },
8. "configuration":{
9. "special":{
10. "k2":"v2"
11. },
12. "runtime":{
13. "k3":"v3"
14. },
15. "startup":{
16. "k4":"v4"
17. }
18. }
19. },
20. "executeApplicationName":"spark",
21. "executionCode":"show tables",
22. "runType":"sql",
23. "source":{
24. "scriptPath": "/home/Linkis/Linkis.sql"
25. },
26. "websocketTag":"37fcbd8b762d465a0c870684a0261c6e"
27. }
28. }
- 请求体data中的参数描述如下
| 参数名 | 参数定义 | 类型 | 备注 |
|---|---|---|---|
| executeApplicationName | 用户所期望使用的引擎服务,如Spark、hive等 | String | 不可为空 |
| requestApplicationName | 发起请求的系统名 | String | 可以为空 |
| params | 用户指定的运行服务程序的参数 | Map | 必填,里面的值可以为空 |
| executionCode | 用户提交的执行代码 | String | 不可为空 |
| runType | 当用户执行如spark服务时,可以选择python、R、SQL等runType | String | 不可为空 |
| scriptPath | 用户提交代码脚本的存放路径 | String | 如果是IDE的话,与executionCode不能同时为空 |
- 返回示例
1. {
2. "method": "/api/rest_j/v1/entrance/execute",
3. "status": 0,
4. "message": "请求执行成功",
5. "data": {
6. "execID": "030418IDEhivebdpdwc010004:10087IDE_johnnwang_21",
7. "taskID": "123"
8. }
9. }
- execID是用户任务提交到UJES之后,为该任务生成的唯一标识的执行ID,为String类型,这个ID只在任务运行时有用,类似PID的概念。ExecID的设计为(requestApplicationName长度)(executeAppName长度1)(Instance长度2)${requestApplicationName}${executeApplicationName}${entranceInstance ip+port}${requestApplicationName}${umUser}${index}
- taskID 是表示用户提交task的唯一ID,这个ID由数据库自增生成,为Long 类型
3.3 任务状态、日志、进度主动推送
提交执行之后,服务器会主动推送任务的状态、日志、进度等信息,您也可以用WebSocket方式去主动请求状态、日志、进度。
服务器主动推送的内容如下:
- 日志
1. {
2. "method": "/api/rest_j/v1/entrance/${execID}/log",
3. "status": 0,
4. "message": "返回日志信息",
5. "data": {
6. "execID": "${execID}",
7. "log": ["error日志","warn日志","info日志", "all日志"],
8. "taskID":28594,
9. "fromLine": 56
10. },
11. "websocketTag":"37fcbd8b762d465a0c870684a0261c6e"
12. }
- 状态
1. {
2. "method": "/api/rest_j/v1/entrance/${execID}/status",
3. "status": 0,
4. "message": "返回状态信息",
5. "data": {
6. "execID": "${execID}",
7. "taskID":28594,
8. "status": "Running",
9. },
10. "websocketTag":"37fcbd8b762d465a0c870684a0261c6e"
11. }
- 进度
1. {
2. "method": "/api/rest_j/v1/entrance/${execID}/log",
3. "status": 0,
4. "message": "返回进度信息",
5. "data": {
6. "execID": "${execID}",
7. "taskID":28594,
8. "progress": 0.2,
9. "progressInfo": [
10. {
11. "id": "job-1",
12. "succeedTasks": 2,
13. "failedTasks": 0,
14. "runningTasks": 5,
15. "totalTasks": 10
16. },
17. {
18. "id": "job-2",
19. "succeedTasks": 5,
20. "failedTasks": 0,
21. "runningTasks": 5,
22. "totalTasks": 10
23. }
24. ]
25. },
26. "websocketTag":"37fcbd8b762d465a0c870684a0261c6e"
27. }
