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:

Corpo da solicitação para trabalhos em lote
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:

Corpo da resposta de um trabalho em lote enviado
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:

Corpo da resposta para listar detalhes do trabalho
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:

Corpo de resposta para obter o estado do trabalho 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:

Corpo da resposta para listar todos os trabalhos em lote enviados
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"
}