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 :
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
É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.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 commandekubectl
. Pour en savoir plus, consultez la section Exemples d'applications.Vérifiez l'état de la demande.
Facultatif : Examinez les journaux d'application. Pour en savoir plus, consultez la section Afficher les journaux d'une application Spark 3.
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 :
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"
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
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 :
Pour exécuter une application SparkSQL qui sélectionne la valeur
1
, utilisez la requête suivante :select 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: 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"
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 :
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")
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"
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 :
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)
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"
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 :
Recherchez votre pod de pilote Spark :
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
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 :
- Ouvrez le fichier YAML de la spécification
SparkApplication
. - Recherchez le champ
spec
dans le fichier. - Localisez le champ
sparkConf
imbriqué dans le champspec
. - Recherchez la valeur du champ
spark.eventLog.dir
imbriqué dans la sectionsparkConf
. - 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.