Syntaxe d'API, paramètres et codes retour de travaux Spark

Vous soumettez généralement une tâche Spark à l'aide d'une cURL commande.

La syntaxe de la cURL commande Spark job est la suivante :

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

Remplacez les variables comme suit :

  • <V4_JOBS_API_ENDPOINT>: Point de terminaison de l'instance que vous souhaitez utiliser pour soumettre votre tâche Spark. Notez que plusieurs Analytics Engine Powered by Apache Spark instances peuvent exister sur le IBM Cloud Pak for Data serveur et que chaque instance dispose de son propre point de terminaison pour soumettre des tâches. Pour obtenir le point de terminaison des tâches Spark pour votre instance provisionnée, consultez la section Gestion Analytics Engine powered by Apache Spark des instances.
  • <TOKEN>: Pour obtenir le jeton d'accès pour votre instance de service, consultez la section Génération d'un jeton d'autorisation API.
Remarque :

La méthode POST renvoie après la validation initiale de la demande. La demande de travail est traitée de manière asynchrone; d'abord, le SparkContext est créé, puis l'application est exécutée. Le statut actuel de la demande peut être récupéré à l'aide de la méthode GET. Consulter l'état des tâches Spark.

Exemple de charge d'entrée pour un travail 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"
    }
  }
}

Exemple de charge utile d'entrée pour une tâche 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"
    }
  }
}

Exemple de charge d'entrée pour un travail 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"
    }
  }
}

Réponse renvoyée si votre travail a été soumis correctement :

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

Astuce :

  • Enregistrez la valeur renvoyée par « application_id » pour obtenir le statut de la tâche ou pour l'arrêter.
  • Enregistrez la valeur renvoyée de « spark_application_id » pour surveiller et analyser l'application Spark sur le serveur d'historique Spark.

API Spark Job utilisant un runtime Spark personnalisé

Exemple de charge utile d'entrée pour modifier la version d'exécution 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 à l'aide de packages personnalisés

Exemple de charge utile d'entrée pour l'utilisation de paquets personnalisés :

{
  "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"
    }
  }
}

Paramètres d'API de travaux Spark

Voici les paramètres que vous pouvez utiliser dans l'API de travaux Spark :

Tableau 1. Paramètres pour l'API Spark Jobs
Nom Sous-propriétés Obligatoire / Facultatif Type Description
détails_de_l'application Requis Objet Spécifie les détails de l'application Spark
application Requis Chaîne Spécifie le fichier d'application Spark, c'est-à-dire le chemin d'accès au fichier de Python tâche, R ou scala
Arguments Optionnel Chaîne[] Spécifie les arguments de l'application
conf Optionnel Objet JSON clé-valeur Indique les valeurs de configuration Spark qui remplacent les valeurs prédéfinies. Consultez la section Paramètres de configuration Spark par défaut et variables d'environnement pour connaître les paramètres de configuration par défaut définis par le service Spark. Voir Apache Spark configurations pour les paramètres de configuration pris en charge par Apache Spark.
Env Optionnel Objet JSON clé-valeur Spécifie les variables d'environnement Spark requises pour le travail. Consultez la section Paramètres de configuration Spark par défaut et variables d'environnement pour connaître les variables d'environnement par défaut définies par le service Spark. Consultez les variables Apache Spark d'environnement pour connaître les variables d'environnement prises en charge par Apache Spark.
class Optionnel Chaîne Spécifie le point d'entrée de votre Scala application.
options-du-pilote-java Optionnel Chaîne Spécifie les options Java supplémentaires à transmettre au pilote
chemin-bibliothèque-pilote Optionnel Chaîne Spécifie les entrées supplémentaires du chemin d'accès à la bibliothèque à transmettre au pilote
chemin-classe-pilote Optionnel Chaîne Entrées de chemin de classe supplémentaire à transmettre au pilote. Notez que les fichiers jar ajoutés avec --jars sont automatiquement inclus dans le classpath.
Fichiers JAR Optionnel Chaîne Spécifie une liste séparée par des virgules des fichiers jar à inclure dans les chemins de classe du pilote et de l'exécuteur
packs Optionnel Chaîne Spécifie une liste séparée par des virgules des coordonnées Maven des fichiers jar à inclure dans les chemins de classe du pilote et de l'exécuteur. Recherche dans le référentiel Maven local, puis dans Maven central et enfin dans tous les référentiels distants supplémentaires fournis par --repositories. Le format des coordonnées doit être groupId:artifactId:version.
exclure-paquets Optionnel Chaîne Spécifie une liste séparée par des virgules d'éléments groupId:artifactId à exclure lors de la résolution des dépendances fournies dans --packages afin d'éviter les conflits de dépendances
Référentiels Optionnel Chaîne Spécifie une liste séparée par des virgules de référentiels distants supplémentaires dans lesquels rechercher les coordonnées Maven fournies avec --packages
Fichiers Py Optionnel Chaîne Spécifie une liste séparée par des virgules de fichiers .zip, .egg.py , ou à placer dans PYTHONPATH pour Python les applications
runtime.spark_version Optionnel Chaîne Spécifie la version du runtime Spark à utiliser pour le travail. IBM Cloud Pak for Data prend en charge Spark 3.4.
Volumes Optionnel Liste d'objets Spécifie les volumes à monter autres que le volume de l'instance Spark. Si des volumes sont ajoutés dans la charge utile de l'application, la section conf dans la charge utile est obligatoire.
name Requis Chaîne Spécifie le nom du volume
chemin_sous-source Optionnel Chaîne Spécifie le chemin source dans le volume à monter. Le chemin source DOIT être un chemin relatif.
mount_path Requis Chaîne Spécifie l'emplacement où le volume doit être monté. Notez qu'il existe quelques chemins d'accès interdits, que vous ne pourrez pas utiliser lorsque vous tenterez de les saisir, car ils peuvent compromettre le fonctionnement du programme.

