API REST applicazione Spark
Il piano senza server IBM Analytics Engine fornisce API REST per inoltrare e gestire le applicazioni Spark. Sono supportate le seguenti operazioni:
- Ottieni le credenziali richieste e imposta le autorizzazioni.
- Invia l'applicazione Spark.
- Richiamare lo stato di una applicazione Spark inoltrata.
- Richiamare i dettagli di un'applicazione Spark inoltrata.
- Arrestare un'applicazione Spark in esecuzione.
Per una descrizione delle API disponibili, vedi le API RESTIBM Analytics Engine per il piano senza server.
Le sezioni riportate di seguito in questo argomento mostrano esempi per ogni API di gestione dell'applicazione Spark.
Credenziali e autorizzazioni richieste
Prima di poter inoltrare un'applicazione Spark, è necessario ottenere le credenziali di autenticazione e impostare le autorizzazioni corrette sull'istanza senza server Analytics Engine.
- Hai bisogno del GUID dell'istanza del servizio che hai annotato quando hai eseguito il provisioning dell'istanza. Se non hai preso nota del GUID, vedi Richiamo del GUID di un'istanza senza server.
- È necessario disporre delle autorizzazioni corrette per eseguire le operazioni richieste. Vedere Autorizzazioni utente.
- Le API REST dell'applicazione Spark utilizzano l'autenticazione e l'autorizzazione basate su IAM.
Inoltro di un'applicazione Spark
Analytics Engine Serverless ti fornisce un'interfaccia REST per inoltrare le applicazioni Spark. Il payload passato all'API REST viene associato a diversi argomenti della riga di comando supportati dal comando spark-submit. Per
ulteriori dettagli, vedi Parametri per l'inoltro delle applicazioni Spark.
Quando si inoltra un'applicazione Spark, è necessario fare riferimento a tale file. Per aiutarti a iniziare rapidamente e imparare come utilizzare le API AE serverless Spark, questa sezione inizia con un esempio che utilizza i file dell'applicazione Spark pre - impacchettati a cui si fa riferimento nel payload dell'API dell'applicazione di inoltro. La sezione successiva mostra come eseguire le applicazioni archiviate in un bucket Object Storage.
Riferimento a file pre - bundle
L'applicazione di esempio fornita mostra come fare riferimento a un'applicazione di conteggio parole .py e a un file di dati in un payload del lavoro.
Per informazioni su come iniziare rapidamente a utilizzare i file dell'applicazione di esempio pre - bundle:
- Genera un token IAM se non lo hai già fatto. Vedi Richiamo dei token di accesso IAM.
- Esporta il token in una variabile:
export token=<token generated> - Preparare il file JSON del payload. Ad esempio, submit-spark-quick-start-app.json:
{ "application_details": { "application": "/opt/ibm/spark/examples/src/main/python/wordcount.py", "arguments": ["/opt/ibm/spark/examples/src/main/resources/people.txt"] } } - Inoltra l'applicazione Spark:
curl -X POST https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance_id>/spark_applications --header "Authorization: Bearer $token" -H "content-type: application/json" -d @submit-spark-quick-start-app.json
Riferimento ai file da un bucket Object Storage
Per fare riferimento al tuo file dell'applicazione Spark da un bucket Object Storage, devi creare un bucket, aggiungere il file al bucket e quindi fare riferimento al file dal tuo file JSON del payload.
L'endpoint per la tua istanza IBM Cloud Object Storage nel file JSON del payload deve essere l'endpoint privato. Gli endpoint diretti offrono prestazioni migliori rispetto agli endpoint pubblici e non comportano costi per la larghezza di banda in uscita o in entrata.
Per inoltrare un'applicazione Spark:
-
Creare un bucket per il file dell'applicazione. Vedi Operazioni bucket per i dettagli sulla creazione dei bucket.
-
Aggiungere il file dell'applicazione al bucket appena creato. Vedi Carica un oggetto per aggiungere il file dell'applicazione al bucket.
-
Genera un token IAM se non lo hai già fatto. Vedi Richiamo dei token di accesso IAM.
-
Esporta il token in una variabile:
export token=<token generated> -
Preparare il file JSON del payload. Ad esempio,
submit-spark-app.json:{ "application_details": { "application": "cos://<application-bucket-name>.<cos-reference-name>/my_spark_application.py", "arguments": ["arg1", "arg2"], "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" } } }Nota:
- Puoi passare i valori di configurazione dell'applicazione Spark attraverso la sezione
"conf"nel payload. Per ulteriori dettagli, vedi Parametri per l'inoltro delle applicazioni Spark. <cos-reference-name>nella sezione"conf"del payload di esempio è qualsiasi nome assegnato alla tua istanza IBM Cloud Object Storage, a cui stai facendo riferimento nell'URL nel parametro"application". Vedi Descrizione delle credenziali Object Storage.- L'inoltro dell'applicazione Spark potrebbe richiedere circa un minuto. Assicurarsi di impostare un timeout sufficiente nel codice client.
- Prendi nota del
"id"restituito nella risposta. È necessario questo valore per eseguire operazioni quali il richiamo dello stato dell'applicazione, il richiamo dei dettagli dell'applicazione o l'eliminazione dell'applicazione.
- Puoi passare i valori di configurazione dell'applicazione Spark attraverso la sezione
-
Inoltra l'applicazione Spark:
curl -X POST https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance_id>/spark_applications --header "Authorization: Bearer $token" -H "content-type: application/json" -d @submit-spark-app.jsonRisposta di esempio:
{ "id": "87e63712-a823-4aa1-9f6e-7291d4e5a113", "state": "accepted" } -
Se la registrazione di inoltro è stata abilitata per la tua istanza, puoi visualizzare l'output dell'applicazione nei log di piattaforma inoltrati a IBM Log Analysis. Per i dettagli, consultare Configurazione e visualizzazione dei log.
Passaggio della configurazione Spark a un'applicazione
Puoi utilizzare la sezione "conf" nel payload per passare la configurazione dell'applicazione Spark. Se hai specificato le configurazioni Spark a livello dell'istanza, queste vengono ereditate dalle applicazioni Spark
eseguite sull'istanza, ma possono essere sovrascritte nel momento in cui un'applicazione Spark viene inoltrata includendo la sezione "conf" nel payload.
Parametri per l'inoltro delle applicazioni Spark
La seguente tabella elenca l'associazione tra i parametri del comando spark-submit e il loro equivalente da passare alla sezione "application_details" del payload dell'API REST di inoltro dell'applicazione
Spark.
| Parametro spark - submit command | Payload all'API REST di inoltro Spark Analytics Engine |
|---|---|
<application binary passed as spark-submit command parameter> |
application_details -> application |
<application-arguments> |
application_details -> arguments |
class |
application_details -> class |
jars |
application_details -> jars |
name |
application_details-> name o application_details-> conf-> spark.app.name |
packages |
application_details -> packages |
repositories |
application_details -> repositories |
files |
application_details -> files |
archives |
application_details -> archives |
driver-cores |
application_details -> conf -> spark.driver.cores |
driver-memory |
application_details -> conf -> spark.driver.memory |
driver-java-options |
application_details -> conf -> spark.driver.defaultJavaOptions |
driver-library-path |
application_details -> conf -> spark.driver.extraLibraryPath |
driver-class-path |
application_details -> conf -> spark.driver.extraClassPath |
executor-cores |
application_details -> conf -> spark.executor.cores |
executor-memory |
application_details -> conf -> spark.executor.memory |
num-executors |
application_details -> conf -> ae.spark.executor.count |
pyFiles |
application_details -> conf -> spark.submit.pyFiles |
<environment-variables> |
application_details -> env -> {"key1" : "value1", "key2" : "value2", ..... "} |
Acquisizione dello stato di una domanda inoltrata
Per ottenere lo stato di una domanda inoltrata, immettere:
curl -X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance_id>/spark_applications/<application_id>/state --header "Authorization: Bearer $token"
Risposta di esempio:
{
"id": "a9a6f328-56d8-4923-8042-97652fff2af3",
"state": "finished",
"start_time": "2020-11-25T14:14:31.311+0000",
"finish_time": "2020-11-25T14:30:43.625+0000"
}
Acquisizione dei dettagli di una domanda inoltrata
Per ottenere i dettagli di una domanda inoltrata, immettere:
curl -X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance_id>/spark_applications/<application_id> --header "Authorization: Bearer $token"
Risposta di esempio:
{
"id": "ecd608d5-xxxx-xxxx-xxxx-08e27456xxxx",
"spark_application_id": "null",
"application_details": {
"application": "cos://sbn-test-bucket-serverless-1.mycosservice/my_spark_application.py",
"conf": {
"spark.hadoop.fs.cos.mycosservice.endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud",
"spark.hadoop.fs.cos.mycosservice.access.key": "xxxx",
"spark.app.name": "MySparkApp",
"spark.hadoop.fs.cos.mycosservice.secret.key": "xxxx"
},
"arguments": [
"arg1",
"arg2"
]
},
"state": "failed",
"submission_time": "2021-11-30T18:29:21+0000"
}
Arresto di una domanda inoltrata
Per arrestare un'applicazione inoltrata, eseguire quanto segue:
curl -X DELETE https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance_id>/spark_applications/<application_id> --header "Authorization: Bearer $token"
Restituisce 204 – No Content, se l'eliminazione ha esito positivo. Lo stato dell'applicazione è impostato su STOPPED.
Questa API è idempotente. Se si tenta di arrestare un'applicazione già completata o arrestata, verrà comunque restituito 204.
Puoi usare questa API per arrestare un'applicazione nei seguenti stati: accepted, waiting, submitted e running.
Passaggio della versione Spark di runtime quando si inoltra un'applicazione
Puoi utilizzare la sezione "runtime" sotto "application_details" nello script JSON del payload per passare la versione di runtime Spark quando inoltri un'applicazione. La versione Spark passata attraverso
la sezione "runtime" sovrascrive la versione Spark di runtime predefinita impostata a livello dell'istanza. Per ulteriori informazioni sulla versione di runtime predefinita, vedi Runtime Spark predefinito.
Esempio di sezione '"runtime" per eseguire un'applicazione in Spark 3.4:
{
"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"
}
}
}
Utilizzo delle variabili di ambiente
Quando invii un'applicazione, puoi utilizzare la sezione "env" in "application_details" nello script JSON del payload per passare le informazioni specifiche dell'ambiente, che determinano il risultato
dell'applicazione, ad esempio i dataset da utilizzare o i valori segreti.
Esempio della sezione "env" nel payload:
{
"application_details": {
"application": "cos://<application-bucket-name>.<cos-reference-name>/my_spark_application.py",
"arguments": ["arg1", "arg2"],
"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"
},
"env": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}
}
Le variabili di ambiente impostate utilizzando "application_details" > "env", come descritto di seguito, saranno accessibili sia all'executor che al codice del driver.
Le variabili di ambiente possono essere impostate anche utilizzando "spark.executorEnv.[EnvironmentVariableName]" configuration (application_details> env). Tuttavia, saranno accessibili solo alle attività in esecuzione
sull'executor e non al programma di controllo.
I nomi delle variabili d'ambiente nella Shell sono costituiti da lettere maiuscole, cifre e dalla dicitura
Esempio di applicazione pyspark che accede alle variabili di ambiente passate utilizzando la chiamata "os.getenv".
from pyspark.sql.types import IntegerType
import os
def init_spark():
spark = SparkSession.builder.appName("spark-env-test").getOrCreate()
sc = spark.sparkContext
return spark,sc
def returnExecutorEnv(x):
# Attempt to access environment variable from a task running on executor
return os.getenv("TESTENV1")
def main():
spark,sc = init_spark()
# dummy dataframe
df=spark.createDataFrame([("1","one")])
df.show()
df.rdd.map(lambda x: (x[0],returnExecutorEnv(x[0]))).toDF().show()
# Attempt to access environment variable on driver
print (os.getenv("TESTENV1"))
spark.stop()
if __name__ == '__main__':
main()
Esegui un'applicazione Spark con versione lingua non predefinita
L'applicazione Spark di supporto runtime Spark è stata scritta nelle seguenti lingue:
- Scala
- Python
- R
Una versione di runtime Spark viene fornita con la versione della lingua di runtime predefinita. IBM estende il supporto per le nuove versioni della lingua e rimuove la versione della lingua esistente per mantenere il runtime libero da eventuali vulnerabilità di sicurezza. Il sistema fornisce anche il tempo di transizione per i carichi di lavoro quando è disponibile una nuova versione linguistica. Puoi testare il tuo carico di lavoro con una versione della lingua passando una variabile di ambiente che punta alla versione della lingua dell'applicazione.
Codice Python di esempio:
{
"application_details": {
"application": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
"arguments": [
"/opt/ibm/spark/examples/src/main/resources/people.txt"
],
"env": {
"RUNTIME_PYTHON_ENV": "python310"
}
}
}
Codice R di esempio:
{
"application_details": {
"env": {
"RUNTIME_R_ENV": "r42"
},
"application": "/opt/ibm/spark/examples/src/main/r/dataframe.R"
}
}
Ulteriori informazioni
Quando gestisci le tue applicazioni Spark, segui le procedure ottimali consigliate.