Dataproc-Container für den Spark-Dienst ausführen

GDC bietet einen Dataproc-Container für Spark. Das ist eine Apache Spark-Umgebung für die Datenverarbeitung. Weitere Informationen zu Apache Spark finden Sie unter https://spark.apache.org/. Mit Containern von Dataproc Container for Spark können Sie neue oder vorhandene Spark-Anwendungen in einem GDC-Kubernetes-Cluster mit minimalen Änderungen ausführen. Wenn Sie mit Spark-Tools vertraut sind, können Sie sie weiterhin verwenden.

Definieren Sie Ihre Spark-Anwendung in einer YAML-Datei. GDC weist die Ressourcen für Sie zu. Der Dataproc-Container für Spark wird in Sekundenschnelle gestartet. Spark-Executors werden je nach Bedarf hoch- oder heruntergefahren.

Konfigurieren Sie Container aus Dataproc Container for Spark auf GDC für die Verwendung spezieller Hardware wie Knoten mit spezieller Hardware oder GPUs.

Voraussetzungen für das Ausführen von Spark-Anwendungen

Bevor Sie eine Spark-Anwendung ausführen, bitten Sie Ihren Plattformadministrator (Platform Administrator, PA), Ihnen Zugriff auf die Rolle „Spark Operator“ (mkt-spark-operator) im Namespace mkt-system zu gewähren.

Spark 3-Beispielanwendungen ausführen

Durch das Containerisieren von Spark-Anwendungen wird die Ausführung von Big-Data-Anwendungen vor Ort mit GDC vereinfacht. Als Application Operator (AO) können Sie Spark-Anwendungen ausführen, die in GKE-Objekten des benutzerdefinierten Ressourcentyps SparkApplication angegeben sind.

Führen Sie die folgenden Schritte aus, um eine Apache Spark 3-Anwendung in GDC auszuführen und zu verwenden:

  1. Sehen Sie sich das spark-operator-Bild in Ihrem Projekt an, um die $DATAPROC_IMAGE zu finden, auf die Sie in Ihrer Spark-Anwendung verweisen können:

    export DATAPROC_IMAGE=$(kubectl get pod --kubeconfig INFRA_CLUSTER_KUBECONFIG \
    --selector app.kubernetes.io/name=spark-operator -n mkt-system \
    -o=jsonpath='{.items[*].spec.containers[0].image}' \
    | sed 's/spark-operator/dataproc/')
    

    Beispiel:

    export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
    
  2. Schreiben Sie eine SparkApplication-Spezifikation und speichern Sie sie in einer YAML-Datei. Weitere Informationen finden Sie im Abschnitt Spark-Anwendungsspezifikation schreiben.

  3. Senden, ausführen und überwachen Sie Ihre Spark-Anwendung, wie in einer SparkApplication-Spezifikation konfiguriert, im GKE-Cluster mit dem Befehl kubectl. Weitere Informationen finden Sie im Abschnitt Anwendungsbeispiele.

  4. Prüfen Sie den Status der Anwendung.

  5. Optional: Überprüfen Sie die Anwendungslogs. Weitere Informationen finden Sie im Abschnitt Logs einer Spark 3-Anwendung ansehen.

  6. Verwenden Sie die Spark-Anwendung, um den Status des Treibers und der Executors zu erfassen und dem Nutzer anzuzeigen.

Spezifikation für Spark-Anwendung schreiben

Eine SparkApplication-Spezifikation enthält die folgenden Komponenten:

  • Das Feld apiVersion.
  • Das Feld kind.
  • Das Feld metadata.
  • Den Abschnitt spec.

Weitere Informationen finden Sie im Leitfaden zum Schreiben einer SparkApplication-Spezifikation auf GitHub: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec

Anwendungsbeispiele

Dieser Abschnitt enthält die folgenden Beispiele mit den entsprechenden SparkApplication-Spezifikationen zum Ausführen von Spark-Anwendungen:

Spark Pi

Dieser Abschnitt enthält ein Beispiel für die Ausführung einer rechenintensiven Spark Pi-Anwendung, die 𝛑 (Pi) schätzt, indem sie Darts in einen Kreis wirft.

Führen Sie die folgenden Schritte aus, um Spark Pi auszuführen:

  1. Wenden Sie das folgende Beispiel für die SparkApplication-Spezifikation im Organisationsinfrastrukturcluster an:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-pi
      namespace: mkt-system
    spec:
      type: Python
      pythonVersion: "3"
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/pi.py"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: dataproc-addon-spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  2. Prüfen Sie mit dem folgenden Befehl, ob das SparkApplication-Spezifikationsbeispiel ausgeführt wird und innerhalb von 1 bis 2 Minuten abgeschlossen ist:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
    
  3. Sehen Sie sich die Treiberlogs an, um das Ergebnis zu sehen:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs spark-pi-driver -n mkt-system | grep "Pi is roughly"
    

    Die Ausgabe sieht in etwa so aus:

    Pi is roughly 3.1407357036785184
    

