Ativar a linhagem de dados do Spark 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.

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

O lineage de dados está disponível para todos os jobs do Dataproc Spark, exceto para jobs de streaming do SparkR e Spark, e oferece suporte a fontes de dados do BigQuery e do Cloud Storage. Ele está incluído no Dataproc nas versões de imagem 2.0.74+ e 2.1.22+ do Compute Engine.

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:

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 Dataplex.

    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 do Spark no nível do projeto

É possível ativar a linhagem de dados do Spark 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 do Spark no nível do projeto

Para ativar a linhagem de dados do Spark 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 do Spark no nível do projeto definindo os metadados DATAPROC_LINEAGE_ENABLED como false.

Ativar a linhagem de dados do Spark no nível do cluster

É possível ativar o lineage de dados do Spark ao criar um cluster para que todos os jobs do Spark com suporte enviados ao cluster tenham o lineage de dados ativado.

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

Para ativar a linhagem de dados do Spark em um cluster, crie um cluster do Dataproc com a propriedade 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 do Spark. 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 do Spark em um job

Se você ativar a linhagem de dados do Spark 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 será possível desativar a linhagem de dados do Spark no cluster. Para eliminar a linhagem de dados do Spark em todos os jobs de cluster, é possível recriar 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 do Spark 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

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 extraí-las da API Data Lineage na forma de dados JSON.

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