Planifier des tâches SQL Spark et Spark personnalisées

Dataplex permet de planifier l'exécution de code personnalisé, que ce soit sous la forme d'une exécution ponctuelle, à intervalles réguliers ou à la demande. Le modèle à la demande est en version preview et n'est disponible que via l'API. Vous pouvez planifier des transformations de données client à l'aide de Spark (Java), de PySpark (limité à la version 3.2 de Spark) ou de Spark SQL. Dataplex exécute le code à l'aide du traitement Spark sans serveur et d'un planificateur sans serveur intégré.

Terminologie

Tâche
Une tâche Dataplex représente le travail que Dataplex doit effectuer selon un calendrier. Il encapsule votre code, vos paramètres et la programmation.
Job

Une tâche représente une seule exécution d'une tâche Dataplex. Par exemple, si une tâche est planifiée pour s'exécuter tous les jours, Dataplex créera une tâche tous les jours.

Pour les tâches créées à partir du 10 mai 2023, le champ Déclencheur affiche le type de déclencheur d'exécution de la tâche.

Voici les types de déclencheurs d'exécution de tâches:

  • RUN_REQUEST: indique que la tâche a été exécutée en raison de l'appel de l'API RunTask.

  • TASK_CONFIG: indique que la tâche a été exécutée en raison de sa configuration TriggerSpec.

Modes de planification

Dataplex est compatible avec les modes de planification suivants:

Exécuter une fois
Utilisez ce mode pour exécuter votre tâche une seule fois. Vous pouvez choisir de l'exécuter immédiatement ou à une heure définie ultérieurement. Si vous exécutez la tâche immédiatement, le démarrage de l'exécution peut prendre jusqu'à deux minutes.
Exécuter selon un calendrier
Utilisez ce mode pour exécuter la tâche à plusieurs reprises. Vous pouvez définir des répétitions quotidiennes, hebdomadaires, mensuelles ou personnalisées.
Exécution à la demande

Utilisez ce mode pour exécuter à la demande une tâche créée précédemment. Le mode d'exécution à la demande n'est compatible qu'avec l'API RunTask. Lorsque votre tâche s'exécute à la demande, Dataplex utilise les paramètres existants pour créer une tâche. Vous pouvez spécifier les arguments ExecutionSpec et les étiquettes pour exécuter la tâche.

Avant de commencer

  1. activer l'API Dataproc ;

    Activer l'API Dataproc

  2. Activez l'accès privé à Google pour votre réseau et votre sous-réseau. Activez l'accès privé à Google sur le réseau que vous utilisez avec les tâches Dataplex. Si vous ne spécifiez pas de réseau ni de sous-réseau lors de la création de la tâche Dataplex, Dataplex utilise le sous-réseau par défaut et vous devez activer l'accès privé à Google pour ce sous-réseau.

  3. Créer un compte de service Un compte de service est nécessaire pour planifier les tâches Dataplex. Le compte de service doit appartenir au projet dans lequel vous exécutez les tâches. Le compte de service doit disposer des autorisations suivantes :

    • Accès aux données BigQuery et Cloud Storage en cours de traitement.

    • Rôle de nœud de calcul Dataproc sur le projet dans lequel vous exécutez la tâche.

    • Si la tâche doit lire ou mettre à jour l'instance Dataproc Metastore associée au lac, le compte de service doit disposer du rôle Lecteur ou éditeur Dataproc Metastore. Ce rôle doit être accordé dans le projet dans lequel le lac Dataplex est configuré.

    • S'il s'agit d'une tâche Spark SQL, vous devez attribuer le rôle Développeur Dataplex au compte de service. Ce rôle doit être attribué dans le projet dans lequel le lac Dataplex est configuré.

    • S'il s'agit d'une tâche Spark SQL, vous devez disposer des autorisations d'administrateur Cloud Storage sur le bucket dans lequel les résultats sont écrits.

    • Pour planifier et exécuter des tâches Spark SQL et Spark personnalisées, vous devez disposer des rôles IAM Lecteur de métadonnées Dataplex (roles/dataplex.metadataReader), Lecteur Dataplex (roles/dataplex.viewer) et Utilisateur de métadonnées Dataproc Metastore (roles/metastore.metadataUser) sur votre compte de service.

  4. Attribuez à l'utilisateur qui envoie la tâche le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) sur le compte de service. Pour obtenir des instructions, consultez Gérer l'accès aux comptes de service.

  5. Accordez au compte de service Dataplex Lake les autorisations nécessaires pour l'utiliser. Vous trouverez le compte de service du lac Dataplex sur la page Détails du lac de la console Google Cloud.

  6. Si le projet contenant votre lac Dataplex est différent du projet dans lequel la tâche doit être exécutée, accordez au compte de service du lac Dataplex le rôle Éditeur Dataproc pour le projet dans lequel vous exécutez la tâche.

  7. Placez les artefacts de code requis (fichiers JAR, Python ou SQL) ou les fichiers archivés (.jar, .tar, .tar.gz, .tgz, .zip) dans un chemin d'accès Cloud Storage.

  8. Assurez-vous que le compte de service dispose de l'autorisation storage.objects.get requise sur le bucket Cloud Storage qui stocke ces artefacts de code.