Weitere Informationen finden Sie in den folgenden Ressourcen:

  • Den Anwendungscode finden Sie in der Apache Spark-Dokumentation im Artikel Pi estimation (Pi-Schätzung): https://spark.apache.org/examples.html.
  • Eine Beispiel-YAML-Datei für Spark Pi finden Sie unter Spark-Anwendungsspezifikation schreiben.

Spark SQL

Führen Sie die folgenden Schritte aus, um Spark SQL auszuführen:

  1. Wenn Sie eine Spark SQL-Anwendung ausführen möchten, die den Wert 1 auswählt, verwenden Sie die folgende Abfrage:

    select 1;
    
  2. Wenden Sie das folgende SparkApplication-Spezifikationsbeispiel im Organisationsinfrastrukturcluster an:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: pyspark-sql-arrow
      namespace: mkt-system
    spec:
      type: Python
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/sql/arrow.py"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: dataproc-addon-spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. Prüfen Sie mit dem folgenden Befehl, ob das SparkApplication-Spezifikationsbeispiel in weniger als einer Minute ausgeführt wird:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n mkt-system
    

Spark MLlib

Führen Sie die folgenden Schritte aus, um Spark MLlib auszuführen:

  1. Mit dem folgenden Scala-Beispiel können Sie eine Spark MLlib-Instanz ausführen, die eine statistische Analyse durchführt und ein Ergebnis in der Konsole ausgibt:

    import org.apache.spark.ml.linalg.{Matrix, Vectors}
    import org.apache.spark.ml.stat.Correlation
    import org.apache.spark.sql.Row
    
    val data = Seq(
      Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
      Vectors.dense(4.0, 5.0, 0.0, 3.0),
      Vectors.dense(6.0, 7.0, 0.0, 8.0),
      Vectors.sparse(4, Seq((0, 9.0), (3, 1.0)))
    )
    
    val df = data.map(Tuple1.apply).toDF("features")
    val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
    println(s"Pearson correlation matrix:\n $coeff1")
    
    val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
    println(s"Spearman correlation matrix:\n $coeff2")
    
  2. Wenden Sie das folgende Beispiel für die SparkApplication-Spezifikation im Organisationsinfrastrukturcluster an:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-ml
      namespace: mkt-system
    spec:
      type: Scala
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainClass: org.apache.spark.examples.ml.SummarizerExample
      mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples_2.12-3.1.3.jar"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: dataproc-addon-spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. Prüfen Sie mit dem folgenden Befehl, ob das SparkApplication-Spezifikationsbeispiel in weniger als einer Minute ausgeführt wird:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-ml -n mkt-system
    

SparkR

Führen Sie die folgenden Schritte aus, um SparkR auszuführen:

  1. Verwenden Sie den folgenden Beispielcode, um eine SparkR-Instanz auszuführen, die ein gebündeltes Dataset lädt und die erste Zeile ausgibt:

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. Wenden Sie das folgende SparkApplication-Spezifikationsbeispiel im Organisationsinfrastrukturcluster an:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-r-dataframe
      namespace: mkt-system
    spec:
      type: R
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: Always
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/r/dataframe.R"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: dataproc-addon-spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. Prüfen Sie mit dem folgenden Befehl, ob das SparkApplication-Spezifikationsbeispiel in weniger als einer Minute ausgeführt wird:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-r-dataframe -n mkt-system
    

Logs einer Spark 3-Anwendung ansehen

Spark bietet die folgenden zwei Logtypen, die Sie visualisieren können:

Verwenden Sie das Terminal, um Befehle auszuführen.

Fahrerprotokolle

Führen Sie die folgenden Schritte aus, um die Treiberlogs Ihrer Spark-Anwendung aufzurufen:

  1. Suchen Sie den Spark-Treiber-Pod:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
    
  2. Öffnen Sie die Logs des Spark-Treiber-Pods:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs DRIVER_POD -n mkt-system
    

    Ersetzen Sie DRIVER_POD durch den Namen des Spark-Treiber-Pods, den Sie im vorherigen Schritt ermittelt haben.

Ereignisprotokolle

Ereignisprotokolle finden Sie unter dem Pfad, der in der YAML-Datei der SparkApplication-Spezifikation angegeben ist.

Führen Sie die folgenden Schritte aus, um die Ereignisprotokolle Ihrer Spark-Anwendung aufzurufen:

  1. Öffnen Sie die YAML-Datei der SparkApplication-Spezifikation.
  2. Suchen Sie in der Datei das Feld spec.
  3. Suchen Sie nach dem Feld sparkConf, das im Feld spec verschachtelt ist.
  4. Suchen Sie nach dem Wert des Felds spark.eventLog.dir, das im Abschnitt sparkConf enthalten ist.
  5. Öffnen Sie den Pfad, um Ereignisprotokolle anzusehen.

Eine Beispiel-YAML-Datei für die SparkApplication-Spezifikation finden Sie unter Spezifikation für eine Spark-Anwendung schreiben.

Weitere Informationen erhalten Sie von Ihrem Account Manager.