En este documento, se describe cómo habilitar el linaje de datos para tus trabajos de Spark de Dataproc a nivel del proyecto o del clúster.
El linaje de datos es una función de Dataplex Universal Catalog que te permite hacer un seguimiento de cómo los datos se mueven a través de tus sistemas: de dónde provienen, a dónde se pasan y qué transformaciones se aplican a ellos.
El linaje de datos está disponible para todos los trabajos de Spark de Dataproc excepto los trabajos de SparkR y de transmisión de Spark, y admite fuentes de datos de BigQuery y Cloud Storage Se incluye con Dataproc en Compute Engine 2.0.74+, 2.1.22+, 2.2.50 y versiones de imagen posteriores.
Una vez que habilites la función en tu clúster de Dataproc, los trabajos de Spark de Dataproc capturarán eventos de linaje de datos y los publicarán en la API de Data Lineage de Dataplex Universal Catalog . Dataproc se integra con la API de Data Lineage a través de OpenLineage, mediante el complemento OpenLineage Spark.
Puedes acceder a la información del linaje de datos a través de Dataplex Universal Catalog con lo siguiente:
Antes de comenzar
En la Google Cloud consola, en la página del selector de proyectos, selecciona el proyecto que contiene el clúster de Dataproc para el que deseas realizar un seguimiento del linaje.
Habilita la API de Data Lineage.
Roles obligatorios
Si creas un clúster de Dataproc con la
cuenta de servicio predeterminada de la VM,
tendrá el rol Dataproc Worker, que habilita el linaje de datos. No es necesario realizar ninguna acción adicional.
Sin embargo, si creas un clúster de Dataproc que usa una cuenta de servicio personalizada, para habilitar el linaje de datos en el clúster, debes otorgar un rol obligatorio a la cuenta de servicio personalizada como se explica en el siguiente párrafo.
Para obtener los permisos que necesitas para usar el linaje de datos con Dataproc, pídele a tu administrador que te otorgue los siguientes roles de IAM en la cuenta de servicio personalizada de tu clúster:
-
Otorga uno de los siguientes roles:
-
Trabajador de Dataproc (
roles/dataproc.worker) -
Editor de linaje de datos (
roles/datalineage.editor) -
Productor de linaje de datos (
roles/datalineage.producer) -
Administrador de linaje de datos (
roles/datalineage.admin)
-
Trabajador de Dataproc (
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Habilita el linaje de datos de Spark a nivel del proyecto
Puedes habilitar el linaje de datos de Spark a nivel del proyecto. Los trabajos de Spark compatibles que se ejecutan en clústeres creados después de que se habilita el linaje de datos en un proyecto tendrán habilitado el linaje de datos. Ten en cuenta que los trabajos que se ejecutan en clústeres existentes (clústeres que se crearon antes de habilitar el linaje de datos a nivel del proyecto) no tendrán habilitado el linaje de datos.
Habilita el linaje de datos de Spark a nivel del proyecto
Para habilitar el linaje de datos de Spark a nivel del proyecto, establece los siguientes metadatos personalizados del proyecto:
| Clave | Valor |
|---|---|
DATAPROC_LINEAGE_ENABLED |
true |
DATAPROC_CLUSTER_SCOPES |
https://www.googleapis.com/auth/cloud-platform |
Para inhabilitar el linaje de datos de Spark a nivel del proyecto, establece los
DATAPROC_LINEAGE_ENABLED metadatos en false.
Habilita el linaje de datos de Spark a nivel del clúster
Puedes habilitar el linaje de datos de Spark cuando creas un clúster para que todos los trabajos de Spark compatibles que se envíen al clúster tengan habilitado el linaje de datos.
Habilita el linaje de datos de Spark a nivel del clúster
Para habilitar el linaje de datos de Spark en un clúster,
crea un clúster de Dataproc
con la propiedad de clúster dataproc:dataproc.lineage.enabled establecida en true.
Clústeres de versión de imagen 2.0: Se requiere el permiso
cloud-platform de acceso a la VM del clúster de Dataproc
para el linaje de datos de Spark. Los clústeres de versión de imagen de Dataproc creados con la versión de imagen 2.1 y versiones posteriores tienen cloud-platform habilitado. Si especificas la versión de imagen
2.0 de Dataproc cuando creas un clúster, establece el
permiso
en cloud-platform.
Ejemplo de la CLI de gcloud:
gcloud dataproc clusters create CLUSTER_NAME \
--project PROJECT_ID \
--region REGION \
--properties 'dataproc:dataproc.lineage.enabled=true'Inhabilita el linaje de datos de Spark en un trabajo
Si habilitas el linaje de datos de Spark a nivel del clúster, puedes inhabilitar
el linaje de datos de Spark en un trabajo específico si pasas la spark.extraListeners
propiedad con un valor vacío ("") cuando envías el trabajo.
Una vez habilitado, no podrás inhabilitar el linaje de datos de Spark en el clúster. Para eliminar
el linaje de datos de Spark en todos los trabajos del clúster, puedes
volver a crear el clúster
sin la propiedad dataproc:dataproc.lineage.enabled.
Enviar un trabajo de Spark
Cuando envías un trabajo de Spark en un clúster de Dataproc que se creó con el linaje de datos de Spark habilitado, Dataproc captura y envía la información del linaje de datos a la API de 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_APPNAMENotas:
- Es opcional agregar las propiedades
spark.openlineage.namespaceyspark.openlineage.appName, que se usan para identificar de forma única el trabajo. Si no agregas estas propiedades, Dataproc usa los siguientes valores predeterminados:- Valor predeterminado para
spark.openlineage.namespace: PROJECT_ID - Valor predeterminado para
spark.openlineage.appName:spark.app.name
- Valor predeterminado para
Consulta el linaje en Dataplex Universal Catalog
Un gráfico 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 la Google Cloud consola, o recuperarla de la API de Data Lineage en forma de datos JSON.
Ejemplo de código de PySpark:
El siguiente trabajo de PySpark lee datos de una tabla pública de BigQuery y, luego, escribe el resultado en una tabla nueva en un conjunto de datos de BigQuery existente. Usa un bucket de Cloud Storage para el almacenamiento temporal.
#!/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()
Realiza los siguientes reemplazos:
BUCKET: Es el nombre de un bucket de Cloud Storage existente.
PROJECT_ID, DATASET, y TABLE: Inserta tu ID del proyecto, el nombre de un conjunto de datos de BigQuery existente y el nombre de una tabla nueva para crear en el conjunto de datos (la tabla no debe existir).
Puedes ver el gráfico de linaje en la IU de Dataplex Universal Catalog.
¿Qué sigue?
- Obtén más información sobre el linaje de datos.