本文介绍如何通过REST API管理云原生多模数据库 Lindorm计算引擎作业,包括创建、查看、终止Spark作业等操作。
前提条件
- 已开通计算引擎。 
- 已完成作业开发。如何开发,请参见JAR作业开发实践、Python作业开发实践或JDBC开发实践。 
- 已将作业上传至HDFS或OSS。 
通过curl命令创建作业
在计算引擎中创建一个Spark作业。
语法
POST /api/{version}/lindorm/jobs/{token}参数说明
| 参数类型 | 名称 | 类型 | 是否必填 | 示例值 | 说明 | 
| 连接参数 | endpoint | STRING | 是 | http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099 | |
| 路径参数 | version | STRING | 是 | v1 | 系统规定参数,默认值 | 
| token | STRING | 是 | bf198279-5d1f-4aca-97f7-d16eda2f**** | 提交Spark作业时用于进行计算资源鉴权的token。 | |
| 请求体参数 | owner | STRING | 是 | myuser | Spark作业的所有者。可包含数字、大写英文字符、小写英文字符、中划线(-)和下划线(_),长度不超过64个字符。 | 
| name | STRING | 否 | sparkPi | Spark作业的名称。可包含数字、大写英文字符、小写英文字符、中划线(-)和下划线(_),长度不超过64个字符。 | |
| username | STRING | 否 | root | 开启认证功能后用于用户认证的用户名。 | |
| password | STRING | 否 | password | 开启认证功能后用于用户认证的用户密码。 | |
| mainResourceKind | STRING | 是 | jar | Spark作业的执行文件的类型。 取值: | |
| mainResource | STRING | 是 | hdfs://root/spark-examples_2.12-ldspark-3.1.3-SNAPSHOT.jar | Spark作业的执行文件的路径。 | |
| mainArgs | LIST | 否 | [10] | Spark作业的执行参数。 | |
| mainClass | STRING | 否 | org.apache.spark.examples.SparkPi | Spark作业的执行的类名。 mainResourceKind为jar时需要指定。 | |
| conf | MAP | 否 | {"spark.kubernetes.container.image":"spark-repo-registry.cn-hangzhou.cr.aliyuncs.com/lindorm-compute/spark-py:3.2.1-ldspark-1.0.2"} | Spark作业的配置参数。 | 
请求体为JSON格式。
返回结果集说明
| 名称 | 类型 | 描述 | 
| jobId | STRING | 创建Spark作业的UUID。 | 
| token | STRING | Lindorm计算引擎用户令牌。 | 
示例
- 示例1:JAR作业。 - curl --location --request POST 'http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/bf198279-5d1f-4aca-97f7-d16eda2f****' --header 'Content-Type: application/json' --data '{ "owner":"myuser", "name":"sparkPi", "mainResourceKind": "jar", "mainResource":"hdfs://root/spark-examples_2.12-ldspark-3.1.3-SNAPSHOT.jar", "mainArgs":[10], "mainClass":"org.apache.spark.examples.SparkPi", "conf":{ "spark.kubernetes.container.image":"spark-repo-registry.cn-hangzhou.cr.aliyuncs.com/lindorm-compute/spark-py:3.2.1-ldspark-1.0.2" } }'- 返回结果: - {"jobId":"9e48be0b-2801-4441-ab85-c8b718e2****","token":"bf198279-5d1f-4aca-97f7-d16eda2f****"}
- 示例2:Python作业 - curl --location --request POST 'http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/bf198279-5d1f-4aca-97f7-d16eda2f****' --header 'Content-Type: application/json' --data '{ "owner":"myuser", "name":"pythonJob", "mainResourceKind":"python", "mainResource":"hdfs:///ldps-launcher.py", "mainArgs":[10], "conf":{ "spark.submit.pyFiles":"hdfs:///ldps-user-resource/your-project.zip" } }'- 返回结果: - {"jobId":"44c614c240ce4e6f980a86e9e6db****","token":"bf198279-5d1f-4aca-97f7-d16eda2f****"}
- 示例3:SQL作业。 - curl --location --request POST 'http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/bf198279-5d1f-4aca-97f7-d16eda2f****' --header 'Content-Type: application/json' --data '{ "owner":"root", "name":"sqljob", "mainResourceKind":"sql", "mainResource":"show databases;", "conf":{ "spark.dynamicAllocation.enabled":"false", "spark.executor.instances":"1" } }'- 返回结果: - {"jobId":"f71ff7f963f545d89a7a79d6ffa8****","token":"bf198279-5d1f-4aca-97f7-d16eda2f****"}
查看作业
查看作业的详情信息,如:作业名字、状态、配置等。
语法
GET /api/{version}/lindorm/jobs/{token}/{jobId}参数说明
| 参数类型 | 名称 | 类型 | 是否必填 | 示例值 | 说明 | 
| 连接参数 | endpoint | STRING | 是 | http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099 | |
| 路径参数 | version | STRING | 是 | v1 | 系统规定参数,默认值 | 
| token | STRING | 是 | bf198279-5d1f-4aca-97f7-d16eda2f**** | 提交Spark作业时用于进行计算资源鉴权的token。 | |
| jobId | STRING | 是 | 9e48be0b-2801-4441-ab85-c8b718e2**** | Spark作业的UUID。 | 
返回结果集说明
| 名称 | 类型 | 说明 | 
| jobId | STRING | JobServer在Spark作业提交时,自动生成的UUID。 | 
| name | STRING | Spark作业名称。 | 
| state | STRING | Spark作业状态。取值说明: 
 | 
