Utiliser la traçabilité des données Spark

Ce document explique comment activer la provenance des données pour vos tâches Spark Managed Service for Apache Spark au niveau du projet ou du cluster.

La traçabilité des données est une fonctionnalité de Knowledge Catalog qui vous permet de suivre la façon dont les données transitent par vos systèmes : leur origine, leur destination, et les transformations qui leur sont appliquées.

La traçabilité des données est disponible pour tous les jobs Spark du service géré pour Apache Spark, à l'exception des jobs SparkR et Spark Streaming. Elle est compatible avec les sources de données BigQuery et Cloud Storage. Il est inclus dans les versions d'image Managed Service pour Apache Spark 2.0.74+, 2.1.22+, 2.2.50+, 2.3.1+ et 3.0+.

Une fois que vous avez activé la fonctionnalité dans votre cluster Managed Service pour Apache Spark, les jobs Spark Managed Service pour Apache Spark capturent les événements de traçabilité des données et les publient dans l'API Data Lineage du Knowledge Catalog. Managed Service pour Apache Spark s'intègre à l'API Data Lineage via OpenLineage, à l'aide du plug-in OpenLineage Spark.

Vous pouvez accéder aux informations sur la traçabilité des données via Knowledge Catalog, en utilisant les éléments suivants :

Avant de commencer

  1. Dans la console Google Cloud , sur la page de sélection du projet, sélectionnez le projet contenant le cluster Managed Service for Apache Spark pour lequel vous souhaitez suivre la traçabilité.

    Accéder au sélecteur de projet

  2. Activez l'API Data Lineage.

    Activer les API

    Modifications à venir concernant la traçabilité des données Spark : consultez les notes de version de Managed Service for Apache Spark pour en savoir plus sur une modification qui rendra automatiquement la traçabilité des données Spark disponible pour vos projets et clusters lorsque vous activerez l'API Data Lineage (voir Contrôler l'ingestion de la traçabilité pour un service), sans nécessiter de paramètres supplémentaires au niveau du projet ou du cluster.

Rôles requis

Si vous créez un cluster Managed Service pour Apache Spark à l'aide du compte de service de VM par défaut, il dispose du rôle Managed Service for Apache Spark Worker, qui permet le traçage des données. Aucune autre action n'est nécessaire.

Toutefois, si vous créez un cluster Managed Service for Apache Spark qui utilise un compte de service personnalisé, vous devez attribuer un rôle requis à ce compte pour activer le lineage des données sur le cluster, comme expliqué dans le paragraphe suivant.

Pour obtenir les autorisations nécessaires pour utiliser le lineage des données avec Managed Service for Apache Spark, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le compte de service personnalisé de votre cluster :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Activer la traçabilité des données Spark

Vous pouvez activer la traçabilité des données Spark au niveau du projet ou du cluster.

Activer la traçabilité des données Spark au niveau du projet

Une fois la traçabilité des données Spark activée au niveau du projet, les jobs Spark ultérieurs exécutés sur les clusters Managed Service for Apache Spark du projet seront activés pour la traçabilité des données Spark.

Pour activer le lineage des données Spark au niveau du projet, définissez les métadonnées personnalisées suivantes pour le projet :

Clé Valeur
DATAPROC_LINEAGE_ENABLED true
DATAPROC_CLUSTER_SCOPES https://www.googleapis.com/auth/cloud-platform
La définition de ce niveau d'accès aux VM n'est nécessaire que pour les clusters de version d'image 2.0. Il est automatiquement défini sur les clusters de version d'image 2.1 et ultérieure.

Vous pouvez désactiver la traçabilité des données Spark au niveau du projet en définissant les métadonnées DATAPROC_LINEAGE_ENABLED sur false.

Activer la traçabilité des données Spark au niveau du cluster

Si vous activez le lineage des données Spark lorsque vous créez un cluster, le lineage des données Spark sera activé pour les jobs Spark compatibles qui s'exécutent sur les clusters Managed Service for Apache Spark. Ce paramètre remplace tout paramètre de traçabilité des données Spark au niveau du projet. Si la traçabilité des données Spark est désactivée au niveau du projet, mais activée au niveau du cluster, le niveau du cluster est prioritaire. La traçabilité des données sera activée pour les tâches Spark compatibles exécutées sur le cluster.

Pour activer le lineage des données Spark sur un cluster, créez un cluster Managed Service for Apache Spark avec la propriété de cluster dataproc:dataproc.lineage.enabled définie sur true.

Exemple de gcloud CLI :

gcloud dataproc clusters create CLUSTER_NAME \
    --project PROJECT_ID \
    --region REGION \
    --properties 'dataproc:dataproc.lineage.enabled=true'

