Códigos de retorno, parámetros y sintaxis de API de trabajos Spark

Normalmente envía un trabajo Spark con un mandato cURL .

La sintaxis del mandato cURL del trabajo Spark es:

curl -k -X POST <V4_JOBS_API_ENDPOINT> -H "Authorization: ZenApiKey <TOKEN> -d @input.json

Sustituya las variables como se indica a continuación:

  • <V4_JOBS_API_ENDPOINT>: el punto final para la instancia que desea utilizar para enviar el trabajo Spark. Tenga en cuenta que pueden existir varias instancias de Analytics Engine Powered by Apache Spark en el servidor IBM Cloud Pak for Data y que cada instancia tiene su propio endpoint para enviar trabajos. Para obtener el punto final de los trabajos de Spark para su instancia aprovisionada, consulte Gestión de instancias de Analytics Engine powered by Apache Spark.
  • <TOKEN>: Para obtener la señal de acceso para la instancia de servicio, consulte Generación de una señal de autorización de API.
Nota:

El método POST vuelve después de la validación inicial de la aplicación. La solicitud de trabajo se procesa de forma asíncrona; en primer lugar, se crea el SparkContext y, a continuación, se ejecuta la aplicación. El estado actual de la aplicación se puede captar utilizando el método GET. Consulte Estado de trabajo Spark.

Un ejemplo de carga útil de entrada para un trabajo Python:

{
  "application_details": {
    "application": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
    "arguments": [
      "/opt/ibm/spark/examples/src/main/resources/people.txt"
    ],
    "conf": {
      "spark.app.name": "MyJob",
      "spark.eventLog.enabled": "true",
      "spark.driver.memory": "4G",
      "spark.driver.cores": 1,
      "spark.executor.memory": "4G",
      "spark.executor.cores": 1,
      "ae.spark.executor.count": 1
    },
    "env": {
      "SAMPLE_ENV_KEY": "SAMPLE_VALUE"
    }
  }
}

Un ejemplo de una carga útil de entrada para un trabajo R:

{
  "application_details": {
    "application": "/opt/ibm/spark/examples/src/main/r/dataframe.R",
    "conf": {
      "spark.app.name": "MyJob",
      "spark.eventLog.enabled": "true",
      "spark.driver.memory": "4G",
      "spark.driver.cores": 1,
      "spark.executor.memory": "4G",
      "spark.executor.cores": 1,
      "ae.spark.executor.count": 1
    },
    "env": {
      "SAMPLE_ENV_KEY": "SAMPLE_VALUE"
    }
  }
}

Un ejemplo de carga útil de entrada para un trabajo Scala:

{
  "application_details": {
    "application": "/opt/ibm/spark/examples/jars/spark-examples*.jar",
    "arguments": [
      "1"
    ],
    "class": "org.apache.spark.examples.SparkPi",
    "conf": {
      "spark.app.name": "MyJob",
      "spark.eventLog.enabled": "true",
      "spark.driver.memory": "4G",
      "spark.driver.cores": 1,
      "spark.executor.memory": "4G",
      "spark.executor.cores": 1,
      "ae.spark.executor.count": 1
    },
    "env": {
      "SAMPLE_ENV_KEY": "SAMPLE_VALUE"
    }
  }
}

La respuesta devuelta si el trabajo se ha sometido correctamente:

{
  "application_id": "<application_id>",
  "state": "ACCEPTED"
}

Sugerencia:

  • Guarde el valor devuelto de "application_id" para obtener el estado del trabajo o para detener el trabajo.
  • Guarde el valor devuelto de "spark_application_id" para supervisar y analizar la aplicación Spark en el servidor de historial de Spark.

API de trabajo Spark utilizando el tiempo de ejecución Spark personalizado

Un ejemplo de una carga útil de entrada para cambiar la versión de tiempo de ejecución de spark:

{
  "application_details": {
    "application": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
    "arguments": [
      "/opt/ibm/spark/examples/src/main/resources/people.txt"
    ],
    "runtime": {
      "spark_version": "3.4"
    }
  }
}

