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 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 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
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.
Ative as APIs Data Lineage e Data Catalog.
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:
-
Visualizar a visualização da linhagem de dados no Data Catalog ou usar a API Data Lineage:
Leitor da linhagem de dados (
roles/datalineage.viewer
) -
Produza a linhagem de dados manualmente usando a API:
Produtor de eventos da linhagem de dados (
roles/datalineage.producer
). -
Edite a linhagem usando a API:
Editor da linhagem de dados (
roles/datalineage.editor
) -
Realizar todas as operações na linhagem:
Administrador da linhagem de dados (
roles/datalineage.admin
)
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 será 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
espark.openlineage.appName
, que são usadas para identificar exclusivamente o job, é opcional. Se você não adicionar essas propriedades, o Dataproc vai 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
- Valor padrão para
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:
A seguir
- Saiba mais sobre a linhagem de dados.