GET /spark/job
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
orderByColumn | query | string | 否 | none |
isAsc | query | string | 否 | none |
beginTime | query | string | 否 | none |
endTime | query | string | 否 | none |
filedOverride.key | query | any | 否 | none |
pageNum | query | integer | 否 | none |
pageSize | query | integer | 否 | none |
jobName | query | string | 否 | none |
jobType | query | string | 否 | none |
jobStatus | query | integer | 否 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
POST /spark/job/sql/batch
Body 请求参数
{
"driverCores": 0,
"driverMemory": 0,
"numExecutors": 0,
"executorCores": 0,
"executorMemory": 0,
"queue": "string",
"namespace": "string",
"jobName": "string",
"jobType": "string",
"deployMode": "string",
"sqlContent": "string",
"otherSparkConf": "string",
"envId": 0,
"remark": "string"
}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
body | body | AddSparkSqlJobCommand | 否 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
PUT /spark/job/sql/batch
Body 请求参数
{
"driverCores": 0,
"driverMemory": 0,
"numExecutors": 0,
"executorCores": 0,
"executorMemory": 0,
"queue": "string",
"namespace": "string",
"jobName": "string",
"jobType": "string",
"deployMode": "string",
"sqlContent": "string",
"otherSparkConf": "string",
"envId": 0,
"remark": "string",
"jobId": 0
}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
body | body | UpdateSparkSqlJobCommand | 否 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
POST /spark/job/jar
Body 请求参数
{
"driverCores": 0,
"driverMemory": 0,
"numExecutors": 0,
"executorCores": 0,
"executorMemory": 0,
"queue": "string",
"namespace": "string",
"jobName": "string",
"jobType": "string",
"deployMode": "string",
"mainJarPath": "string",
"mainClassName": "string",
"mainArgs": "string",
"otherSparkConf": "string",
"envId": 0,
"remark": "string"
}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
body | body | AddSparkJarJobCommand | 否 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
PUT /spark/job/jar
Body 请求参数
{
"driverCores": 0,
"driverMemory": 0,
"numExecutors": 0,
"executorCores": 0,
"executorMemory": 0,
"queue": "string",
"namespace": "string",
"jobName": "string",
"jobType": "string",
"deployMode": "string",
"mainJarPath": "string",
"mainClassName": "string",
"mainArgs": "string",
"otherSparkConf": "string",
"envId": 0,
"remark": "string",
"jobId": 0
}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
body | body | UpdateSparkJarJobCommand | 否 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
GET /spark/job/{jobId}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
jobId | path | integer | 是 | none |
返回示例
{
"code": 0,
"msg": "",
"data": {
"creatorId": 0,
"createTime": "",
"updaterId": 0,
"updateTime": "",
"deleted": false,
"jobId": 0,
"jobName": "",
"appId": "",
"jobType": "",
"deployMode": "",
"driverCores": 0,
"driverMemory": 0,
"numExecutors": 0,
"executorCores": 0,
"executorMemory": 0,
"otherSparkConf": "",
"mainJarPath": 0,
"mainClassName": "",
"mainArgs": "",
"sqlContent": "",
"queue": "",
"namespace": "",
"envId": 0,
"jobStatus": "",
"remark": "",
"scheduleStatus": false,
"cronExpression": ""
}
}
DELETE /spark/job/{jobId}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
jobId | path | integer | 是 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
GET /spark/job/start/{jobId}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
jobId | path | integer | 是 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
GET /spark/job/stop/{jobId}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
jobId | path | integer | 是 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
GET /spark/job/online/{jobId}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
jobId | path | integer | 是 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
GET /spark/job/offline/{jobId}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
jobId | path | integer | 是 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
GET /spark/job/instance/list/paging
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
orderByColumn | query | string | 否 | none |
isAsc | query | string | 否 | none |
beginTime | query | string | 否 | none |
endTime | query | string | 否 | none |
filedOverride.key | query | any | 否 | none |
pageNum | query | integer | 否 | none |
pageSize | query | integer | 否 | none |
jobName | query | string | 否 | none |
jobType | query | string | 否 | none |
jobStatus | query | integer | 否 | none |
返回示例
{
"code": 0,
"msg": "",
"data": null
}
GET /spark/job/instance/{instanceId}
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
instanceId | path | integer | 是 | none |
返回示例
{
"code": 0,
"msg": "",
"data": {
"creatorId": 0,
"createTime": "",
"updaterId": 0,
"updateTime": "",
"deleted": false,
"instanceId": 0,
"jobId": 0,
"deployMode": "",
"instanceName": "",
"applicationId": "",
"sparkJobId": "",
"jobScript": "",
"submitTime": "",
"finishedTime": "",
"status": "",
"jobName": "",
"jobType": ""
}
}
① 前端为vue项目
② js、css和vue文件分开
jobName: 任务名称输入框
jobType:任务类型下拉框,可选值有:BATCH_SQL, JAR
jobStatus:任务状态下拉框,可选值有:1 提交成功 ,2 运行中,3 成功,4 失败
新建任务:点击新建任务按钮,显示为任务类型下拉框,可选值为:BATCH_SQL,JAR。
点击不同的任务类型进入不同的新建页面
jobName:任务名称
jobType:任务类型
deployMode:部署模式
jobStatus:任务状态
remark:任务说明
appId:应用ID
create_time:创建时间
编辑:进入编辑页面
删除:删除任务
详情:进入详情页面
启动:启动任务
恢复:恢复任务
停止:停止任务
暂停:暂停任务
① header
使用默认header,不用管
② body
jobName: 任务名称输入框
deployMode:部署模式选择框,可选值:LOCAL, STANDALONE_CLIENT, STANDALONE_CLUSTER, YARN_CLIENT, YARN_CLUSTER, K8S_CLIENT, K8S_CLUSTER
driverCores: driver核心数,整数输入框
driverMemory:driver内存,输入框
numExecutors:executor个数,整数输入框
executorCores:每个executor的核心数,整数输入框
executorMemory:每个executor的内存,输入框
otherSparkConf:其他spark配置
sqlContent:spark sql脚本,请使用monaco-editor
queue:yarn队列
namespace:命名空间
envId:环境,下拉框选择
remark:任务说明
③ footer
提交:点击提交按钮,保存任务配置
取消:点击取消按钮,返回列表页
① header
使用默认header,不用管
② body
jobName: 任务名称输入框
deployMode:部署模式选择框,可选值:LOCAL, STANDALONE_CLIENT, STANDALONE_CLUSTER, YARN_CLIENT, YARN_CLUSTER, K8S_CLIENT, K8S_CLUSTER
driverCores: driver核心数,整数输入框
driverMemory:driver内存,输入框
numExecutors:executor个数,整数输入框
executorCores:每个executor的核心数,整数输入框
executorMemory:每个executor的内存,输入框
otherSparkConf:其他spark配置
sqlContent:spark sql脚本,请使用monaco-editor
queue:yarn队列
namespace:命名空间
envId:环境,下拉框选择
remark:任务说明
mainJarPath:主类路径,下拉框
mainClassName:主类名,输入框
mainArgs:主类参数
③ footer
提交:点击提交按钮,保存任务配置
取消:点击取消按钮,返回列表页
index.js定义了后端请求的接口
一、技术栈确认: Vue 3.2.31
- 是否使用 TypeScript?否
- 状态管理方案:Vuex
二、业务逻辑确认:
- 任务状态的具体枚举值和展示方式 任务状态:SUBMITTED(已提交), RUNNING(运行中), FINISHED(结束), FAILED(失败), KILLED(主动杀掉), CREATED(未运行)
- 各种操作按钮的权限控制要求 暂不考虑
- 是否需要支持批量操作 支持
- 定时任务相关的配置界面要求 最好使用开源的crontab表达式组件
三、组件复用相关:
- 是否可以复用 Flink 模块中的一些通用组件 可以,如果使用了,请将其抽象出来
- 是否需要抽象出通用的表单组件 可以
- monaco-editor 的配置是否可以复用现有的 是的
四、项目规范:
-
代码风格规范 参考flink任务开发
-
目录结构规范 参考flink任务开发