APIs de lote Livy
A API de lotes Livy é uma interface REST para envio de tarefas em lote do Spark. Essa interface é muito semelhante à interface REST Livy de software livre (consulte Livy), exceto para algumas limitações que estão descritas no tópico a seguir.
A API de log de lotes Livy de software livre para recuperar linhas de log de uma tarefa em lote não é suportada. Os logs são incluídos no depósito IBM Cloud Object Storage que foi referenciado como a instância de serviço "instance_home".
Futuramente em uma liberação beta, os logs poderão ser encaminhados para IBM Log Analysis.
Obtém as linhas de log deste lote.
Enviando tarefas em lote do Spark
Para enviar uma tarefa em lote do Spark usando a API de lotes Livy, digite:
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
Corpo da solicitação para uma tarefa em lote enviada usando a API de lotes Livy:
| Nome | Descrição | Tipo |
|---|---|---|
file |
Arquivo contendo o aplicativo para executar | sequência (obrigatório) |
className |
Classe Java/Spark principal do aplicativo | sequência |
args |
Argumentos da linha de comando para o aplicativo | lista de sequência |
jars |
jars a serem usados nesta sessão | lista de sequência |
pyFiles |
Arquivos Python a serem usados nesta sessão | lista de sequência |
files |
arquivos a serem usados nesta sessão | lista de sequência |
driverMemory |
Quantidade de memória a ser usada para o processo do driver | sequência |
driverCores |
Número de núcleos a ser usado para o processo do driver | int |
executorMemory |
Quantidade de memória a ser usada para o processo do executor | sequência |
executorCores |
Número de núcleos a ser usado para cada executor | int |
numExecutors |
Número de executores para ativar para esta sessão | int |
name |
O nome desta sessão | sequência |
conf |
Propriedades de configuração do Spark | mapa de key=val |
As propriedades proxyUser, archives e queue não são suportadas no corpo da solicitação apesar de serem suportadas na interface REST do Livy de software livre.
Corpo de resposta de uma tarefa em lote enviada usando a API de lotes Livy:
| Nome | Descrição | Tipo |
|---|---|---|
id |
O ID do lote | int |
appId |
O ID do aplicativo Spark | sequência |
appInfo |
Informações detalhadas do aplicativo | mapa de key=val |
state |
Estado da tarefa em lote enviada | sequência |
Exemplos usando a API de Livy
As seções a seguir mostram como usar as APIs de lotes Livy.
Envie uma tarefa em lote com arquivo de tarefas em IBM Cloud Object Storage
Para enviar uma tarefa em lote na qual o arquivo de tarefa está localizado em um depósito IBM Cloud Object Storage, insira:
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
O terminal para a sua instância IBM Cloud Object Storage no arquivo JSON de carga útil deve ser o terminal público.
Carga útil de amostra:
{
"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"
}
}
Resposta de amostra:
{"id":13,"app_info":{},"state":"not_started"}
Enviar tarefa em lote com arquivo de tarefa no disco local
Para enviar uma tarefa em lote na qual o arquivo de tarefa está localizado em um disco local, insira:
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
Carga útil de amostra:
{
"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"
}
Resposta de amostra:
{"id":15,"app_info":{},"state":"not_started"}
A propriedade SparkUiUrl na resposta terá um valor não nulo quando a IU estiver disponível para a instância serverless Spark.
Liste os detalhes de uma tarefa
Para listar os detalhes da tarefa para uma determinada tarefa em lote do Spark, insira:
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>
O corpo de resposta para listar os detalhes da tarefa:
| Nome | Descrição | Tipo |
|---|---|---|
id |
O ID do lote | int |
appId |
O ID do aplicativo Spark | sequência |
appInfo |
Informações detalhadas do aplicativo | mapa de key=val |
state |
Estado da tarefa em lote enviada | sequência |
Um exemplo:
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"
Resposta de amostra:
{
"id": 14,
"appId": "app-20201213175030-0000",
"appInfo": {
"sparkUiUrl": null
},
"state": "success"
}
A propriedade SparkUiUrl na resposta terá um valor não nulo quando a IU estiver disponível para a instância serverless Spark.
Obter estado da tarefa
Para obter o estado da tarefa enviada, insira:
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
O corpo de resposta para obter o estado da tarefa em lote:
| Nome | Descrição | Tipo |
|---|---|---|
id |
O ID do lote | int |
state |
Estado da tarefa em lote enviada | sequência |
Por exemplo:
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"
Resposta de amostra:
{
"id": 14,
"state": "success"
}
Listar todas as tarefas enviadas
Para listar todas as tarefas em lote do Spark enviadas, insira:
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
As propriedades from e size não são suportadas no corpo da solicitação apesar de serem suportadas na interface REST do Livy de software livre.
O corpo de resposta para listagem de todas tarefas em lote Spark enviadas:
| Nome | Descrição | Tipo |
|---|---|---|
from |
O índice de início das tarefas em lote do Spark que são recuperadas | int |
total |
O número total de tarefas em lote que são retificadas | int |
sessions |
Os detalhes para cada tarefa em lote em uma sessão | lista |
Por exemplo:
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"
Resposta de amostra:
{
"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
}
A propriedade SparkUiUrl na resposta terá um valor não nulo quando a IU estiver disponível para a instância serverless Spark.
Exclua uma tarefa
Para excluir uma tarefa em lote enviada, insira:
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>
Por exemplo:
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"
Resposta de amostra:
{
"msg": "deleted"
}