Usar a linhagem de dados com o Dataproc sem servidor

Este documento descreve como ativar a linhagem de dados no Dataproc sem servidor para cargas de trabalho em lote do Spark e sessões interativas no nível do projeto, carga de trabalho em lote ou sessão interativa.

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 Dataproc sem servidor para cargas de trabalho e sessões do Spark captura eventos de linhagem e os publica na API Data Lineage do Dataplex. O Dataproc Serverless para Spark se integra à API Data Lineage usando o OpenLineage, com o plug-in do OpenLineage Spark.

É possível acessar informações de linhagem pelo Dataplex usando gráficos de linhagem e a API Data Lineage. Para mais informações, consulte Visualizar gráficos de linhagem no Dataplex.

Disponibilidade, recursos e limitações

O lineage de dados, que oferece suporte às fontes de dados do BigQuery e do Cloud Storage, está disponível para cargas de trabalho e sessões executadas com as versões do Dataproc Serverless para o Spark 1.1, 1.2 e 2.2, com as seguintes exceções e limitações:

  • A linhagem de dados não está disponível para cargas de trabalho ou sessões de streaming do SparkR ou do Spark.

Antes de começar

  1. Na página do seletor de projetos no console do Google Cloud, selecione o projeto a ser usado para as cargas de trabalho ou sessões do Dataproc Serverless para Spark.

    Acessar o seletor de projetos

  2. Ative as APIs Data Lineage e Dataplex.

    Ativar as APIs

Funções exigidas

Para receber as permissões necessárias para usar a linhagem de dados no Dataproc sem servidor para Spark, 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. Quando ativado no nível do projeto, todas as cargas de trabalho em lote e sessões interativas subsequentes executadas no projeto terão a linhagem do Spark 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 para uma carga de trabalho em lote do Spark

É possível ativar a linhagem de dados em uma carga de trabalho em lote definindo a propriedade spark.dataproc.lineage.enabled como true ao enviar a carga de trabalho.

Exemplo de carga de trabalho em lote

Este exemplo envia uma carga de trabalho lineage-example.py em lote com a linhagem do Spark ativada.

gcloud dataproc batches submit pyspark lineage-example.py \
    --region=REGION \
    --properties=spark.dataproc.lineage.enabled=true

O lineage-example.py lê dados de uma tabela do BigQuery e grava a saída 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-demo
spark.conf.set('temporaryCloudStorageBucket', 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()

É possível conferir o gráfico de linhagem na interface do Dataplex.

Gráfico de linhagem do Spark

Ativar a linhagem de dados para uma sessão interativa do Spark

É possível ativar o lineage de dados em uma sessão interativa do Spark definindo a propriedade spark.dataproc.lineage.enabled como true ao criar a sessão ou o modelo de sessão.

Exemplo de sessão interativa

O código do bloco de notas do PySpark a seguir configura uma sessão interativa do Dataproc sem servidor com a linhagem de dados do Spark ativada em uma sub-rede regional do Acesso particular do Google VPC. Em seguida, ele cria uma sessão do Spark Connect que executa uma consulta de contagem de palavras em um conjunto de dados público do BigQuery Shakespeare e grava a saída em uma tabela do BigQuery.

from dataproc_spark_session.session.spark.connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session

session = Session()

# Configure the Dataproc Serverless interactive session. Enable Spark data lineage.
project_id = "sample-project-id"
region = "us-central1"
subnet_name = "sample-private-google-access-subnet"
session.environment_config.execution_config.subnetwork_uri = f"projects/{project_id}/regions/{region}/subnetworks/{subnet_name}"
session.runtime_config.properties["spark.dataproc.lineage.enabled"] = "true"
session.runtime_config.version = "2.2"

# Create the Spark Connect session.
spark = (
   DataprocSparkSession.builder
     .appName("LINEAGE_BQ_TO_BQ")
     .dataprocConfig(session)
     .getOrCreate()
)
# Run a wordcount query on the public BigQuery Shakespeare dataset.
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')

# Output the results to a BigQuery destination table.
destination = sample.destination
word_count.write.format('bigquery') \
  .option('table', destination) \
  .save()

Para conferir o gráfico de linhagem de dados, clique no nome da tabela de destino listado no painel de navegação na página Explorer do BigQuery e selecione a guia "Linhagem" no painel de detalhes da tabela.

Gráfico de linhagem do Spark

Visualizar a linhagem no Dataplex

Um gráfico de linhagem mostra as relações entre os recursos do projeto e os processos que os criaram. É possível acessar as informações de linhagem de dados no console do Google Cloud ou extrair as informações da API Data Lineage como dados JSON.

A seguir