Exécuter le service Dataproc Container for Spark

GDC fournit un conteneur Dataproc pour Spark. Il s'agit d'un environnement Apache Spark pour le traitement des données. Pour en savoir plus sur Apache Spark, consultez https://spark.apache.org/. Utilisez des conteneurs Dataproc Container pour Spark afin d'exécuter des applications Spark nouvelles ou existantes dans un cluster Kubernetes GDC avec un minimum de modifications. Si vous connaissez les outils Spark, vous pouvez continuer à les utiliser.

Définissez votre application Spark dans un fichier YAML, et GDC alloue les ressources pour vous. Le conteneur Dataproc pour Spark démarre en quelques secondes. Les exécuteurs Spark évoluent à la hausse ou s'arrêtent en fonction de vos besoins.

Configurez les conteneurs de Dataproc Container pour Spark sur GDC afin d'utiliser du matériel spécialisé, tel que des nœuds matériels spécialisés ou des GPU.

Conditions préalables à l'exécution d'applications Spark

Avant d'exécuter une application Spark, demandez à votre administrateur de plate-forme de vous accorder l'accès au rôle Spark Operator (mkt-spark-operator) dans l'espace de noms mkt-system.

Exécuter des exemples d'applications Spark 3

La conteneurisation des applications Spark simplifie l'exécution d'applications de big data sur site à l'aide de GDC. En tant qu'opérateur d'application (AO), exécutez les applications Spark spécifiées dans les objets GKE du type de ressource personnalisée SparkApplication.

Pour exécuter et utiliser une application Apache Spark 3 sur GDC, procédez comme suit :

  1. Examinez l'image spark-operator dans votre projet pour trouver le $DATAPROC_IMAGE à référencer dans votre application 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/')
    

    Exemple :

    export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
    
  2. Écrivez une spécification SparkApplication et stockez-la dans un fichier YAML. Pour en savoir plus, consultez la section Écrire une spécification d'application Spark.

  3. Envoyez, exécutez et surveillez votre application Spark telle qu'elle est configurée dans une spécification SparkApplication sur le cluster GKE avec la commande kubectl. Pour en savoir plus, consultez la section Exemples d'applications.

  4. Vérifiez l'état de la demande.

  5. Facultatif : Examinez les journaux d'application. Pour en savoir plus, consultez la section Afficher les journaux d'une application Spark 3.

  6. Utilisez l'application Spark pour collecter et afficher l'état du pilote et des exécuteurs à l'utilisateur.

Rédiger une spécification d'application Spark

Une spécification SparkApplication comprend les composants suivants :

  • Le champ apiVersion
  • Le champ kind
  • Le champ metadata
  • La section spec

Pour en savoir plus, consultez la section Writing a SparkApplication Spec (Écrire une spécification SparkApplication) sur GitHub : https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec

Exemples d'applications

Cette section inclut les exemples suivants avec leurs spécifications SparkApplication correspondantes pour exécuter des applications Spark :

Spark Pi

Cette section contient un exemple d'exécution d'une application Spark Pi gourmande en ressources de calcul, qui estime 𝛑 (pi) en lançant des fléchettes dans un cercle.

Suivez les étapes ci-dessous pour exécuter Spark Pi :

  1. Appliquez l'exemple de spécification SparkApplication suivant dans le cluster d'infrastructure de l'organisation :

    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. Vérifiez que l'exemple de spécification SparkApplication s'exécute et se termine en une à deux minutes à l'aide de la commande suivante :

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
    
  3. Affichez les journaux du pilote pour voir le résultat :

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

    Le résultat ressemble à ce qui suit :

    Pi is roughly 3.1407357036785184
    

Pour en savoir plus, consultez les ressources suivantes :

  • Pour le code de l'application, consultez l'article Estimation de Pi de la documentation Apache Spark : https://spark.apache.org/examples.html.
  • Pour obtenir un exemple de fichier YAML Spark Pi, consultez Écrire une spécification d'application Spark.

Spark SQL

Suivez les étapes ci-dessous pour exécuter SparkSQL :

  1. Pour exécuter une application SparkSQL qui sélectionne la valeur 1, utilisez la requête suivante :

    select 1;
    
  2. Appliquez l'exemple de spécification SparkApplication suivant dans le cluster d'infrastructure de l'organisation :

    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. Vérifiez que l'exemple de spécification SparkApplication s'exécute et se termine en moins d'une minute à l'aide de la commande suivante :

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

Spark MLlib

Pour exécuter Spark MLlib, procédez comme suit :

  1. Utilisez l'exemple Scala suivant pour exécuter une instance Spark MLlib qui effectue une analyse statistique et affiche un résultat dans la 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. Appliquez l'exemple de spécification SparkApplication suivant dans le cluster d'infrastructure de l'organisation :

    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. Vérifiez que l'exemple de spécification SparkApplication s'exécute et se termine en moins d'une minute à l'aide de la commande suivante :

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

SparkR

Pour exécuter SparkR, procédez comme suit :

  1. Utilisez l'exemple de code suivant pour exécuter une instance SparkR qui charge un ensemble de données groupées et affiche la première ligne :

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. Appliquez l'exemple de spécification SparkApplication suivant dans le cluster d'infrastructure de l'organisation :

    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. Vérifiez que l'exemple de spécification SparkApplication s'exécute et se termine en moins d'une minute à l'aide de la commande suivante :

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

Afficher les journaux d'une application Spark 3

Spark comporte les deux types de journaux suivants que vous pouvez visualiser :

Utilisez le terminal pour exécuter des commandes.

Journaux des conducteurs

Pour afficher les journaux du pilote de votre application Spark, procédez comme suit :

  1. Recherchez votre pod de pilote Spark :

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
    
  2. Ouvrez les journaux du pod du pilote Spark :

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

    Remplacez DRIVER_POD par le nom du pod de pilote Spark que vous avez trouvé à l'étape précédente.

Journaux des événements

Vous trouverez les journaux d'événements au chemin d'accès spécifié dans le fichier YAML de la spécification SparkApplication.

Pour afficher les journaux d'événements de votre application Spark, procédez comme suit :

  1. Ouvrez le fichier YAML de la spécification SparkApplication.
  2. Recherchez le champ spec dans le fichier.
  3. Localisez le champ sparkConf imbriqué dans le champ spec.
  4. Recherchez la valeur du champ spark.eventLog.dir imbriqué dans la section sparkConf.
  5. Ouvrez le chemin d'accès pour afficher les journaux d'événements.

Pour obtenir un exemple de fichier YAML de la spécification SparkApplication, consultez Écrire une spécification d'application Spark.

Pour en savoir plus, contactez votre responsable de compte.