Ativar a linhagem de dados no Dataproc

Este documento descreve como ativar a linhagem de dados para seus jobs do Dataproc Spark no nível do projeto ou do cluster.

Visão geral

A linhagem de dados é um recurso do Dataplex que permite acompanhar como os dados são transmitidos pelos sistemas: origem, destino e quais transformações são aplicadas a eles.

O lineage de dados está disponível para todos os trabalhos do Dataproc Spark, exceto o SparkR, com imagens do Dataproc Compute Engine 2.0.74+ e 2.1.22+, e oferece suporte a 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 de dados e os publicam na API Data Lineage do Dataplex. O Dataproc se integra à API Data Lineage usando o OpenLineage, com o plug-in do OpenLineage Spark.

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

Limitações

A linhagem de dados não está disponível para jobs de streaming do SparkR ou 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 para o qual você quer rastrear a linhagem.

    Acessar o seletor de projetos

  2. Ative 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 a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Ativar a linhagem de dados no nível do projeto

É possível ativar a linhagem de dados no nível do projeto. Os jobs do Spark com suporte executados em clusters criados após a ativação da linhagem de dados em um projeto terão a linhagem de dados ativada. Os jobs executados em clusters existentes, ou seja, clusters criados antes da ativação da linhagem de dados no nível do projeto, não têm a linhagem de dados ativada.

Como ativar a linhagem de dados no nível do projeto

Para ativar a linhagem de dados no nível do projeto, defina os seguintes metadados personalizados do projeto:

Chave Valor
DATAPROC_LINEAGE_ENABLED true
DATAPROC_CLUSTER_SCOPES https://www.googleapis.com/auth/cloud-platform

É possível desativar a linhagem de dados no nível do projeto definindo os metadados DATAPROC_LINEAGE_ENABLED como false.

Ativar a linhagem de dados no nível do cluster

É possível ativar a linhagem de dados ao criar um cluster para que todos os jobs do Spark com suporte enviados ao cluster tenham a linhagem de dados ativada.

Como ativar a linhagem de dados no nível do cluster

Para ativar a linhagem de dados em um cluster, crie um cluster do Dataproc com a propriedade de cluster dataproc:dataproc.lineage.enabled definida como true.

Clusters da versão de imagem 2.0:o escopo cloud-platform de acesso à VM do cluster do Dataproc é necessário para a linhagem de dados. Os clusters de versão de imagem do Dataproc criados com a versão 2.1 e mais recentes têm cloud-platform ativado. Se você especificar a versão da imagem do Dataproc 2.0 ao criar um cluster, defina o escopo como cloud-platform.

Exemplo da CLI gcloud:

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

Desativar a linhagem de dados em um job

Se você ativar a linhagem de dados no nível do cluster, poderá desativá-la em um job específico transmitindo a propriedade spark.extraListeners com um valor vazio ("") ao enviar o job.

Depois de ativar, não é possível desativar a linhagem de dados no cluster. Para eliminar a linhagem de dados em todos os jobs de cluster, recrie o cluster sem a propriedade dataproc:dataproc.lineage.enabled.

Enviar um job do Spark

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

Observações:

  • Adicionar as propriedades spark.openlineage.namespace e spark.openlineage.appName, que são usadas para identificar exclusivamente o job, é opcional. Se você não adicionar essas propriedades, o Dataproc usará os seguintes valores padrão:
    • Valor padrão para spark.openlineage.namespace: PROJECT_ID
    • Valor padrão para spark.openlineage.appName: spark.app.name

Conferir gráficos de linhagem no Dataplex

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

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

Exemplo:

O job do Spark a seguir lê dados de uma tabela do BigQuery e grava em outra.

#!/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()

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

Exemplo de gráfico de linhagem

A seguir