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.
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 :
| 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 :
| 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 :
| 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 :
| 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 |