Usa el linaje de datos en Dataproc

El linaje de datos es una función de Dataplex que te permite hacer un seguimiento de cómo se mueven los datos a través de tus sistemas: de dónde provienen, a dónde se pasan y qué transformaciones se aplican.

El linaje de datos está disponible para todos los trabajos de Spark de Dataproc, excepto SparkR, con imágenes de Dataproc Compute Engine 2.0.74+ y 2.1.22+. El linaje está disponible para las fuentes de datos de BigQuery y Cloud Storage.

Una vez que habilitas la función en tu clúster de Dataproc, los trabajos de Spark de Dataproc capturan eventos de linaje y los publican en la API de Data Lineage de Dataplex. Dataproc se integra en la API de Data Lineage a través de OpenLineage mediante el complemento de Spark OpenLineage.

Puedes acceder a la información de linaje mediante Dataplex con las siguientes opciones:

Limitaciones

El linaje no es compatible con los siguientes elementos:

  • Conector de BigQuery versión 2 (API de fuente de datos versión 2 de Spark)
  • Carga de trabajo de transmisión de Spark

Antes de comenzar

  1. En la consola de Google Cloud, en la página del selector de proyectos, selecciona el proyecto que contiene el clúster de Dataproc para el que deseas hacer un seguimiento del linaje.

    Ir al selector de proyectos

  2. Habilitar las APIs de Data Lineage y Data Catalog

    Habilita las APIs

Funciones obligatorias

A fin de obtener los permisos que necesitas para usar el linaje de datos en Dataproc, pídele a tu administrador que te otorgue los siguientes roles de IAM en la cuenta de servicio de la VM del clúster de Dataproc:

Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.

Es posible que también puedas obtener los permisos necesarios mediante funciones personalizadas, o bien otras funciones predefinidas.

Habilitar el linaje de datos en Dataproc

Habilita el linaje a nivel del clúster para que todos los trabajos de Spark enviados en el clúster informen la información del linaje a la API de Data Lineage.

Crea un clúster de Dataproc

Crea un clúster de Dataproc con la propiedad dataproc:dataproc.lineage.enabled establecida en true.

gcloud dataproc clusters create CLUSTER_NAME \
--region REGION \
--zone ZONE \
--project PROJECT_ID \
--properties 'dataproc:dataproc.lineage.enabled=true' \
--scopes https://www.googleapis.com/auth/cloud-platform

Envía un trabajo de Spark

Cuando envías un trabajo de Spark en un clúster de Dataproc que se creó con el linaje habilitado, Dataproc captura la información del linaje y la informa a la API de Data Lineage.

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

Las propiedades spark.openlineage.namespace y spark.openlineage.appName son opcionales y se usan para identificar el trabajo de forma única. Si no pasas estas propiedades, Dataproc usa los siguientes valores predeterminados:

  • Valor predeterminado de spark.openlineage.namespace: PROJECT_ID
  • Valor predeterminado de spark.openlineage.appName: spark.app.name

Ver gráficos de linaje en Dataplex

Un gráfico de visualización de linaje muestra las relaciones entre los recursos de tu proyecto y los procesos que los crearon. Puedes ver la información del linaje de datos en forma de una visualización de gráfico en la consola de Google Cloud o recuperarla de la API de linaje de datos en el formato de datos JSON.

Para obtener más información, consulta Visualiza gráficos de linaje en la IU de Dataplex.

Ejemplo

Considera el siguiente trabajo de Spark que lee datos de una tabla de BigQuery y escribe en otra tabla de BigQuery:

#!/usr/bin/env python

from pyspark.sql import SparkSession
import sys

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

bucket = lineage-ol-test
spark.conf.set('temporaryGcsBucket', bucket)

source = sample.source
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 = sample.destination
word_count.write.format('bigquery') \
  .option('table', destination) \
  .save()

Este trabajo de Spark crea el siguiente gráfico de linaje en la IU de Dataplex:

Gráfico de linaje de muestra

Inhabilitar el linaje de datos en Dataproc

Después de habilitar el linaje cuando creas un clúster, no puedes inhabilitar el linaje a nivel del clúster. Para inhabilitar el linaje en un clúster de Dataproc, vuelve a crear el clúster sin la propiedad dataproc:dataproc.lineage.enabled.

Si deseas inhabilitar el linaje para un trabajo en particular en un clúster que se creó con el linaje habilitado, debes pasar la propiedad spark.extraListeners con un valor vacío cuando envíes el trabajo.

¿Qué sigue?