Planifier une tâche Spark (Java ou Python)

Console

  1. Dans la console Google Cloud, accédez à la page Dataplex:

    Accéder à Dataplex

  2. Accédez à la vue Processus.

  3. Cliquez sur Créer une tâche.

  4. Dans le champ Create Custom Spark Task (Créer une tâche Spark personnalisée), cliquez sur Create task (Créer une tâche).

  5. Choisissez un lac Dataplex.

  6. Attribuez un nom à la tâche.

  7. Créez un ID pour votre tâche.

  8. Dans la section Configuration de la tâche, sous Type, sélectionnez Spark ou PySpark.

  9. Saisissez les arguments appropriés.

  10. Dans le champ Compte de service, saisissez un compte de service utilisateur avec lequel votre tâche Spark personnalisée peut exécuter.

  11. Cliquez sur Continuer.

  12. Facultatif: Définir une programmation: sélectionnez Exécuter une fois ou Répéter. Renseignez les champs obligatoires.

  13. Cliquez sur Continuer.

  14. Facultatif: vous pouvez personnaliser les ressources et ajouter des paramètres.

  15. Cliquez sur Créer.

gcloud

Vous pouvez planifier une tâche Spark (Java / Python) à l'aide de la commande gcloud CLI. Le tableau suivant répertorie les paramètres obligatoires et facultatifs à utiliser:

