Usar a linhagem de dados no Dataproc

A linhagem de dados é um recurso do Dataplex que permite rastrear como os dados se movem pelos sistemas: de onde vêm, para onde são transmitidos e quais transformações são aplicadas a eles.

A linhagem de dados está disponível para todos os jobs do Spark do Dataproc, exceto o SparkR, com imagens do Dataproc Compute Engine 2.0.74+ e 2.1.22+. A linhagem está disponível para fontes de dados do BigQuery e do Cloud Storage.

Depois de ativar o recurso no cluster do Dataproc, os jobs do Spark do Dataproc capturam eventos de linhagem e os publicam na API Data Lineage do Dataplex. O Dataproc se integra à API Data Lineage por meio do OpenLineage (link em inglês) usando o plug-in OpenLineage Spark.

É possível acessar informações de linhagem pelo Dataplex usando o seguinte:

Limitações

A linhagem não é compatível com:

  • Versão 2 do conector do BigQuery (versão 2 da API de origem de dados do Spark)
  • Carga de trabalho de streaming do Spark

Antes de começar

  1. No console do Google Cloud, na página do seletor de projetos, selecione o projeto que contém o cluster do Dataproc de que você quer rastrear a linhagem.

    Acessar o seletor de projetos

  2. Ativar as APIs Data Lineage e Data Catalog.

    Ativar as APIs

Funções exigidas

Para receber as permissões necessárias para usar a linhagem de dados no Dataproc, peça ao administrador para conceder a você os seguintes papéis do IAM na conta de serviço da VM do cluster do Dataproc:

Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

Talvez você também consiga receber as permissões necessárias por meio de papéis personalizados ou outros papéis predefinidos.

Ativar a linhagem de dados no Dataproc

Ative a linhagem no nível do cluster para que todos os jobs do Spark enviados no cluster informem as informações de linhagem para a API Data Lineage.

Crie um cluster do Dataproc:

Crie um cluster do Dataproc com a propriedade dataproc:dataproc.lineage.enabled definida como 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

Enviar um job do Spark

Quando você envia um job do Spark em um cluster do Dataproc criado com a linhagem ativada, o Dataproc captura e relata as informações de linhagem para a API 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

As propriedades spark.openlineage.namespace e spark.openlineage.appName são opcionais e são usadas para identificar exclusivamente o job. Se você não transmitir essas propriedades, o Dataproc usará os seguintes valores padrão:

  • Valor padrão de spark.openlineage.namespace: PROJECT_ID
  • Valor padrão de spark.openlineage.appName: spark.app.name

Conferir gráficos de linhagem no Dataplex

Um gráfico de visualização de linhagem exibe as relações entre os recursos do projeto e os processos que os criaram. É possível ver as informações de linhagem de dados na forma de uma visualização gráfica no console do Google Cloud ou recuperá-las na API Data Lineage na forma de dados JSON.

Para mais informações, consulte Ver gráficos de linhagem na interface do Dataplex.

Exemplo

Considere o job do Spark a seguir, que lê dados de uma tabela do BigQuery e grava em outra tabela do 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()

Esse job do Spark cria o seguinte gráfico de linhagem na interface do Dataplex:

Exemplo de gráfico de linhagem

Desativar a linhagem de dados no Dataproc

Depois de ativar a linhagem ao criar um cluster, não será possível desativar a linhagem no nível do cluster. Para desativar a linhagem em um cluster do Dataproc, recrie o cluster sem a propriedade dataproc:dataproc.lineage.enabled.

Para desativar a linhagem de um job específico em um cluster criado com a linhagem ativada, transmita a propriedade spark.extraListeners com valor vazio ao enviar o job.

A seguir