| owner | STRING | Spark作业的所有者。 | 
| mainResourceKind | STRING | Spark作业的执行文件类型。 取值: | 
| mainResource | STRING | Spark作业的执行文件路径。 重要  当 mainResourceKind为 | 
| mainArgs | LIST OF STRING | Spark作业的执行参数。 | 
| mainClass | STRING | Spark作业的执行的类名。 | 
| conf | MAP OF STRING | Spark作业的配置参数。 | 
| extraInfo | MAP OF STRING | Spark作业的额外信息。 | 
| createTime | LONG | Spark作业的创建时间。 | 
| finishTime | LONG | Spark作业的结束时间。state为 | 
| webUiUrl | STRING | Spark作业的WebUI地址。 | 
| eName | STRING | Spark作业的最后一个错误的名称。 | 
| eValue | STRING | Spark作业的最后一个错误的内容。 | 
示例
curl --request GET 'http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/bf198279-5d1f-4aca-97f7-d16eda2f****/9e48be0b-2801-4441-ab85-c8b718e2****'返回结果:
{
  "jobId": "9e48be0b-2801-4441-ab85-c8b718e2****",
  "name": "SelectSQL",
  "state": "success",
  "owner": "test",
  "mainResourceKind": "sql",
  "mainResource": "oss://root/select.sql",
  "mainArgs": [],
  "mainClass": null,
  "conf": {
    "spark.kubernetes.container.image":"spark-repo-registry.cn-hangzhou.cr.aliyuncs.com/lindorm-compute/spark-py:3.2.1-ldspark-1.0.2"
  },
  "extraInfo":{
    "driverLogs.stdout":"hdfs:///ldspark/ldspark-logs/20de0c0d74984f9abbe5c013703aa8ee/__driver_logs__/stdout",
    "driverLogs.stderr":"hdfs:///ldspark/ldspark-logs/20de0c0d74984f9abbe5c013703aa8ee/__driver_logs__/stderr"
  },
  "createTime": 1644921672038,
  "finishTime": 1644921782540,
  "webUiUrl": "alb-xrfbl0guar69vc****.cn-shanghai.alb.aliyuncs.com/proxy/spark-0c075e4a045d491096f2f782e32*****",
  "eName": null,
  "eValue": null
}终止作业
终止正在运行的Spark作业。
语法
DELETE /api/{version}/lindorm/jobs/{token}/{jobId}参数说明
| 参数类型 | 名称 | 类型 | 是否必填 | 示例值 | 说明 | 
| 连接参数 | endpoint | STRING | 是 | http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099 | |
| 路径参数 | version | STRING | 是 | v1 | 系统规定参数,默认值 | 
| token | STRING | 是 | bf198279-5d1f-4aca-97f7-d16eda2f**** | 提交Spark作业时用于进行计算资源鉴权的token。 | |
| jobId | STRING | 是 | 9e48be0b-2801-4441-ab85-c8b718e2**** | Spark作业的UUID。 | 
示例
curl --request DELETE 'http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/bf198279-5d1f-4aca-97f7-d16eda2f****/9e48be0b-2801-4441-ab85-c8b718e2****'结果验证:
您可以通过查看作业的状态(state)是否为已终止(killed)来验证语句是否执行成功。具体操作,请参见查看作业。
查看作业提交日志
查看目标作业提交的日志信息,用于自助排查作业提交失败相关问题。
语法
GET /api/{version}/lindorm/jobs/{token}/{jobId}/log?from={from}&size={size}参数说明
| 参数类型 | 名称 | 类型 | 是否必填 | 示例值 | 说明 | 
| 连接参数 | endpoint | STRING | 是 | http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099 | |
| 路径参数 | version | STRING | 是 | v1 | 系统规定参数,默认值 | 
| token | STRING | 是 | bf198279-5d1f-4aca-97f7-d16eda2f**** | 提交Spark作业时用于进行计算资源鉴权的token。 | |
| jobId | STRING | 是 | 9e48be0b-2801-4441-ab85-c8b718e2**** | Spark作业的UUID。 | |
| 查询参数 | from | INT | 是 | 0 | 查询分页的起始位置。默认值为 | 
| size | INT | 是 | 50 | 查询分页的大小。默认值为 | 
返回结果集说明
| 名称 | 类型 | 说明 | 
| id | STRING | 日志所属作业的作业 ID。 | 
| from | STRING | 日志的起始行数,默认值  | 
| size | STRING | 返回的日志总行数。 | 
| log | ARRAY | 日志内容。值为一个字符串组成的数组,每一个元素都对应提交日志中的一行日志。 | 
示例
curl --request GET 'http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/bf198279-5d1f-4aca-97f7-d16eda2f****/9e48be0b-2801-4441-ab85-c8b718e2****/log?from=0&size=50'返回结果:
{
    "id": "da2da5c2e432402babf400900803****",
    "from": 0,
    "size": 50,
    "log": [
        "The engine(da2da5c2e432402babf4009008032b15) was launched successfully.",
        ...,
        "2024-01-01 00:00:00,000 Driver pod terminated successfully!"
    ]
}查看历史作业列表
获取已提交到计算引擎的作业信息,包括名字、状态、配置等。
语法
GET /api/{version}/lindorm/jobs/{token}?from={from}&size={size}&startTime={startTime}&endTime={endTime}参数说明
| 参数类型 | 名称 | 类型 | 是否必填 | 示例值 | 说明 | 
| 连接参数 | endpoint | STRING | 是 | http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099 | |
| 路径参数 | version | STRING | 是 | v1 | 系统规定参数,默认值 | 
| token | STRING | 是 | bf198279-5d1f-4aca-97f7-d16eda2f**** | Lindorm计算引擎用户令牌。 | |
| 查询参数 | from | INT | 是 | 0 | 数据起始位置。默认值为 | 
| size | INT | 是 | 50 | 查询分页的大小。默认值为 | |
| startTime | LONG | 否 | 1645782797672 | Spark作业列表查询的起始时间。 | |
| endTime | LONG | 否 | 1645782903713 | Spark作业列表查询的结束时间。 | 
返回结果集说明
| 名称 | 类型 | 说明 | 
| jobId | STRING | JobServer在Spark作业提交时,自动生成的UUID。 | 
| name | STRING | Spark作业名称。 | 
| state | STRING | Spark作业状态。取值说明: 
 | 