API Spark Job usando paquetes personalizados

Un ejemplo de carga útil de entrada para usar paquetes personalizados:

{
  "volumes": [
    {
      "name": "cpd-instance::myapp-vol",
      "mount_path": "/my-app"
    }
  ],
  "application_details": {
    "application": "/my-app/python-spark-pi.py",
    "packages":
      "org.apache.spark:spark-sql-kafka-0-10_2.12:3.4.0,org.apache.spark:spark-streaming-kafka-0-10_2.12:3.4.0",
    "conf": {
      "spark.app.name": "MyJob",
      "spark.eventLog.enabled": "true",
      "spark.driver.cores": 4,
      "spark.driver.memory": "8G",
      "spark.executor.memory": "2G",
      "spark.executor.cores": 4,
      "ae.spark.driver.log.level": "ERROR",
      "ae.spark.executor.log.level": "WARN"
    }
  }
}

Parámetros de API de trabajos Spark

Estos son los parámetros que puede utilizar en la API de trabajos Spark:

Tabla 1. Parámetros para la API de trabajos Spark
Nombre Subpropiedades Necesaria/Opcional Tipo Descripción
detalles_aplicación Obligatorio Objecto Especifica los detalles de la aplicación Spark
aplicación Obligatorio Serie Especifica el archivo de aplicación Spark, es decir, la vía de acceso al archivo de trabajo Python, R o scala
Argumentos Opcional Serie [] Especifica los argumentos de la aplicación
conf Opcional Objeto JSON clave-valor Especifica los valores de configuración que prevalecen sobre los valores predefinidos. Consulte la sección Parámetros de configuración de Spark predeterminados y variables de entorno para ver los parámetros de configuración predeterminados definidos por el servicio Spark. Consulte Configuraciones deApache Spark para ver los parámetros de configuración soportados por Apache Spark.
env Opcional Objeto JSON clave-valor Especifica las variables de entorno de Spark necesarias para el trabajo. Consulte la sección Parámetros de configuración de Spark predeterminados y variables de entorno para ver las variables de entorno predeterminadas definidas por el servicio Spark. Consulte Variables de entorno deApache Spark para ver las variables de entorno soportadas por Apache Spark.
class Opcional Serie Especifica el punto de entrada para tu aplicación Scala.
opciones-java-controlador Opcional Serie Especifica opciones Java adicionales para pasar al controlador
vía-acceso-biblioteca-controlador Opcional Serie Especifica las entradas de vía de acceso de biblioteca adicionales que se deben pasar al controlador
vía-acceso-clase-controlador Opcional Serie Especifique entradas de vía de acceso de clases adicionales para pasar al controlador. Tenga en cuenta que los archivos jar añadidos con --jars se incluyen automáticamente en la vía de acceso de clases.
JAR Opcional Serie Especifica una lista separada por comas de archivos jar que se deben incluir en las vías de acceso de clases de controlador y ejecutor
paquetes Opcional Serie Especifica una lista separada por comas de coordenadas de Maven de archivos jar que se deben incluir en las vías de acceso de clases de controlador y ejecutor. Busca en el repositorio local de Maven y, a continuación, en Maven central y, finalmente, en cualquier repositorio remoto adicional proporcionado por --repositories. El formato de las coordenadas debe ser groupId:artifactId:version.
exclusión-paquetes Opcional Serie Especifica una lista separada por comas de groupId:artifactId que se deben excluir al resolver las dependencias proporcionadas en --packages para evitar conflictos de dependencia
Repositorios Opcional Serie Especifica una lista separada por comas de repositorios remotos adicionales para buscar las coordenadas de Maven proporcionadas con --packages
Archivos Py Opcional Serie Especifica una lista separada por comas de archivos .zip, .eggo .py que se deben colocar en PYTHONPATH para aplicaciones Python
runtime.spark_version Opcional Serie Especifica la versión de tiempo de ejecución de Spark que se utilizará para el trabajo. IBM Cloud Pak for Data es compatible con Spark 3.4.
Volumes Opcional Lista de objetos Especifica los volúmenes que se van a montar distintos del volumen de instancia de Spark. Si se añaden volúmenes en la carga útil de la aplicación, la sección conf de la carga útil es obligatoria.
name Obligatorio Serie Especifica el nombre del volumen
vía_acceso_sub_origen Opcional Serie Especifica la vía de acceso de origen en el volumen que se va a montar. La vía de acceso de origen DEBE ser una vía de acceso relativa.
vía_acceso_montaje Obligatorio Serie Especifica la ubicación donde se va a montar el volumen. Tenga en cuenta que hay algunas vías de acceso de montaje prohibidas, que no podrá utilizar cuando intente especificarlas, ya que pueden comprometer el tiempo de ejecución.

