Spark-Anwendungs-REST-API
Der serverunabhängige IBM Analytics Engine -Plan stellt REST-APIs zum Übergeben und Verwalten von Spark-Anwendungen bereit. Die folgenden Operationen werden unterstützt:
- Erforderliche Berechtigungsnachweise abrufen und Berechtigungen festlegen.
- Spark-Anwendung übergeben.
- Status einer übergebenen Spark-Anwendung abrufen.
- Details einer übergebenen Spark-Anwendung abrufen.
- Aktive Spark-Anwendung stoppen.
Eine Beschreibung der verfügbaren APIs finden Sie im IBM Analytics Engine -REST-APIs für den serverunabhängigen Plan.
Die folgenden Abschnitte in diesem Abschnitt zeigen Beispiele für jede der Spark-APIs für das Anwendungsmanagement.
Erforderliche Berechtigungsnachweise und Berechtigungen
Bevor Sie eine Spark-Anwendung übergeben können, müssen Sie Authentifizierungsnachweise abrufen und die richtigen Berechtigungen für die serverunabhängige Analytics Engine -Instanz festlegen.
- Sie benötigen die GUID der Serviceinstanz, die Sie beim Bereitstellen der Instanz notiert haben. Wenn Sie die GUID nicht notiert haben, lesen Sie den Abschnitt GUID einer serverunabhängigen Instanz abrufen.
- Sie müssen über die korrekten Berechtigungen verfügen, um die erforderlichen Operationen auszuführen. Siehe Benutzerberechtigungen.
- Die REST-APIs der Spark-Anwendung verwenden IAM-basierte Authentifizierung und Autorisierung.
Spark-Anwendung übergeben
Analytics Engine Serverless bietet Ihnen eine REST-Schnittstelle für die Übergabe von Spark-Anwendungen. Die an die REST-API übergebenen Nutzdaten werden verschiedenen Befehlszeilenargumenten zugeordnet, die vom spark-submit
-Befehl
unterstützt werden. Weitere Details finden Sie unter Parameter für die Übergabe von Spark-Anwendungen.
Wenn Sie eine Spark-Anwendung übergeben, müssen Sie auf die Anwendungsdatei verweisen. Damit Sie schnell beginnen und lernen können, wie Sie die serverunabhängigen AE-Spark-APIs verwenden können, beginnt dieser Abschnitt mit einem Beispiel, das vorab gebündelte Spark-Anwendungsdateien verwendet, auf die in den API-Nutzdaten der Übergabeanwendung verwiesen wird. Im nachfolgenden Abschnitt erfahren Sie, wie Sie Anwendungen ausführen, die in einem Object Storage -Bucket gespeichert sind.
Auf vorab gebündelte Dateien verweisen
Die bereitgestellte Beispielanwendung zeigt Ihnen, wie Sie auf eine .py
Wortzählprogramm-Anwendungsdatei und eine Datendatei in Jobnutzdaten verweisen.
Gehen Sie wie folgt vor, um den schnellen Einstieg in die Verwendung vorab gebündelter Beispielanwendungsdateien zu erlernen:
- Generieren Sie ein IAM-Token, falls noch nicht erfolgt. Siehe IAM-Zugriffstoken abrufen.
- Exportieren Sie das Token in eine Variable:
export token=<token generated>
- Bereiten Sie die JSON-Nutzdatendatei vor. Beispiel: 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"] } }
- Übergeben Sie die Spark-Anwendung:
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
Dateien aus einem Object Storage -Bucket referenzieren
Um Ihre Spark-Anwendungsdatei aus einem Object Storage-Bucket zu referenzieren, müssen Sie ein Bucket erstellen, die Datei zum Bucket hinzufügen und dann die Datei aus Ihrer JSON-Nutzdatendatei referenzieren.
Der Endpunkt zu Ihrer IBM Cloud Object Storage Instanz in der Payload JSON Datei sollte der private Endpunkt sein. Direkte Endpunkte bieten eine bessere Leistung als öffentliche Endpunkte und es fallen keine Gebühren für ausgehende oder eingehende Bandbreite an.
Gehen Sie wie folgt vor, um eine Spark-Anwendung zu übergeben:
-
Erstellen Sie ein Bucket für Ihre Anwendungsdatei. Details zum Erstellen von Buckets finden Sie in Bucketoperationen .
-
Fügen Sie die Anwendungsdatei zum neu erstellten Bucket hinzu. Informationen zum Hinzufügen Ihrer Anwendungsdatei zum Bucket finden Sie unter Objekt hochladen .
-
Generieren Sie ein IAM-Token, falls noch nicht erfolgt. Siehe IAM-Zugriffstoken abrufen.
-
Exportieren Sie das Token in eine Variable:
export token=<token generated>
-
Bereiten Sie die JSON-Nutzdatendatei vor. Beispiel:
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" } } }
Hinweis:
- Sie können Spark-Anwendungskonfigurationswerte über den Abschnitt
"conf"
in den Nutzdaten übergeben. Weitere Details finden Sie unter Parameter für die Übergabe von Spark-Anwendungen. <cos-reference-name>
im Abschnitt '"conf"
der Beispiel-Nutzdaten ist ein beliebiger Name für Ihre IBM Cloud Object Storage, auf die Sie in der URL im Parameter '"application"
verweisen. Weitere Informationen finden Sie unter Informationen zu den Object Storage-Berechtigungsnachweisen.- Es kann ungefähr eine Minute dauern, bis die Spark-Anwendung übergeben wird. Stellen Sie sicher, dass das Zeitlimit im Clientcode ausreichend ist.
- Notieren Sie sich die in der Antwort zurückgegebene
"id"
. Sie benötigen diesen Wert, um Operationen wie das Abrufen des Status der Anwendung, das Abrufen der Details der Anwendung oder das Löschen der Anwendung auszuführen.
- Sie können Spark-Anwendungskonfigurationswerte über den Abschnitt
-
Übergeben Sie die Spark-Anwendung:
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.json
Beispielantwort:
{ "id": "87e63712-a823-4aa1-9f6e-7291d4e5a113", "state": "accepted" }
-
Wenn die Protokollierung für die Weiterleitung für Ihre Instanz aktiviert wurde, können Sie die Anwendungsausgabe in den Plattformprotokollen anzeigen, die an IBM Log Analysisweitergeleitet wurden. Details hierzu finden Sie unter Protokolle konfigurieren und anzeigen.
Spark-Konfiguration an eine Anwendung übergeben
Sie können den Abschnitt "conf"
in den Nutzdaten verwenden, um die Spark-Anwendungskonfiguration zu übergeben. Wenn Sie Spark-Konfigurationen auf Instanzebene angegeben haben, werden diese von den Spark-Anwendungen übernommen,
die in der Instanz ausgeführt werden, können aber überschrieben werden, wenn eine Spark-Anwendung übergeben wird, indem der Abschnitt "conf"
in die Nutzdaten eingeschlossen wird.
Parameter für die Übergabe von Spark-Anwendungen
In der folgenden Tabelle ist die Zuordnung zwischen den Parametern des Befehls spark-submit
und ihren Entsprechungen aufgelistet, die an den Abschnitt "application_details"
der REST-API-Nutzdaten der Spark-Anwendungsübergabe
übergeben werden müssen.
Befehlsparameter "spark-submit" | Nutzdaten zur REST-API für die Analytics Engine Spark-Übergabe |
---|---|
<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 oderapplication_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", ..... " } |
Status eines übergebenen Antrags abrufen
Geben Sie Folgendes ein, um den Status eines übergebenen Antrags abzurufen:
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"
Beispielantwort:
{
"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"
}
Details eines übergebenen Antrags abrufen
Geben Sie Folgendes ein, um die Details eines übermittelten Antrags abzurufen:
curl -X GET https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance_id>/spark_applications/<application_id> --header "Authorization: Bearer $token"
Beispielantwort:
{
"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"
}
Übergebene Anwendung stoppen
Führen Sie zum Stoppen einer übergebenen Anwendung den folgenden Befehl aus:
curl -X DELETE https://api.us-south.ae.cloud.ibm.com/v3/analytics_engines/<instance_id>/spark_applications/<application_id> --header "Authorization: Bearer $token"
Gibt 204 – No Content
zurück, wenn das Löschen erfolgreich war. Der Status der Anwendung wird auf GESTOPPT gesetzt.
Diese API ist idempotent. Wenn Sie versuchen, eine bereits abgeschlossene oder gestoppte Anwendung zu stoppen, wird dennoch 204 zurückgegeben.
Sie können diese API verwenden, um eine Anwendung in folgenden Status zu stoppen: accepted
, waiting
, submitted
und running
.
Übergeben der Spark-Laufzeitversion beim Übergeben einer Anwendung
Sie können den Abschnitt "runtime"
unter "application_details"
im JSON-Script für Nutzdaten verwenden, um die Spark-Laufzeitversion zu übergeben, wenn Sie eine Anwendung übergeben. Die Spark-Version,
die über den Abschnitt "runtime"
übergeben wird, überschreibt die auf Instanzebene festgelegte Standard-Spark-Laufzeitversion. Weitere Informationen zur Standardlaufzeitversion finden Sie unter Standard-Spark-Laufzeit.
Beispiel für den Abschnitt " "runtime"
zur Ausführung einer Anwendung 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"
}
}
}
Umgebungsvariablen verwenden
Wenn Sie eine Anwendung übergeben, können Sie den Abschnitt "env"
unter "application_details"
im JSON-Nutzdatenscript verwenden, um umgebungsspezifische Informationen zu übergeben, die das Ergebnis
der Anwendung bestimmen, z. B. die zu verwendenden Datasets oder Werte für geheime Schlüssel.
Beispiel für den Abschnitt "env"
in den Nutzdaten:
{
"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"
}
}
}
Die Umgebungsvariablen, die mit "application_details"
> "env"
wie hier beschrieben festgelegt werden, sind für Executor-und Treibercode zugänglich.
Die Umgebungsvariablen können auch über die "spark.executorEnv.[EnvironmentVariableName]"
-Konfiguration (application_details > env) festgelegt werden. Sie sind jedoch nur für die Tasks zugänglich, die im Executor ausgeführt
werden, und nicht für den Treiber.
Die Umgebungsvariablennamen in der Shell bestehen aus Großbuchstaben, Ziffern und dem
Beispiel für eine Pyspark-Anwendung, die auf die Umgebungsvariablen zugreift, die mit dem Aufruf "os.getenv"
übergeben werden
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()
Spark-Anwendung mit einer vom Standard abweichenden Sprachversion ausführen
Die Spark-Laufzeit unterstützt Spark-Anwendungen in den folgenden Sprachen:
- Scala
- Python
- R
Eine Spark-Laufzeitversion wird mit der Standardversion der Laufzeitsprache geliefert. IBM erweitert die Unterstützung für neue Sprachversionen und entfernt die vorhandene Sprachversion, um die Laufzeit vor Sicherheitslücken zu schützen. Das System bietet auch eine Übergangszeit für Ihre Workloads, wenn es neue Sprachversionen gibt. Sie können Ihre Workload mit einer Sprachversion testen, indem Sie eine Umgebungsvariable übergeben, die auf die Sprachversion der Anwendung verweist.
Beispiel für Python-Code:
{
"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"
}
}
}
R-Beispielcode:
{
"application_details": {
"env": {
"RUNTIME_R_ENV": "r42"
},
"application": "/opt/ibm/spark/examples/src/main/r/dataframe.R"
}
}
Weitere Informationen
Befolgen Sie beim Verwalten Ihrer Spark-Anwendungen die empfohlenen Best Practices.