Paramètres Description
--lake ID de lac de la ressource de lac du service Dataplex.
--location Emplacement du service Dataplex.
--spark-main-class Classe principale de conducteur. Le fichier jar contenant la classe doit se trouver dans le CLASSPATH par défaut.
--spark-main-jar-file-uri URI Cloud Storage du fichier jar contenant la classe principale.
--spark-archive-uris Facultatif: URI Cloud Storage des archives à extraire dans le répertoire de travail de chaque exécuteur. Types de fichiers compatibles : .jar, .tar, .tar.gz, .tgz et .zip.
--spark-file-uris Facultatif: URI Cloud Storage des fichiers à placer dans le répertoire de travail de chaque exécuteur.
--batch-executors-count Facultatif: nombre total d'exécuteurs de tâches. La valeur par défaut est "2".
--batch-max-executors-count Facultatif: nombre maximal d'exécuteurs configurables. La valeur par défaut est 1 000. Si batch-max-executors-count est supérieur à batch-executors-count, Dataplex active l'autoscaling.
--container-image-java-jars Facultatif: liste de fichiers JARS Java à ajouter au chemin de classe. Une entrée valide inclut les URI Cloud Storage vers des binaires Jar.
Par exemple, gs://bucket-name/my/path/to/file.jar.
--container-image-properties Facultatif: clés de propriété, spécifiées au format prefix:property.
Par exemple, core:hadoop.tmp.dir.
Pour en savoir plus, consultez la section Propriétés du cluster.
--vpc-network-tags Facultatif: liste des tags réseau à appliquer à la tâche.
--vpc-network-name (Facultatif) Réseau cloud privé virtuel dans lequel la tâche est exécutée. Par défaut, Dataplex utilise le réseau VPC nommé Default au sein du projet.
Vous ne devez utiliser qu'une seule des méthodes --vpc-network-name ou --vpc-sub-network-name.
--vpc-sub-network-name (Facultatif) Sous-réseau VPC dans lequel le job s'exécute.
Vous ne devez utiliser qu'une seule des méthodes --vpc-sub-network-name ou --vpc-network-name.
--trigger-type Type de déclencheur de la tâche spécifiée par l'utilisateur. Les valeurs doivent être l'une des suivantes :
ON_DEMAND : la tâche s'exécute une fois peu de temps après sa création.
RECURRING : la tâche s'exécute régulièrement selon un calendrier.
--trigger-start-time Facultatif: heure de la première exécution de la tâche. Le format est `{year}-{month}-{day}T{hour}:{min}:{sec}Z`, où le fuseau horaire est UTC. Par exemple, "2017-01-15T01:30:00Z" encode 01:30 UTC le 15 janvier 2017. Si cette valeur n'est pas spécifiée, la tâche sera exécutée après avoir été envoyée si le type de déclencheur est ON_DEMAND ou selon le calendrier spécifié si le type de déclencheur est RECURRING.
--trigger-disabled Facultatif: empêche l'exécution de la tâche. Ce paramètre n'annule pas les tâches déjà en cours d'exécution, mais désactive temporairement les tâches RECURRING.
--trigger-max-retires Facultatif: nombre de tentatives avant l'annulation. Définissez la valeur sur zéro pour ne jamais tenter de relancer une tâche ayant échoué.
--trigger-schedule Programmation Cron pour exécuter régulièrement des tâches.
--description Facultatif: description de la tâche.
--display-name Facultatif: nom à afficher de la tâche.
--labels Facultatif: liste des paires de libellés KEY=VALUE à ajouter.
--execution-args Facultatif: les arguments à transmettre à la tâche. Les arguments peuvent être une combinaison de paires clé/valeur. Vous pouvez transmettre une liste de paires clé/valeur séparées par une virgule en tant qu'arguments d'exécution. Pour transmettre des arguments de position, définissez la clé sur TASK_ARGS, puis définissez la valeur sur une chaîne de tous les arguments de position séparés par une virgule. Pour utiliser un délimiteur autre qu'une virgule, consultez la section Échappement.
Si key-value et les arguments positionnels sont transmis ensemble, TASK_ARGS est transmis en tant que dernier argument.
--execution-service-account Compte de service à utiliser pour exécuter une tâche.
--max-job-execution-lifetime (Facultatif) Durée maximale avant l'expiration de l'exécution du job.
--container-image Facultatif: Image de conteneur personnalisé pour l'environnement d'exécution du job. Si aucune valeur n'est spécifiée, une image de conteneur par défaut est utilisée.
--kms-key Facultatif: clé Cloud KMS à utiliser pour le chiffrement, au format suivant:
projects/{project_number}/locations/{location_id}/keyRings/{key-ring-name}/cryptoKeys/{key-name}

Exemple Java:

glcoud dataplex tasks create --project=<project-name> --location=<location> --lake=<lake-id> --trigger-type=ON_DEMAND –spark-main-jar-file-uri=<gcs location to java file> --execution-service-account=<service-account-email> --trigger-start-time=<timestamp after which job starts ex. 2099-01-01T00:00:00Z> --labels=key1=value1,key2=value3,key3=value3 --execution-args=arg1=value1,arg2=value3,arg3=value3 <task-id>

Exemple avec PySpark:

gcloud dataplex tasks create --project=<project-name> --location=<location> --lake=<lake-id> --trigger-type=RECURRING --trigger-schedule=<Cron schedule https://en.wikipedia.org/wiki/Cron> --spark-python-script-file=<gcs location to python script> --execution-service-account=<service-account-email> --execution-args=^::^arg1=value1::arg2=value2::TASK_ARGS="pos-arg1, pos-arg2" <task-id>

REST

Pour créer une tâche, utilisez APIs Explorer.

