Esegui il servizio Dataproc Container for Spark

GDC fornisce un container Dataproc per Spark. Si tratta di un ambiente Apache Spark per l'elaborazione dei dati. Per ulteriori informazioni su Apache Spark, vedi https://spark.apache.org/. Utilizza i container di Dataproc Container for Spark per eseguire applicazioni Spark nuove o esistenti all'interno di un cluster Kubernetes GDC con modifiche minime. Se hai familiarità con gli strumenti Spark, puoi continuare a utilizzarli.

Definisci l'applicazione Spark in un file YAML e GDC alloca le risorse per te. Il container Dataproc per Spark si avvia in pochi secondi. Gli esecutori Spark vengono scalati o arrestati in base alle tue esigenze.

Configura i container di Dataproc Container for Spark su GDC per utilizzare hardware specializzato, come nodi hardware specializzati o GPU.

Prerequisiti per l'esecuzione delle applicazioni Spark

Prima di eseguire un'applicazione Spark, chiedi all'amministratore della piattaforma di concederti l'accesso al ruolo Operatore Spark (mkt-spark-operator) nello spazio dei nomi mkt-system.

Esegui applicazioni Spark 3 di esempio

La containerizzazione delle applicazioni Spark semplifica l'esecuzione di applicazioni di big data on-premise utilizzando GDC. In qualità di operatore dell'applicazione (AO), esegui le applicazioni Spark specificate negli oggetti GKE del tipo di risorsa personalizzata SparkApplication.

Per eseguire e utilizzare un'applicazione Apache Spark 3 su GDC, completa i seguenti passaggi:

  1. Esamina l'immagine spark-operator nel tuo progetto per trovare $DATAPROC_IMAGE a cui fare riferimento nella tua applicazione Spark:

    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/')
    

    Ad esempio:

    export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
    
  2. Scrivi una specifica SparkApplication e archiviala in un file YAML. Per maggiori informazioni, consulta la sezione Scrivere una specifica dell'applicazione Spark.

  3. Invia, esegui e monitora l'applicazione Spark come configurato in una specifica SparkApplication sul cluster GKE con il comando kubectl. Per ulteriori informazioni, consulta la sezione Esempi di applicazione.

  4. Controlla lo stato della richiesta.

  5. (Facoltativo) Esamina i log dell'applicazione. Per maggiori informazioni, consulta la sezione Visualizzare i log di un'applicazione Spark 3.

  6. Utilizza l'applicazione Spark per raccogliere e mostrare all'utente lo stato del driver e degli esecutori.

Scrivi una specifica dell'applicazione Spark

Una specifica SparkApplication include i seguenti componenti:

  • Il campo apiVersion.
  • Il campo kind.
  • Il campo metadata.
  • La sezione spec.

Per maggiori informazioni, consulta la pagina Writing a SparkApplication Spec su GitHub: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec

Esempi di applicazioni

Questa sezione include i seguenti esempi con le relative specifiche SparkApplication per eseguire applicazioni Spark:

Spark Pi

Questa sezione contiene un esempio per eseguire un'applicazione Spark Pi a elevato utilizzo di risorse di calcolo che stima 𝛑 (pi greco) lanciando freccette in un cerchio.

Segui questi passaggi per eseguire Spark Pi:

  1. Applica il seguente esempio di specifica SparkApplication nel cluster dell'infrastruttura dell'organizzazione:

    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. Verifica che l'esempio di specifica SparkApplication venga eseguito e completato in 1-2 minuti utilizzando questo comando:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
    
  3. Visualizza i log del conducente per vedere il risultato:

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

    L'output è simile al seguente:

    Pi is roughly 3.1407357036785184
    

Per maggiori informazioni, consulta le seguenti risorse:

  • Per il codice dell'applicazione, consulta l'articolo Stima di Pi della documentazione di Apache Spark: https://spark.apache.org/examples.html.
  • Per un file YAML di esempio di Spark Pi, consulta Scrivere una specifica dell'applicazione Spark.

Spark SQL

Segui questi passaggi per eseguire Spark SQL:

  1. Per eseguire un'applicazione Spark SQL che seleziona il valore 1, utilizza la seguente query:

    select 1;
    
  2. Applica il seguente esempio di specifica SparkApplication nel cluster dell'infrastruttura dell'organizzazione:

    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. Verifica che l'esempio di specifica SparkApplication venga eseguito e completato in meno di un minuto utilizzando il seguente comando:

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

Spark MLlib

Segui questi passaggi per eseguire Spark MLlib:

  1. Utilizza il seguente esempio Scala per eseguire un'istanza Spark MLlib che esegue l'analisi statistica e stampa un risultato nella console:

    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. Applica il seguente esempio di specifica SparkApplication nel cluster dell'infrastruttura dell'organizzazione:

    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. Verifica che l'esempio di specifica SparkApplication venga eseguito e completato in meno di un minuto utilizzando il seguente comando:

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

SparkR

Segui questi passaggi per eseguire SparkR:

  1. Utilizza il seguente codice di esempio per eseguire un'istanza SparkR che carica un set di dati in bundle e stampa la prima riga:

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. Applica il seguente esempio di specifica SparkApplication nel cluster dell'infrastruttura dell'organizzazione:

    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. Verifica che l'esempio di specifica SparkApplication venga eseguito e completato in meno di un minuto utilizzando il seguente comando:

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

Visualizzare i log di un'applicazione Spark 3

Spark dispone dei seguenti due tipi di log che puoi visualizzare:

Utilizza il terminale per eseguire i comandi.

Log del conducente

Segui questi passaggi per visualizzare i log dei driver della tua applicazione Spark:

  1. Trova il pod del driver di Spark:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
    
  2. Apri i log dal pod del driver Spark:

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

    Sostituisci DRIVER_POD con il nome del pod driver Spark che hai trovato nel passaggio precedente.

Log eventi

Puoi trovare i log eventi nel percorso specificato nel file YAML della specifica SparkApplication.

Segui questi passaggi per visualizzare i log eventi della tua applicazione Spark:

  1. Apri il file YAML della specifica SparkApplication.
  2. Individua il campo spec nel file.
  3. Individua il campo sparkConf nidificato nel campo spec.
  4. Individua il valore del campo spark.eventLog.dir nidificato nella sezione sparkConf.
  5. Apri il percorso per visualizzare i log eventi.

Per un file YAML di esempio della specifica SparkApplication, consulta Scrivere una specifica dell'applicazione Spark.

Per saperne di più, contatta il tuo account manager.