通过REST API管理作业

本文介绍如何通过REST API管理云原生多模数据库 Lindorm计算引擎作业,包括创建、查看、终止Spark作业等操作。

前提条件

创建作业

在计算引擎中创建一个Spark作业。

语法

POST /api/{version}/lindorm/jobs/{token}

参数说明

参数类型

名称

类型

是否必填

示例值

说明

连接参数

endpoint

STRING

http://ld-bp1hn6yq0yb34****-proxy-ldps.lindorm.aliyuncs.com:10099

计算引擎JAR地址。如何获取,请参见查看计算引擎连接地址

路径参数

version

STRING

v1

系统规定参数,默认值v1

token

STRING

bf198279-5d1f-4aca-97f7-d16eda2f****

提交Spark作业时用于进行计算资源鉴权的token。如何获取,请参见查看计算引擎token

请求体参数

owner

STRING

myuser

Spark作业的所有者。可包含大写英文字符、小写英文字符,长度不超过64个字符。

name

STRING

sparkPi

Spark作业的名称。可包含大写英文字符、小写英文字符,长度不超过64个字符。

username

STRING

root

开启认证功能后用于用户认证的用户名。

password

STRING

password

开启认证功能后用于用户认证的用户密码。

mainResourceKind

STRING

jar

Spark作业的执行文件的类型。

取值:sqlpythonjar

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

计算引擎JAR地址。如何获取,请参见查看计算引擎连接地址

路径参数

version

STRING

v1

系统规定参数,默认值v1

token

STRING

bf198279-5d1f-4aca-97f7-d16eda2f****

提交Spark作业时用于进行计算资源鉴权的token。如何获取,请参见查看计算引擎token

jobId

STRING

9e48be0b-2801-4441-ab85-c8b718e2****

Spark作业的UUID。

返回结果集说明

名称

类型

说明

jobId​

STRING

JobServer在Spark作业提交时,自动生成的UUID。

name

STRING

Spark作业名称。

state

STRING

Spark作业状态。取值说明:

  • not_started:作业刚提交,未运行。

  • starting:作业正在启动。

  • running:作业正在运行。

  • killing:正在终止作业。

  • failed: 作业运行失败。

  • killed:作业已被终止。

  • success:作业成功完成。

​owner

STRING

Spark作业的所有者。

mainResourceKind

STRING

Spark作业的执行文件类型。

取值:sqlpythonjar

mainResource​

STRING

Spark作业的执行文件路径。

重要

mainResourceKindsql类型时,mainResource中填写需要执行的SQL语句。

mainArgs​

LIST OF STRING

Spark作业的执行参数。

mainClass

STRING

Spark作业的执行的类名。

conf

MAP OF STRING

Spark作业的配置参数。

extraInfo

MAP OF STRING

Spark作业的额外信息。

createTime​

LONG

Spark作业的创建时间。

finishTime​

LONG

Spark作业的结束时间。statefailedkilledsuccess时有效。

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

计算引擎JAR地址。如何获取,请参见查看计算引擎连接地址

路径参数

version

STRING

v1

系统规定参数,默认值v1

token

STRING

bf198279-5d1f-4aca-97f7-d16eda2f****

提交Spark作业时用于进行计算资源鉴权的token。如何获取,请参见查看计算引擎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/bf1982795d1f4aca97f7d16eda2f****/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

计算引擎JAR地址。如何获取,请参见查看计算引擎连接地址

路径参数

version

STRING

v1

系统规定参数,默认值v1

token

STRING

bf198279-5d1f-4aca-97f7-d16eda2f****

提交Spark作业时用于进行计算资源鉴权的token。如何获取,请参见查看计算引擎token

jobId

STRING

9e48be0b-2801-4441-ab85-c8b718e2****

Spark作业的UUID。

查询参数

from

INT

0

查询分页的起始位置。默认值为0

size

INT

50

查询分页的大小。默认值为500

返回结果集说明

名称

类型

说明

id​

STRING

日志所属作业的作业 ID。

from

STRING

日志的起始行数,默认值 0

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

计算引擎JAR地址。如何获取,请参见查看计算引擎连接地址

路径参数

version

STRING

v1

系统规定参数,默认值v1

token

STRING

bf198279-5d1f-4aca-97f7-d16eda2f****

Lindorm计算引擎用户令牌。

查询参数

from

INT

0

数据起始位置。默认值为0

size

INT

50

查询分页的大小。默认值为100

startTime

LONG

1645782797672

Spark作业列表查询的起始时间。

endTime

LONG

1645782903713

Spark作业列表查询的结束时间。

返回结果集说明

名称

类型

说明

jobId​

STRING

JobServer在Spark作业提交时,自动生成的UUID。

name

STRING

Spark作业名称。

state

STRING

Spark作业状态。取值说明:

  • not_started:作业刚提交,未运行。

  • starting:作业正在启动。

  • running:作业正在运行。

  • killing:正在终止作业。

  • failed: 作业运行失败。

  • killed:作业已被终止。

  • success:作业成功完成。

​owner

STRING

Spark作业的所有者。

mainResourceKind

STRING

Spark作业的执行文件类型。

取值:sqlpythonjar

mainResource​

STRING

Spark作业的执行文件路径。

重要

mainResourceKindsql类型时,mainResource中填写需要执行的SQL语句。

mainArgs​

LIST OF STRING

Spark作业的执行参数。

mainClass

STRING

Spark作业的执行的类名。

conf

MAP OF STRING

Spark作业的配置参数。

extraInfo

MAP OF STRING

Spark作业的额外信息。

createTime​

LONG

Spark作业的创建时间。

finishTime​

LONG

Spark作业的结束时间。statefailedkilledsuccess时有效。

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
        }
      ]
    }