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 |
proxyUser,archives 和 queue 属性在请求主体中不受支持,尽管它们在开放式源代码 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
from 和 size 属性在请求主体中不受支持,尽管它们在开放式源代码 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"
}