IBM Cloud Docs
Spark-Anwendungs-REST-API

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:

  1. Erforderliche Berechtigungsnachweise abrufen und Berechtigungen festlegen.
  2. Spark-Anwendung übergeben.
  3. Status einer übergebenen Spark-Anwendung abrufen.
  4. Details einer übergebenen Spark-Anwendung abrufen.
  5. 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.

  1. 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.
  2. Sie müssen über die korrekten Berechtigungen verfügen, um die erforderlichen Operationen auszuführen. Siehe Benutzerberechtigungen.
  3. 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 .pyWortzä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:

  1. Generieren Sie ein IAM-Token, falls noch nicht erfolgt. Siehe IAM-Zugriffstoken abrufen.
  2. Exportieren Sie das Token in eine Variable:
    export token=<token generated>
    
  3. 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"]
        }
    }
    
  4. Ü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:

  1. Erstellen Sie ein Bucket für Ihre Anwendungsdatei. Details zum Erstellen von Buckets finden Sie in Bucketoperationen .

  2. Fügen Sie die Anwendungsdatei zum neu erstellten Bucket hinzu. Informationen zum Hinzufügen Ihrer Anwendungsdatei zum Bucket finden Sie unter Objekt hochladen .

  3. Generieren Sie ein IAM-Token, falls noch nicht erfolgt. Siehe IAM-Zugriffstoken abrufen.

  4. Exportieren Sie das Token in eine Variable:

    export token=<token generated>
    
  5. 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.
  6. Ü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"
    }
    
  7. 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.

Siehe Spark-Konfiguration in Analytics Engine Serverless.

Parameter für die Übergabe von Spark-Anwendungen

In der folgenden Tabelle ist die Zuordnung zwischen den Parametern des Befehls spark-submitund ihren Entsprechungen aufgelistet, die an den Abschnitt "application_details"der REST-API-Nutzdaten der Spark-Anwendungsübergabe übergeben werden müssen.

Zuordnung zwischen den Parametern des Befehls spark-submit und ihren Entsprechungen, die an die Nutzlast übergeben werden
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 Contentzurü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, submittedund 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 ( '_' ) und darf nicht mit einer Ziffer beginnen.

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.