Planifier une tâche Spark SQL

gcloud

Pour planifier une tâche Spark SQL, exécutez la même commande de gcloud CLI que pour l'option Programmer une tâche Spark (Java ou Python), avec les paramètres supplémentaires suivants:

Paramètres Description
--spark-sql-script Texte de la requête SQL. spark-sql-script ou spark-sql-script-file est requis.
--spark-sql-script-file Référence à un fichier de requête. Cette valeur peut correspondre à l'URI Cloud Storage du fichier de requête ou au chemin d'accès au contenu du script SQL. spark-sql-script ou spark-sql-script-file est requis.
--execution-args Pour les tâches Spark SQL, les arguments suivants sont obligatoires et doivent être transmis en tant qu'arguments positionnels:
--output_location, <GCS uri of the output directory>
--output_format, <output file format>.
Les formats compatibles sont les fichiers CSV, JSON, Parquet et Orc.
gcloud dataplex tasks create --project=<project-name> --location=<location> --lake=<lake-id> --execution-service-account=<service-account-email> --trigger-type=ON_DEMAND --spark-sql-script=<sql-script> --execution-args=^::^TASK_ARGS="--output_location, <gcs folder location>, --output_format, json" <sql-task-id>

REST

Pour créer une tâche, utilisez APIs Explorer.

Surveiller votre tâche

Console

  1. Dans la console Google Cloud, accédez à la page Dataplex:

    Accéder à Dataplex

  2. Accédez à la vue Processus.

  3. L'onglet Tasks (Tâches) contient une liste de tâches, filtrées par type de modèle de tâche.

  4. Dans la colonne Nom, cliquez sur la tâche que vous souhaitez afficher.

  5. Cliquez sur l'ID de tâche de la tâche que vous souhaitez afficher.

    La page Dataproc s'ouvre dans la console Google Cloud et vous permet d'afficher les détails de surveillance et de sortie.

gcloud

Le tableau suivant répertorie les commandes de gcloud CLI permettant de surveiller vos tâches.

Action Commande gcloud CLI
Lister les tâches gcloud dataplex tasks list --project=<project-name> --location=<location> --lake=<lake-id>
Afficher les détails d'une tâche gcloud dataplex tasks describe --project=<project-name> --location=<location> --lake=<lake-id> <task-id>
Répertorier les tâches d'une tâche gcloud dataplex tasks jobs list --project=<project-name> --location=<location> --lake=<lake-id> --task=<task-id>
Afficher les détails d'un job gcloud dataplex tasks jobs describe --project=<project-name> --location=<location> --lake=<lake-id> --task=<task-id> <job-id>

Dataplex exécute les tâches sur Dataproc sans serveur (par lots). Pour afficher les journaux d'exécution d'une tâche Dataplex, procédez comme suit:

  1. Obtenez l'ID du job Dataproc sans serveur (lots). Exécutez la commande suivante :

    gcloud dataplex tasks jobs describe --project=<project-name> --location=<location> --lake=<lake-id> --task=<task-id> <job-id>
    
  2. Affichez les journaux. Exécutez la commande suivante, en utilisant l'ID de tâche obtenu lors de l'exécution de la commande précédente:

    gcloud beta dataproc batches wait --project=<project-name> --region=<location> <job-id>
    

REST

Pour appliquer (get ou list) une tâche ou une tâche, utilisez APIs Explorer.

Gérer le planning

Dans la console Google Cloud, dans Dataplex, vous pouvez modifier la planification d'une tâche, la supprimer ou annuler une tâche en cours. Le tableau suivant répertorie les commandes de gcloud CLI pour ces actions.

Action Commande gcloud CLI
Modifier le planning des tâches gcloud dataplex tasks update --project=<project-name> --location=<location> --lake=<lake-id> --trigger-schedule=<updated-schedule> <task-id>
Supprimer une tâche gcloud dataplex tasks delete --project=<project-name> --location=<location> --lake=<lake-id> <task-id>
Annuler une mission gcloud dataplex tasks jobs cancel --project=<project-name> --location=<location> --lake=<lake-id> --task=<task-id> <job-id>

Étapes suivantes