Vous pouvez désactiver le lineage des données Spark sur un cluster en définissant la propriété dataproc:dataproc.lineage.enabled sur false lorsque vous créez le cluster.

  • Désactiver le traçage des données sur un cluster : pour créer un cluster avec le traçage désactivé, définissez dataproc:dataproc.lineage.enabled=false. Une fois le cluster créé, vous ne pouvez pas désactiver le lignage des données Spark sur le cluster. Pour désactiver le lineage des données Spark sur un cluster existant, vous pouvez recréer le cluster en définissant la propriété dataproc:dataproc.lineage.enabled sur false.

  • Définissez le champ d'application sur les clusters de version d'image 2.0 : l'accès aux VM du cluster Managed Service pour Apache Spark champ d'application cloud-platform est requis pour la traçabilité des données Spark. Les clusters Managed Service pour Apache Spark créés avec la version d'image 2.1 ou ultérieure sont compatibles avec cloud-platform. Si vous spécifiez la version 2.0 de l'image Managed Service pour Apache Spark lorsque vous créez un cluster, définissez le champ "scope" sur cloud-platform.

Désactiver la traçabilité des données Spark pour un job

Si le lineage des données Spark est activé sur un cluster, vous pouvez le désactiver sur une tâche en transmettant la propriété spark.extraListeners avec une valeur vide ("") lorsque vous envoyez la tâche.

gcloud dataproc jobs submit spark \
    --cluster=CLUSTER_NAME \
    --project PROJECT_ID \
    --region REGION \
    --class CLASS \
    --jars=gs://APPLICATION_BUCKET/spark-application.jar \
    --properties=spark.extraListeners=''

Envoyer une tâche Spark

Lorsque vous envoyez un job Spark compatible sur un cluster Managed Service pour Apache Spark créé avec la traçabilité des données Spark activée, Managed Service pour Apache Spark capture et signale les informations de traçabilité des données à l'API Data Lineage.

gcloud dataproc jobs submit spark \
    --cluster=CLUSTER_NAME \
    --project PROJECT_ID \
    --region REGION \
    --class CLASS \
    --jars=gs://APPLICATION_BUCKET/spark-application.jar \
    --properties=spark.openlineage.namespace=CUSTOM_NAMESPACE,spark.openlineage.appName=CUSTOM_APPNAME

Remarques :

  • L'ajout des propriétés spark.openlineage.namespace et spark.openlineage.appName, qui permettent d'identifier de manière unique le job, est facultatif. Si vous n'ajoutez pas ces propriétés, Managed Service for Apache Spark utilise les valeurs par défaut suivantes :
    • Valeur par défaut pour spark.openlineage.namespace : PROJECT_ID
    • Valeur par défaut pour spark.openlineage.appName : spark.app.name

Afficher la traçabilité dans Knowledge Catalog

Un graphique de traçabilité affiche les relations entre les ressources de votre projet et les processus qui les ont créées. Vous pouvez afficher des informations sur la traçabilité des données dans la console Google Cloud ou les récupérer à partir de l'API Data Lineage sous forme de données JSON.

Exemple de code PySpark :

Le job PySpark suivant lit les données d'une table BigQuery publique, puis écrit la sortie dans une nouvelle table d'un ensemble de données BigQuery existant. Il utilise un bucket Cloud Storage pour le stockage temporaire.

#!/usr/bin/env python

from pyspark.sql import SparkSession
import sys

spark = SparkSession \
  .builder \
  .appName('LINEAGE_BQ_TO_BQ') \
  .getOrCreate()

bucket = 'gs://BUCKET`
spark.conf.set('temporaryCloudStorageBucket', bucket)

source = 'bigquery-public-data:samples.shakespeare'
words = spark.read.format('bigquery') \
  .option('table', source) \
  .load()
words.createOrReplaceTempView('words')

word_count = spark.sql('SELECT word, SUM(word_count) AS word_count FROM words GROUP BY word')

destination_table = 'PROJECT_ID:DATASET.TABLE'
word_count.write.format('bigquery') \
  .option('table', destination_table) \
  .save()

Effectuez les remplacements suivants :

  • BUCKET : nom d'un bucket Cloud Storage existant

  • PROJECT_ID, DATASET et TABLE : ID du projet, nom d'un ensemble de données BigQuery existant et nom d'une nouvelle table à créer dans l'ensemble de données (la table ne doit pas exister)

Vous pouvez afficher le graphique de traçabilité dans l'interface utilisateur Knowledge Catalog.

Exemple de graphique de traçabilité

Étapes suivantes