Dataproc sur Google Kubernetes Engine

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

  1. 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.

    Commande 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.

    1. 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
      
    2. 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-from-node 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-from-node=GCE_METADATA \
          --machine-type=n1-standard-4 \
          --region="${GCE_REGION}"
      
  2. 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.

    Commande 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.

    1. 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
      

    2. 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 Dataproc service-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com l'accès à votre cluster Kubernetes via le rôle IAM Kubernetes Engine Admin.

  3. Envoyer une tâche Spark

    Envoyez des tâches Spark au cluster Dataproc à l'aide des commandes gcloud dataproc, de l'API Dataproc Jobs 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
  • Compatible avec les types de tâches Spark, PySpark et SparkR
  • Le compte IAM service-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com doit être associé au rôle IAM Kubernetes Engine Admin.
1.4.27-beta Agent de tâche Dataproc, opérateur Spark Spark : gcr.io/cloud-dataproc/spark:1.4.27-deb9-beta
  • Compatible avec les types de tâches Spark, PySpark et SparkR

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 résoudre ce problème, procédez comme suit :

    1. Arrêtez SparkSession ou SparkContext en appelant spark.stop() sur votre SparkSession ou sc.stop() sur votre SparkContext.
    2. Utilisez une image basée sur Spark 2.4.0, telle que gcr.io/dataproc-2f10d78d114f6aaec7646/spark/spark.

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}"