| owner | STRING | Spark作业的所有者。 | 
| mainResourceKind | STRING | Spark作业的执行文件类型。 取值: | 
| mainResource | STRING | Spark作业的执行文件路径。 重要  当 mainResourceKind为 | 
| mainArgs | LIST OF STRING | Spark作业的执行参数。 | 
| mainClass | STRING | Spark作业的执行的类名。 | 
| conf | MAP OF STRING | Spark作业的配置参数。 | 
| extraInfo | MAP OF STRING | Spark作业的额外信息。 | 
| createTime | LONG | Spark作业的创建时间。 | 
| finishTime | LONG | Spark作业的结束时间。state为 | 
| webUiUrl | STRING | Spark作业的WebUI地址。 | 
| eName | STRING | Spark作业的最后一个错误的名称。 | 
| eValue | STRING | Spark作业的最后一个错误的内容。 | 
示例
- 示例1:查看指定分页范围内的作业列表。 - curl --request GET 'http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/bf198279-5d1f-4aca-97f7-d16eda2f****?from=0&size=50'- 返回结果: - { "total":2, "overviews": [ { "jobId": "eec44231-bf13-4b43-8594-16933010****", "name": "sparkPi", "state": "success", "owner": "root", "mainResourceKind": "jar", "mainResource": "oss://root/spark-examples_2.12-ldspark-3.1.3-SNAPSHOT.jar", "mainArgs": [ "10" ], "mainClass": "org.apache.spark.examples.SparkPi", "conf": {}, "createTime": 1645782797672, "finishTime": 1645782903713, "webUiUrl": "http://alb-xrfbl0guar69vc****.cn-shanghai.alb.aliyuncs.com/proxy/spark-8f4d3d91c42a4a72abc456641170****", "eName": null, "eValue": null }, { "jobId": "fc0c0d27-d589-42f6-8186-3a6f0946****", "name": "SelectSQL", "state": "success", "owner": "test", "mainResourceKind": "sql", "mainResource": "oss://root/select.sql", "mainArgs": [], "mainClass": null, "conf": {}, "extraInfo":{ "driverLogs.stdout":"hdfs:///ldspark/ldspark-logs/20de0c0d74984f9abbe5c013703aa8ee/__driver_logs__/stdout", "driverLogs.stderr":"hdfs:///ldspark/ldspark-logs/20de0c0d74984f9abbe5c013703aa8ee/__driver_logs__/stderr" }, "createTime": 1644921672038, "finishTime": 1644921782540, "webUiUrl": "alb-xrfbl0guar69vc****.cn-shanghai.alb.aliyuncs.com/proxy/spark-0c075e4a045d491096f2f782e32*****", "eName": null, "eValue": null } ] }
- 示例2:获取指定时间范围内的作业列表。 - curl --request GET 'http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/bf198279-5d1f-4aca-97f7-d16eda2f****?jobName=computegroup1&startTime=1715596286971&endTime=1715667358400'- 返回结果: - {"total":1, "overviews": [ {"jobId":"b9a80bd230234666ad9e4901af92****", "name":"JDBC_SERVER_kyuubi_computegroup1", "state":"success", "owner":"test1", "mainResourceKind":"test1", "mainResource":"SparkSQLEngine", "mainArgs":[], "mainClass":null, "conf":{}, "extraInfo":{"resource.usage.current":"0","resource.usage.total":"145.9744"}, "createTime":1715651403742, "finishTime":null, "webUiUrl":"http://alb-qsj79bel0lg7e0****.cn-hangzhou.alb.aliyuncs.com/history/b9a80bd230234666ad9e4901af90****/jobs", "eName":null, "eValue":null } ] }
通过spark-submit创建作业
您可以下载Spark发布包,在bin路径下使用spark-submit命令创建作业。命令行语法如下:
语法
./spark-submit \
  --class <main-class> \
  --endpoint <sumbit-url> \
  --owner <owner-of-the-job> \
  --conf <key>=<value> \
  ... # other options
  <application> \
  [application-arguments]参数说明
