En este documento, se describe cómo habilitar el linaje de datos para tus trabajos de Managed Service para Apache Spark, ya sea a nivel de proyecto o de clúster.
El linaje de datos es una función de Knowledge Catalog que te permite supervisar el movimiento de los datos a través de tus sistemas para saber de dónde provienen, a dónde se pasan y qué transformaciones se les aplican.
El linaje de datos está disponible para todos los trabajos de Managed Service para Apache Spark,
excepto los trabajos de SparkR y Spark Streaming, y admite fuentes de datos de BigQuery y Cloud Storage. Se incluye con las versiones de imagen 2.0.74+, 2.1.22+,
2.2.50+, 2.3.1+ y 3.0 de Managed Service para Apache Spark.
Una vez que habilites la función en tu clúster de Managed Service para Apache Spark, los trabajos de Spark de Managed Service para Apache Spark capturarán los eventos de linaje de datos y los publicarán en la API de linaje de datos de Knowledge Catalog. Managed Service para Apache Spark se integra en la API de Data Lineage a través de OpenLineage, con el complemento de OpenLineage Spark.
Puedes acceder a la información del linaje de datos a través de Knowledge Catalog con lo siguiente:
Antes de comenzar
En la consola de Google Cloud , en la página del selector de proyectos, selecciona el proyecto que contiene el clúster de Managed Service para Apache Spark para el que deseas realizar un seguimiento del linaje.
Habilita la API de Data Lineage.
Próximos cambios en el linaje de datos de Spark Consulta las notas de la versión de Managed Service para Apache Spark para ver el anuncio de un cambio que hará que el linaje de datos de Spark esté disponible automáticamente para tus proyectos y clústeres cuando habilites la API de Data Lineage (consulta Controla la transferencia de linaje para un servicio) sin necesidad de realizar parámetros de configuración adicionales a nivel de proyecto o clúster.
Roles obligatorios
Si creas un clúster de Managed Service para Apache Spark con la
cuenta de servicio de VM predeterminada,
tendrá el rol
Dataproc Worker. Este rol incluye el permiso datalineage.locations.processOpenLineageMessage,
que el complemento de OpenLineage Spark usa para capturar y publicar eventos de linaje en la
API de Data Lineage. No es necesario realizar ninguna otra acción.
Si creas un clúster de Managed Service para Apache Spark que use una cuenta de servicio personalizada, esta debe tener permiso para publicar eventos de linaje. Para seguir el principio de privilegio mínimo, otorga el rol mínimo requerido para tu caso de uso:
- Trabajador de Dataproc (
roles/dataproc.worker): Es el rol estándar necesario para las operaciones del plano de datos de Managed Service para Apache Spark. Debido a que este rol ya incluye el permisodatalineage.locations.processOpenLineageMessage, si tu cuenta de servicio personalizada ya tiene este rol, no necesitas otorgar un rol de linaje de datos adicional. - Productor de eventos de linaje de datos (
roles/datalineage.producer): Es el rol mínimo independiente de linaje de datos que se requiere para que una cuenta de servicio personalizada publique eventos de linaje. Otorga este rol si la cuenta de servicio no tiene el rol de trabajador de Dataproc. - Editor de linaje de datos (
roles/datalineage.editor): Otorga permisos para editar y borrar procesos y eventos de linaje, además de publicarlos. Este rol proporciona más permisos de los necesarios para la ejecución de la canalización estándar y solo se requiere si las cargas de trabajo deben modificar los metadatos de linaje existentes. - Administrador de linaje de datos (
roles/datalineage.admin): otorga acceso de administrador completo a los recursos de linaje de datos. Este rol no es obligatorio para las cuentas de servicio del clúster.
Habilita el linaje de datos de Spark
Puedes habilitar el linaje de datos de Spark a nivel de proyecto o de clúster.
Habilita el linaje de datos de Spark a nivel del proyecto
Después de habilitar el linaje de datos de Spark a nivel del proyecto, los trabajos de Spark posteriores que se ejecuten en los clústeres de Managed Service para Apache Spark del proyecto tendrán habilitado el linaje de datos de Spark.
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-platformEstablecer este permiso de acceso de la VM solo es necesario para los clústeres de la versión de imagen 2.0. Se configura automáticamente en los clústeres con la versión de imagen 2.1 y posteriores. |
Puedes inhabilitar el linaje de datos de Spark a nivel del proyecto si configuras los metadatos de DATAPROC_LINEAGE_ENABLED como false.
Habilita el linaje de datos de Spark a nivel del clúster
Si habilitas el linaje de datos de Spark cuando creas un clúster, los trabajos de Spark compatibles que se ejecuten en clústeres de Managed Service para Apache Spark tendrán habilitado el linaje de datos de Spark. Este parámetro de configuración anula cualquier parámetro de configuración de linaje de datos de Spark a nivel de proyecto: si el linaje de datos de Spark está inhabilitado a nivel de proyecto, pero habilitado a nivel de clúster, el nivel de clúster tiene prioridad, y los trabajos de Spark compatibles que se ejecuten en el clúster tendrán habilitado el linaje de datos.
Para habilitar el linaje de datos de Spark en un clúster,
crea un clúster de Managed Service para Apache Spark
con la propiedad de clúster dataproc:dataproc.lineage.enabled establecida en true.
Ejemplo de gcloud CLI:
gcloud dataproc clusters create CLUSTER_NAME \
--project PROJECT_ID \
--region REGION \
--properties 'dataproc:dataproc.lineage.enabled=true'Puedes inhabilitar el linaje de datos de Spark en un clúster
estableciendo la propiedad dataproc:dataproc.lineage.enabled en false
cuando crees el clúster.
Inhabilita el linaje de datos en un clúster: Para crear un clúster con el linaje inhabilitado, establece
dataproc:dataproc.lineage.enabled=false. Después de crear el clúster, no puedes inhabilitar el linaje de datos de Spark en el clúster. Para inhabilitar el linaje de datos de Spark en un clúster existente, puedes volver a crear el clúster con la propiedaddataproc:dataproc.lineage.enabledestablecida enfalse.Establece el permiso de acceso en los clústeres de la versión de imagen 2.0: El acceso a las VM del clúster de Managed Service para Apache Spark
cloud-platformpermiso de acceso es obligatorio para el linaje de datos de Spark. Los clústeres de versión de imagen de Managed Service para Apache Spark creados con la versión de imagen2.1y posteriores tienencloud-platformhabilitado. Si especificas la versión de la imagen de Managed Service para Apache Spark2.0cuando creas un clúster, establece el permiso encloud-platform.
Inhabilita el linaje de datos de Spark en un trabajo
Si el linaje de datos de Spark está habilitado en un clúster, puedes inhabilitarlo
en un trabajo pasando la propiedad spark.extraListeners
con un valor vacío ("") cuando envíes el trabajo.
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=''Enviar un trabajo de Spark
Cuando envías un trabajo de Spark compatible en un clúster de Managed Service para Apache Spark que se creó con el linaje de datos de Spark habilitado, Managed Service para Apache Spark captura y, luego, informa 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:
- Agregar las propiedades
spark.openlineage.namespaceyspark.openlineage.appName, que se usan para identificar el trabajo de forma inequívoca, es opcional. Si no agregas estas propiedades, Managed Service para Apache Spark 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
Consultar el linaje en Knowledge 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 consola de Google Cloud o recuperarla de la API de Data Lineage en forma de datos JSON.
Código de ejemplo 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: El ID del proyecto, el nombre de un conjunto de datos de BigQuery existente y el nombre de una tabla nueva que se creará en el conjunto de datos (la tabla no debe existir)
Puedes ver el gráfico de linaje en la IU de Knowledge Catalog.
¿Qué sigue?
- Obtén más información sobre el linaje de datos.