Este documento descreve como ativar a linhagem de dados para seus jobs do Spark no Dataproc no nível do projeto ou do cluster.
A linhagem de dados é um recurso do Dataplex Universal Catalog que permite acompanhar como os dados se movimentam nos sistemas: origem, destino 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 os jobs do SparkR e do Spark Streaming, e é compatível com fontes de dados do BigQuery e do Cloud Storage. Ele está incluído nas versões de imagem 2.0.74+, 2.1.22+, 2.2.50+, 2.3.1+ e 3.0 do Dataproc no 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 Universal Catalog. O Dataproc se integra à API Data Lineage usando o OpenLineage (link em inglês) e o plug-in OpenLineage Spark (link em inglês).
É possível acessar informações de linhagem de dados pelo Dataplex Universal Catalog usando o seguinte:
Antes de começar
No console 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 a API Data Lineage.
Próximas mudanças na linhagem de dados do Spark: consulte as notas da versão do Dataproc para saber sobre uma mudança que vai disponibilizar automaticamente a linhagem de dados do Spark para seus projetos e clusters quando você ativar a API Data Lineage (consulte Controlar a ingestão de linhagem para um serviço) sem exigir configurações adicionais no nível do projeto ou do cluster.
Funções exigidas
Se você criar um cluster do Dataproc usando a conta de serviço padrão da VM, ele terá a função Dataproc Worker, que ativa a linhagem de dados. Nenhuma outra ação é necessária.
No entanto, se você criar um cluster do Dataproc que use uma conta de serviço personalizada, para ativar a linhagem de dados no cluster, será necessário conceder uma função obrigatória à conta de serviço personalizada, conforme explicado no parágrafo a seguir.
Para receber as permissões necessárias para usar a linhagem de dados com o Dataproc, peça ao administrador para conceder a você os seguintes papéis do IAM na conta de serviço personalizada do cluster:
-
Conceda um dos seguintes papéis:
-
Worker do Dataproc (
roles/dataproc.worker) -
Editor da linhagem de dados (
roles/datalineage.editor) -
Produtor de linhagem de dados (
roles/datalineage.producer) -
Administrador da linhagem de dados (
roles/datalineage.admin)
-
Worker 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 usando papéis personalizados ou outros papéis predefinidos.
Ativar a linhagem de dados do Spark
É possível ativar a linhagem de dados do Spark no nível do projeto ou do cluster.
Ativar a linhagem de dados do Spark no nível do projeto
Depois de ativar a linhagem de dados do Spark no nível do projeto, os jobs do Spark subsequentes executados em clusters do Dataproc no projeto terão a linhagem de dados do Spark ativada.
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-platformDefinir esse escopo de acesso à VM só é necessário para clusters da versão da imagem 2.0. Ele é definido automaticamente em clusters com a versão de imagem 2.1 e mais recentes. |
É 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
Se você ativar a linhagem de dados do Spark ao criar um cluster, os jobs do Spark compatíveis executados em clusters do Dataproc terão a linhagem de dados do Spark ativada. Essa configuração substitui qualquer configuração de linhagem de dados do Spark no nível do projeto: se a linhagem de dados do Spark estiver desativada no nível do projeto, mas ativada no nível do cluster, o nível do cluster terá precedência, e os jobs do Spark compatíveis executados no cluster terão a linhagem de dados ativada.
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.
Exemplo da CLI gcloud:
gcloud dataproc clusters create CLUSTER_NAME \
--project PROJECT_ID \
--region REGION \
--properties 'dataproc:dataproc.lineage.enabled=true'É possível desativar a linhagem de dados do Spark em um cluster
definindo a propriedade dataproc:dataproc.lineage.enabled como false
ao criar o cluster.
Desativar a linhagem de dados em um cluster: para criar um cluster com a linhagem desativada, defina
dataproc:dataproc.lineage.enabled=false. Depois da criação do cluster, não é possível desativar a linhagem de dados do Spark nele. Para desativar a linhagem de dados do Spark em um cluster atual, recrie o cluster com a propriedadedataproc:dataproc.lineage.enableddefinida comofalse.Defina o escopo em clusters da versão de imagem 2.0:o acesso à VM do cluster do Dataproc escopo
cloud-platformé necessário para a linhagem de dados do Spark. Os clusters da versão2.1e posteriores da imagem do Dataproc têm ocloud-platformativado. Se você especificar a versão da imagem do Dataproc2.0ao criar um cluster, defina o escopo comocloud-platform.
Desativar a linhagem de dados do Spark em um job
Se a linhagem de dados do Spark estiver ativada em um cluster, será possível desativá-la em um job transmitindo a propriedade spark.extraListeners com um valor vazio ("") ao enviar o job.
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--project PROJECT_ID \
--region REGION \
--class CLASS \
--jars=gs://APPLICATION_BUCKET/spark-application.jar \
--properties=spark.extraListeners=''Enviar um job do Spark
Quando você envia um job do Spark compatível em um cluster do Dataproc criado com a linhagem de dados do Spark ativada, o Dataproc captura e informa as informações de linhagem de dados à 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_APPNAMEObservações:
- A adição das propriedades
spark.openlineage.namespaceespark.openlineage.appName, usadas para identificar o job de forma exclusiva, é 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
- Valor padrão para
Visualizar a linhagem no catálogo universal do Dataplex
Um gráfico de linhagem mostra as relações entre os recursos do projeto e os processos que os criaram. É possível ver informações de linhagem de dados no console do Google Cloud ou recuperá-las da API Data Lineage na forma de dados JSON.
Exemplo de código PySpark:
O job do PySpark a seguir lê dados de uma tabela pública do BigQuery e grava a saída em uma nova tabela em um conjunto de dados do BigQuery. Ele usa um bucket do Cloud Storage para armazenamento temporário.
#!/usr/bin/env python
from pyspark.sql import SparkSession
import sys
spark = SparkSession \
.builder \
.appName('LINEAGE_BQ_TO_BQ') \
.getOrCreate()
bucket = 'gs://BUCKET`
spark.conf.set('temporaryCloudStorageBucket', bucket)
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')
destination_table = 'PROJECT_ID:DATASET.TABLE'
word_count.write.format('bigquery') \
.option('table', destination_table) \
.save()
Faça as seguintes substituições:
BUCKET: o nome de um bucket do Cloud Storage
PROJECT_ID, DATASET e TABLE: o ID do projeto, o nome de um conjunto de dados do BigQuery e o nome de uma nova tabela a ser criada no conjunto de dados (a tabela não pode existir).
É possível conferir o gráfico de linhagem na interface do Dataplex Universal Catalog.
A seguir
- Saiba mais sobre a linhagem de dados.