| 名称 | 类型 | 是否必填 | 示例值 | 说明 | 
| class | STRING | 否 | SumArguments | Spark作业的执行的类名。仅在作业类型为JAR时需要指定。 | 
| endpoint | STRING | 是 | http://{实例id}-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/{实例token} | |
| owner | STRING | 是 | myuser | Spark作业的所有者。可包含数字、大写英文字符、小写英文字符、中划线(-)和下划线(_),长度不超过64个字符。 | 
| name | STRING | 否 | sparkPi | Spark作业的名称。可包含数字、大写英文字符、小写英文字符、中划线(-)和下划线(_),长度不超过64个字符。 | 
| username | STRING | 否 | root | 开启认证功能后用于用户认证的用户名。 | 
| password | STRING | 否 | password | 开启认证功能后用于用户认证的用户密码。 | 
| conf | MAP | 否 | spark.dynamicAllocation.maxExecutors=2 | Spark作业的配置参数。 | 
返回结果集说明
| 名称 | 类型 | 描述 | 
| jobId | STRING | 创建Spark作业的UUID。 | 
| token | STRING | Lindorm计算引擎用户令牌。 | 
示例
- 示例1:JAR作业 - 以JAR作业地址 - hdfs:///ldps-user-resource/ldps-scala_tutorial-1.0-SNAPSHOT.jar,程序相关参数- 1000 19为例。- ./spark-submit \ --class SumArguments \ --endpoint http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/3ff705a9-e059-476c-89f9-7c93c3f6**** \ --owner myuser \ --name sparkPi \ --conf spark.dynamicAllocation.maxExecutors=2 \ --conf spark.dynamicAllocation.minExecutors=1 \ hdfs:///ldps-user-resource/ldps-scala_tutorial-1.0-SNAPSHOT.jar \ 1000 19- 返回结果: - jobId: bed714d8248945aa93179c35e7fe**** token: bf198279-5d1f-4aca-97f7-d16eda2f****
- 示例2:Python 作业 - 以Python作业地址 - hdfs:///ldps-user-resource/ldps-examplePy.py,程序相关参数- 100 20为例。- ./spark-submit \ --endpoint http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/3ff705a9-e059-476c-89f9-7c93c3f6**** \ --owner myuser \ --conf spark.dynamicAllocation.maxExecutors=2 \ --conf spark.dynamicAllocation.minExecutors=1 \ hdfs:///ldps-user-resource/ldps-examplePy.py \ 100 20- 返回结果: - jobId: 2d3f3101f8b84e7f80321a128cc8**** token: bf198279-5d1f-4aca-97f7-d16eda2f****
- 示例3:SQL作业 - 以SQL语句 - SHOW DATABASES为例。- ./spark-submit \ --endpoint http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099/api/v1/lindorm/jobs/3ff705a9-e059-476c-89f9-7c93c3f6**** \ --owner myuser \ --conf spark.dynamicAllocation.maxExecutors=2 \ --conf spark.dynamicAllocation.minExecutors=1 \ "SHOW DATABASES"- 返回结果: - jobId: a63969e043d34fd284ee94f225f1**** token: bf198279-5d1f-4aca-97f7-d16eda2f****