Les valeurs suivantes sont interdites pour mount_path : [/, /bin, /boot, /dev, /etc, /home, /lib, /lib64, /licenses, /lost+found, /media, /mnt, /opt, /proc, /root, /run, /sbin, /space_data, /project_data, /srv,/sys, /tmp, /usr /var,, /home/spark/space/assets,/home/spark/spark-events,/home/spark/shared, /home/spark/project/assets]]

Codes de réponse

L'API Spark Jobs renvoie les codes de réponse suivants :

Codes de réponse de l'API Spark Job
Code retour Signification du code retour Description
202 Emploi accepté La tâche Spark est validée et acceptée pour la soumission de la demande.
400 Demande erronée Ce message est renvoyé lorsque la charge est incorrecte, par exemple, si le format de la charge est incorrect ou que des arguments sont manquants.
404 Introuvable Ceci est renvoyé lorsque l'application Spark est soumise pour un ID d'instance qui n'existe pas.
500 Erreur de serveur interne Ce message s'affiche lorsque le serveur ne répond pas à votre demande. Essayez de soumettre à nouveau votre travail.
503 Service indisponible Ce message d'erreur est renvoyé lorsque les ressources sont insuffisantes.
Réponse possible : Could not complete the request. Reason - FailedScheduling.

Paramètres de configuration Spark par défaut et variables d'environnement

Les tableaux suivants présentent les paramètres de configuration Spark et les variables d'environnement couramment utilisés dans Analytics Engine powered by Apache Spark ainsi que leurs valeurs par défaut.

Le tableau suivant répertorie les paramètres de configuration Spark et leurs valeurs par défaut :

Paramètres de configuration Spark par défaut
Configuration Spark Valeur par défaut
spark.eventLog.enabled exit utilisateur associé à une tâche
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 1 024 Mo
spark.driver.cores 1
spark.local.dir /tmp/spark/scratch Voir spark.local.dir paramètre de configuration pour plus de détails.
spark.master.ui.port 8080
spark.worker.ui.port 8081
spark.ui.port 4040
spark.history.ui.port 18080
spark.ui.enabled exit utilisateur associé à une tâche
spark.ui.killEnabled FALSE
spark.eventLog.dir file:///home/spark/spark-events
spark.ui.reverseProxy exit utilisateur associé à une tâche
spark.ui.showConsoleProgress exit utilisateur associé à une tâche
spark.shuffle.service.port 7337
spark.r.command /opt/ibm/conda/R/bin/Rscript
spark.hadoop.fs.s3a.fast.upload exit utilisateur associé à une tâche
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 exit utilisateur associé à une tâche
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

Le tableau suivant répertorie les variables d'environnement et leurs valeurs par défaut :

Variables d'environnement Spark par défaut
Variable d'environnement Valeur par défaut
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
SPARK_MASTER_WEBUI_PORT 8080
SPARK_MASTER_PORT 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