Livy 批处理 API

Livy 批处理 API 是用于提交 Spark 批处理作业的 REST 接口。 此接口与开放式源代码 Livy REST 接口非常相似 (请参阅 Livy),但以下主题中描述的一些限制除外。

不支持用于从批处理作业检索日志行的开放式源代码 Livy 批处理日志 API。 日志将添加到作为服务实例 "instance_home" 引用的 IBM Cloud Object Storage 存储区。 稍后在 Beta 发行版期间,可以将日志转发到 IBM Log Analysis。

从此批处理获取日志行。

提交 Spark 批处理作业

要使用 Livy 批处理 API 提交 Spark 批处理作业,请输入:

curl \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "file": "/ cos://<application-bucket-name>.<cos-reference-name>/my_spark_application.py"
", \
"conf": { \
      "spark.hadoop.fs.cos.<cos-reference-name>.endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", \
      "spark.hadoop.fs.cos.<cos-reference-name>.access.key": "<access_key>", \
      "spark.hadoop.fs.cos.<cos-reference-name>.secret.key": "<secret_key>", \
      "spark.app.name": "MySparkApp" \
      } \
}' \
-X POST https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance-id>/livy/batches

使用 Livy 批处理 API 的已提交批处理作业的请求主体:

批处理工作的请求正文
名称 描述 Type
file 包含要执行的应用程序的文件 字符串 (必需)
className 应用程序 Java/Spark 主类 字符串
args 应用程序的命令行参数 字符串列表
jars 要在此会话中使用的 JAR 字符串列表
pyFiles 要在此会话中使用的 Python 文件 字符串列表
files 要在此会话中使用的文件 字符串列表
driverMemory 要用于驱动程序进程的内存量 字符串
driverCores 要用于驱动程序进程的核心数 英特
executorMemory 每个执行程序进程要使用的内存量 字符串
executorCores 要用于每个执行程序的核心数 英特
numExecutors 要为此会话启动的执行程序数 英特
name 会话名称 字符串
conf Spark 配置属性 键映射 = val

proxyUserarchivesqueue 属性在请求主体中不受支持,尽管它们在开放式源代码 Livy REST 接口中受支持。

使用 Livy 批处理 API 的已提交批处理作业的响应主体:

已提交批处理任务的响应正文
名称 描述 Type
id 批处理标识 英特
appId Spark 应用程序标识 字符串
appInfo 详细应用程序信息 键映射 = val
state 已提交批处理作业的状态 字符串

使用 Livy API 的示例

以下部分显示了如何使用 Livy 批处理 API。

使用 IBM Cloud Object Storage 中的作业文件提交批处理作业

要提交作业文件位于 IBM Cloud Object Storage 存储区中的批处理作业,请输入:

curl -i -X POST https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance-id>/livy/batches -H 'content-type: application/json' -H "Authorization: Bearer $TOKEN" -d @livypayload.json

有效内容 JSON 文件中 IBM Cloud Object Storage 实例的端点应该是公共端点。

样本有效内容:

{
  "file": "cos://<bucket>.mycos/wordcount.py",
  "className": "org.apache.spark.deploy.SparkSubmit",
  "args": ["/opt/ibm/spark/examples/src/main/resources/people.txt"],
  "conf": {
    "spark.hadoop.fs.cos.mycos.endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud",
    "spark.hadoop.fs.cos.mycos.access.key": "XXXX",
    "spark.hadoop.fs.cos.mycos.secret.key": "XXXX",
    "spark.app.name": "MySparkApp"
    }
}

样本响应:

{"id":13,"app_info":{},"state":"not_started"}

在本地磁盘上使用作业文件提交批处理作业

要提交作业文件位于本地磁盘上的批处理作业,请输入:

curl -i -X POST https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance-id>/livy/batches -H 'content-type: application/json' -H "Authorization: Bearer $TOKEN" -d @livypayload.json

样本有效内容:

{
  "file": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
  "args": ["/opt/ibm/spark/examples/src/main/resources/people.txt"],
  "className": "org.apache.spark.deploy.SparkSubmit"
}

样本响应:

{"id":15,"app_info":{},"state":"not_started"}

当 UI 可用于无服务器 Spark 实例时,响应中的 SparkUiUrl 属性将具有非空值。

列出作业的详细信息

要列出特定 Spark 批处理作业的作业详细信息,请输入:

curl \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance-id>/livy/batches/<batch-id>

用于列出作业详细信息的响应主体:

列出工作详细信息的响应正文
名称 描述 Type
id 批处理标识 英特
appId Spark 应用程序标识 字符串
appInfo 详细应用程序信息 键映射 = val
state 已提交批处理作业的状态 字符串

示例:

curl -i -X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/43f79a18-768c-44c9-b9c2-b19ec78771bf/livy/batches/14 -H 'content-type: application/json' -H "Authorization: Bearer $TOKEN"

样本响应:

{
 "id": 14,
 "appId": "app-20201213175030-0000",
 "appInfo": {
   "sparkUiUrl": null
 },
 "state": "success"
}

当 UI 可用于无服务器 Spark 实例时,响应中的 SparkUiUrl 属性将具有非空值。

获取作业状态

要获取已提交作业的状态,请输入:

curl \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance-id>/livy/batches/<batch-id>/state

用于获取批处理作业状态的响应主体:

获取批处理工作状态的响应体
名称 描述 Type
id 批处理标识 英特
state 已提交批处理作业的状态 字符串

例如:

curl -i -X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/43f79a18-768c-44c9-b9c2-b19ec78771bf/livy/batches/14/state -H 'content-type: application/json' -H "Authorization: Bearer $TOKEN"

样本响应:

{
	"id": 14,
	"state": "success"
}

列出所有已提交的作业

要列出所有已提交的 Spark 批处理作业,请输入:

curl \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance-id>/livy/batches

fromsize 属性在请求主体中不受支持,尽管它们在开放式源代码 Livy REST 接口中受支持。

用于列出所有已提交的 Spark 批处理作业的响应主体:

列出所有已提交批处理工作的响应体
名称 描述 Type
from 检索到的 Spark 批处理作业的开始索引 英特
total 已撤销的批处理作业总数 英特
sessions 会话中每个批处理作业的详细信息 列表

例如:

curl -i -X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/43f79a18-768c-44c9-b9c2-b19ec78771bf/livy/batches -H 'content-type: application/json' -H "Authorization: Bearer $TOKEN"

样本响应:

{
  "from": 0,
  "sessions": [{
    "id": 13,
		"appId": "app-20201203115111-0000",
		"appInfo": {
			"sparkUiUrl": null
		},
		"state": "success"
    },
    {
		"id": 14,
		"appId": "app-20201213175030-0000",
		"appInfo": {
			"sparkUiUrl": null
		},
		"state": "success"
	}],
	"total": 2
}

当 UI 可用于无服务器 Spark 实例时,响应中的 SparkUiUrl 属性将具有非空值。

删除作业

要删除已提交的批处理作业,请输入:

curl \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-X DELETE https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance-id>/livy/batches/<batch-id>

例如:

curl -i -X DELETE https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/43f79a18-768c-44c9-b9c2-b19ec78771bf/livy/batches/14 -H 'content-type: application/json' -H "Authorization: Bearer $TOKEN"

样本响应:

{
	"msg": "deleted"
}