Aperçu
Cette fonctionnalité vous permet d'envoyer des tâches Spark à un cluster Google Kubernetes Engine en cours d'exécution à partir de l'API Jobs de Dataproc.
Utilisez cette fonctionnalité pour :
- Déployer une gestion unifiée des ressources
- Isoler des tâches Spark pour accélérer le cycle de vie de l'analyse
Exécuter des tâches Dataproc sur GKE
Créer un cluster GKE
Un cluster GKE en cours d'exécution est nécessaire en tant que plate-forme de déploiement pour les composants Dataproc.
gcloud
Définissez des variables d'environnement, puis exécutez la commande
gcloud beta container clusters create
en local ou dans Cloud Shell pour créer un cluster GKE pouvant agir en tant que cluster Dataproc.- Définir des variables d'environnement.
- Définissez gke-cluster-name. N'utilisez que des caractères alphanumériques minuscules et "-".
- Définissez le cluster region, par exemple, "us-central1".
- Définissez le cluster zone sur une zone de la région sélectionnée, par exemple "us-central1-a".
GKE_CLUSTER=gke-cluster-name \ GCE_REGION=region
- Exécutez la commande
gcloud
.- Définissez
--scopes
sur "cloud-platform" pour utiliser le compte de service du cluster comme mécanisme d'autorisation. - Définissez
--workload-metadata
sur "GCE_METADATA" pour utiliser l'authentification de VM Compute Engine. - Définissez
--machine-type
sur "n1-standard-4" (un minimum de 4 processeurs est recommandé).
gcloud beta container clusters create "${GKE_CLUSTER}" \ --scopes=cloud-platform \ --workload-metadata=GCE_METADATA \ --machine-type=n1-standard-4 \ --region="${GCE_REGION}"
- Définissez
- Définir des variables d'environnement.
Créer un cluster Dataproc-on-GKE
Cette étape alloue un cluster Dataproc à un cluster GKE existant, en déployant des composants qui associent le cluster GKE au service Dataproc pour permettre l'envoi de tâches Spark.
gcloud
Définissez des variables d'environnement, puis exécutez la commande
gcloud beta dataproc clusters create
en local ou dans Cloud Shell pour créer un cluster Dataproc-on-GKE.- Définir des variables d'environnement.
- N'utilisez que des caractères alphanumériques minuscules et "-" pour dataproc-cluster-name.
- Spécifiez un objet Dataproc-on-GKE version, par exemple, "1.4.27-beta".
- Spécifiez un URI Cloud Storage bucket pour les artefacts de préproduction.
DATAPROC_CLUSTER=dataproc-cluster-name \ VERSION=version \ BUCKET=bucket-name
- Exécutez la commande
gcloud
.gcloud beta dataproc clusters create "${DATAPROC_CLUSTER}" \ --gke-cluster="${GKE_CLUSTER}" \ --region="${GCE_REGION}" \ --image-version="${VERSION}" \ --bucket="${BUCKET}"
Remarques :
- La commande ci-dessus génère automatiquement un espace de noms dans le cluster GKE, mais vous pouvez le spécifier en ajoutant l'argument
--gke-cluster-namespace
. Vous devez accorder l'accès aux comptes de service Dataproc. Le compte de service Dataproc spécifique au projet doit disposer du rôle IAM
Kubernetes Engine Admin
. Ce compte de service est au format suivant :service-{project-number}@dataproc-accounts.iam.gserviceaccount.com
.- Pour la version
1.4.23-beta
uniquement, vous devez également accorder au compte d'installation Dataprocservice-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com
l'accès à votre cluster Kubernetes via le rôle IAMKubernetes Engine Admin
.
- Pour la version
- La commande ci-dessus génère automatiquement un espace de noms dans le cluster GKE, mais vous pouvez le spécifier en ajoutant l'argument
- Définir des variables d'environnement.
Envoyer une tâche Spark
Envoyez des tâches Spark au cluster Dataproc à l'aide des commandes
gcloud dataproc
, de l'API DataprocJobs
et de Cloud Console (voir Envoyer une tâche).Exemple de tâche Spark :
gcloud dataproc jobs submit spark \ --cluster="${DATAPROC_CLUSTER}" \ --region="${GCE_REGION}" \ --class=org.apache.spark.examples.SparkPi \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar
Exemple de tâche PySpark :
gcloud dataproc jobs submit pyspark \ --cluster="${DATAPROC_CLUSTER}" foo.py \ --region="${GCE_REGION}"
Exemple de tâche SparkR :
gcloud dataproc jobs submit spark-r \ --cluster="${DATAPROC_CLUSTER}" file:/usr/lib/spark/examples/src/main/r/dataframe.R \ --region="${GCE_REGION}"
Versions
La création d'un cluster Dataproc sur GKE nécessite de spécifier un numéro de version. Un numéro de version correspond à un groupe spécifique de composants obligatoires et facultatifs, qui seront installés sur le cluster dans l'espace de noms propre au cluster Dataproc. Le tableau suivant répertorie les versions disponibles.
Version | Composants | Images par défaut | Notes |
---|---|---|---|
1.4.23-beta | Agent de tâche Dataproc, opérateur Spark | Spark : gcr.io/cloud-dataproc/spark:1.4.23-deb9-beta |
|
1.4.27-beta | Agent de tâche Dataproc, opérateur Spark | Spark : gcr.io/cloud-dataproc/spark:1.4.27-deb9-beta |
|
Image Docker de Dataproc
Les images Docker Dataproc par défaut appropriées sont automatiquement utilisées par le cluster en fonction de la version spécifiée lors de la création du cluster Dataproc. La configuration par défaut de l'image configure Spark avec le connecteur Cloud Storage. Vous pouvez afficher les images par défaut dans la documentation de la version.
Logging
Les journaux des pilotes et des exécuteurs de tâches sont disponibles dans Stackdriver Logging sous le cluster et l'espace de noms GKE.
Dépannage
- Les pilotes bloqués Spark 2.4.1+ rencontrent un problème connu, SPARK-27812, où les pilotes (en particulier les pilotes PySpark) se bloquent en raison d'un thread client Kubernetes. Pour contourner ce problème, arrêtez votre session SparkSession ou SparkContext en appelant
spark.stop()
sur votreSparkSession
ousc.stop()
sur votreSparkContext
.
Nettoyer
Pour supprimer les ressources allouées, utilisez les commandes de suppression gcloud
suivantes. Pour éviter les erreurs, supprimez le cluster Dataproc avant de supprimer le cluster GKE.
Supprimez les ressources du cluster Dataproc.
gcloud beta dataproc clusters delete "${DATAPROC_CLUSTER}" \ --region=${GCE_REGION}
Supprimez le cluster GKE.
gcloud beta container clusters delete "${GKE_CLUSTER}" \ --region="${GCE_REGION}"