Códigos de respuesta

La API de trabajos Spark devuelve los siguientes códigos de respuesta:

Códigos de respuesta de API de trabajo Spark
Código de retorno Significado del código de retorno Descripción
202 Trabajo aceptado El trabajo Spark se ha validado y aceptado correctamente para enviar la solicitud.
400 Solicitud errónea Este código se devuelve cuando la carga útil es incorrecta, por ejemplo, si el formato de la carga útil es incorrecto o faltan argumentos.
404 No se ha encontrado Esto se devuelve cuando se envía la aplicación Spark para el ID de instancia que no existe.
500 Error interno del servidor Esto se devuelve cuando el servidor no responde a lo que le está pidiendo que haga. Intente volver a someter su trabajo.
503 Servicio no disponible Este código se devuelve cuando no hay suficientes recursos.
Respuesta posible: Could not complete the request. Reason - FailedScheduling.

Parámetros de configuración de Spark predeterminados y variables de entorno

Las siguientes tablas muestran los parámetros de configuración de Spark y las variables de entorno que se utilizan habitualmente en Analytics Engine powered by Apache Spark y sus valores por defecto.

La tabla siguiente lista los parámetros de configuración de Spark y sus valores predeterminados:

Parámetros de configuración de Spark predeterminados
Configuración de Spark Valor predeterminado
spark.eventLog.enabled TRUE
spark.executor.extraClassPath /home/spark/space/assets/data_asset/*:/home/spark/user_home/dbdrivers/*:/cc-home/_global_/dbdrivers/*:/home/spark/shared/user-libs/spark2/*:/home/spark/user_home/dbdrivers/*:/home/spark/shared/user-libs/common/*:/home/spark/shared/user-libs/connectors/*:/opt/ibm/connectors/parquet-encryption/*:/opt/ibm/third-party/libs/spark2/*:/opt/ibm/third-party/libs/common/*:/opt/ibm/third-party/libs/connectors/*:/opt/ibm/spark/external-jars/*
spark.executer.memory 1 G
spark.executer.cores 1
(custom) ae.spark.executor.count 1
(custom) ae.spark.application.priority 1
spark.driver.extraClassPath /home/spark/space/assets/data_asset/*:/home/spark/user_home/dbdrivers/*:/cc-home/_global_/dbdrivers/*:/home/spark/shared/user-libs/spark2/*:/home/spark/user_home/dbdrivers/*:/home/spark/shared/user-libs/common/*:/home/spark/shared/user-libs/connectors/*:/opt/ibm/connectors/parquet-encryption/*:/opt/ibm/third-party/libs/spark2/*:/opt/ibm/third-party/libs/common/*:/opt/ibm/third-party/libs/connectors/*:/opt/ibm/spark/external-jars/*
spark.driver.memory 1024 M
spark.driver.cores 1
spark.local.dir /tmp/spark/scratch Consulte Parámetro de configuraciónspark.local.dir para obtener detalles.
spark.master.ui.port 8080
spark.worker.ui.port 8081
spark.ui.port 4040
spark.history.ui.port 18080
spark.ui.enabled TRUE
spark.ui.killEnabled FALSE
spark.eventLog.dir file:///home/spark/spark-events
spark.ui.reverseProxy TRUE
spark.ui.showConsoleProgress TRUE
spark.shuffle.service.port 7337
spark.r.command /opt/ibm/conda/R/bin/Rscript
spark.hadoop.fs.s3a.fast.upload TRUE
spark.hadoop.fs.s3a.multipart.size 33554432
spark.hadoop.fs.stocator.scheme.list cos
spark.hadoop.fs.stocator.cos.scheme cos
spark.hadoop.fs.stocator.glob.bracket.support TRUE
spark.hadoop.fs.stocator.cos.impl com.ibm.stocator.fs.cos.COSAPIClient
spark.hadoop.fs.cos.impl com.ibm.stocator.fs.ObjectStoreFileSystem
spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem
spark.authenticate FALSE
spark.network.crypto.enabled FALSE
spark.network.crypto.keyLength 256

La tabla siguiente lista las variables de entorno y sus valores predeterminados:

Variables de entorno Spark predeterminadas
Variable de entorno Valor predeterminado
SPARK_DIST_CLASSPATH /home/spark/space/assets/data_asset/*:/home/spark/user_home/dbdrivers/*:/cc-home/_global_/dbdrivers/*:/opt/ibm/connectors/idax/*:/opt/ibm/connectors/cloudant/*:/opt/ibm/connectors/db2/*:/opt/ibm/connectors/others-db-drivers/*:/opt/ibm/connectors/wdp-connector-driver/*:/opt/ibm/connectors/wdp-connector-jdbc-library/*:/opt/ibm/connectors/stocator/*:/opt/ibm/connectors/s3/*:/opt/ibm/image-libs/common/*:/opt/ibm/image-libs/spark2/*:/opt/ibm/third-party/libs/batch/*:/opt/ibm/spark/external-jars/*
SPARK_LOCAL_DIRS /tmp/spark/scratch
PUERTO_WEBUI_MASTER_SPARK_MASTER 8080
PUERTO_MAESTRO 7077
SPARK_WORKER_WEBUI_PORT 8081
CLASSPATH /home/spark/user_home/dbdrivers/*:/opt/ibm/connectors/idax/*:/opt/ibm/connectors/cloudant/*:/opt/ibm/connectors/db2/*:/opt/ibm/connectors/others-db-drivers/*:/opt/ibm/connectors/wdp-connector-driver/*:/opt/ibm/connectors/wdp-connector-jdbc-library/*:/opt/ibm/connectors/stocator/*:/opt/ibm/connectors/s3/*:/opt/ibm/image-libs/common/*:/opt/ibm/image-libs/spark2/*:/opt/ibm/third-party/libs/batch/*
LD_LIBRARY_PATH /opt/ibm/connectors/dsdriver/dsdriver/lib:/opt/ibm/connectors/others-db-drivers/oracle/lib:/opt/ibm/jdk/jre/lib/architecture/server:/opt/ibm/jdk/jre/lib/architecture/:/usr/local/lib:/lib64
RUNTIME_PYTHON_ENV python310
PYTHONPATH /home/spark/space/assets/data_asset:/home/spark/user_home/python-3:/cc-home/_global_/python-3:/home/spark/shared/user-libs/python:/home/spark/shared/conda/envs/python/lib/python/site-packages:/opt/ibm/conda/miniconda/lib/python/site-packages:/opt/ibm/third-party/libs/python3:/opt/ibm/image-libs/python3:/opt/ibm/image-libs/spark2/xskipper-core.jar:/opt/ibm/image-libs/spark2/spark-extensions.jar:/opt/ibm/image-libs/spark2/metaindexmanager.jar:/opt/ibm/image-libs/spark2/stmetaindexplugin.jar:/opt/ibm/spark/python:/opt/ibm/spark/python/lib/py4j-0.10.7-src.zip
R_LIBS_USER /home/spark/space/assets/data_asset:/home/spark/shared/user-libs/R:/opt/ibm/third-party/libs/R:/opt/ibm/conda/R/lib64/R/library/:/opt/ibm/spark/R/lib:/opt/ibm/image-libs/R

Tema padre: Envío de trabajos Spark