Neste documento, descrevemos como ativar a linhagem de dados para seus jobs do Serviço Gerenciado para Apache Spark no nível do projeto ou do cluster.
A linhagem de dados é um recurso do Knowledge Catalog que permite acompanhar como os dados se movimentam nos sistemas: de onde vêm, para onde vão e quais transformações são aplicadas a eles.
A linhagem de dados está disponível para todos os jobs do Serviço Gerenciado para Apache Spark,
exceto os jobs de streaming do SparkR e do Spark, e é compatível com as 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 Serviço Gerenciado para Apache Spark.
Depois de ativar o recurso no cluster do Serviço Gerenciado para Apache Spark, os jobs do Spark capturam eventos de linhagem de dados e os publicam na API Data Lineage do Knowledge Catalog. O Serviço Gerenciado para Apache Spark se integra à API Data Lineage por meio do OpenLineage, usando o plug-in do OpenLineage Spark.
É possível acessar as informações de linhagem de dados pelo Knowledge Catalog usando o seguinte:
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 Serviço Gerenciado para Apache Spark com a linhagem que você quer rastrear.
Ative a API Data Lineage.
Próximas mudanças na linhagem de dados do Spark Consulte as notas da versão do Serviço Gerenciado para Apache Spark para ver o anúncio de 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 outras configurações no nível do projeto ou do cluster.
Funções exigidas
Se você criar um cluster do Serviço Gerenciado para Apache Spark usando a
conta de serviço de VM padrão,
ele terá o papel
Dataproc Worker. Esse papel inclui a permissão datalineage.locations.processOpenLineageMessage,
que o plug-in do OpenLineage Spark usa para capturar e publicar eventos de linhagem na
API Data Lineage. Nenhuma outra ação é necessária.
Se você criar um cluster do Serviço Gerenciado para Apache Spark que use uma conta de serviço personalizada, ela precisará ter permissão para publicar eventos de linhagem. Para seguir o princípio de privilégio mínimo, conceda o papel mínimo necessário para seu caso de uso:
- Worker do Dataproc (
roles/dataproc.worker): o papel padrão necessário para as operações do plano de dados do Serviço Gerenciado para Apache Spark. Como esse papel já inclui a permissãodatalineage.locations.processOpenLineageMessage, se a conta de serviço personalizada já tiver esse papel, não será necessário conceder outro papel de linhagem de dados. - Produtor de eventos de linhagem de dados (
roles/datalineage.producer): o papel mínimo independente de linhagem de dados necessário para que uma conta de serviço personalizada publique eventos de linhagem. Conceda esse papel se a conta de serviço não tiver o papel de worker do Dataproc. - Editor da linhagem de dados (
roles/datalineage.editor): concede permissões para editar e excluir processos e eventos de linhagem, além de publicá-los. Esse papel fornece mais permissões do que o necessário para a execução padrão do pipeline e só é necessário se as cargas de trabalho precisarem modificar os metadados de linhagem atuais. - Administrador da linhagem de dados (
roles/datalineage.admin): concede acesso administrativo total aos recursos da linhagem de dados. Esse papel não é necessário para contas de serviço de cluster.
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 subsequentes do Spark executados em clusters do Serviço Gerenciado para Apache Spark 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-platformA definição desse escopo de acesso da VM só é necessária para clusters de versão de 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 que forem executados em clusters do Serviço Gerenciado para Apache Spark 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 Serviço Gerenciado para Apache Spark
com a propriedade de cluster 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.
Como desativar a linhagem de dados em um cluster: para criar um cluster com a linhagem desativada, defina
dataproc:dataproc.lineage.enabled=false. Depois de criar o cluster, não é possível desativar a linhagem de dados do Spark no cluster. Para desativar a linhagem de dados do Spark em um cluster, 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 Serviço Gerenciado para Apache Spark
cloud-platformescopo de acesso é necessário para a linhagem de dados do Spark. Os clusters de versão de imagem do Serviço Gerenciado para Apache Spark criados com a versão de imagem2.1e posteriores têm ocloud-platformativado. Se você especificar a versão de imagem2.0do Serviço Gerenciado para Apache Spark ao 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 Serviço Gerenciado para Apache Spark que foi criado com a linhagem de dados do Spark ativada, o Serviço Gerenciado para Apache Spark 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_APPNAMEObservações:
- A adição das propriedades
spark.openlineage.namespaceespark.openlineage.appName, usadas para identificar exclusivamente o job, é opcional. Se você não adicionar essas propriedades, o Serviço Gerenciado para Apache Spark 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
Ver a linhagem no Knowledge Catalog
Um gráfico de linhagem mostra as relações entre os recursos do projeto e os processos que os criaram. É possível visualizar 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 existente 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 visualizar o gráfico de linhagem na interface do Knowledge Catalog.
A seguir
- Saiba mais sobre a linhagem de dados.