Spark-Datenherkunft in Dataproc verwenden

In diesem Dokument wird beschrieben, wie Sie die Datenherkunft für Ihre Dataproc Spark-Jobs entweder auf Projekt- oder Clusterebene aktivieren.

Die Datenherkunft ist ein Dataplex Universal Catalog-Feature, mit dem Sie verfolgen können, wie sich Daten durch Ihre Systeme bewegen – woher sie kommen, wohin sie übergeben werden und welche Transformationen auf sie angewendet werden.

Die Datenherkunft ist für alle Dataproc-Spark-Jobs verfügbar, mit Ausnahme von SparkR- und Spark-Streaming-Jobs. Sie unterstützt BigQuery- und Cloud Storage-Datenquellen. Sie ist in den Dataproc-Image-Versionen 2.0.74+, 2.1.22+, 2.2.50+, 2.3.1+ und 3.0 für Compute Engine enthalten.

Nachdem Sie die Funktion in Ihrem Dataproc-Cluster aktiviert haben, werden in Dataproc-Spark-Jobs Datenherkunftsereignisse erfasst und in der Data Lineage API des Dataplex Universal Catalog veröffentlicht. Dataproc wird über OpenLineage in die Data Lineage API eingebunden. Dazu wird das OpenLineage Spark-Plug-in verwendet.

Sie können über Dataplex Universal Catalog auf Informationen zur Datenherkunft zugreifen. Dazu haben Sie folgende Möglichkeiten:

Hinweise

  1. Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl das Projekt aus, das den Dataproc-Cluster enthält, für den Sie die Herkunft verfolgen möchten.

    Zur Projektauswahl

  2. Aktivieren Sie die Data Lineage API.

    APIs aktivieren

    Anstehende Änderungen an der Spark-Datenherkunft: In den Dataproc-Versionshinweisen finden Sie die Ankündigung einer Änderung, durch die die Spark-Datenherkunft automatisch für Ihre Projekte und Cluster verfügbar wird, wenn Sie die Data Lineage API aktivieren (siehe Erfassung der Herkunft für einen Dienst steuern). Zusätzliche Einstellungen auf Projekt- oder Clusterebene sind dann nicht mehr erforderlich.

Erforderliche Rollen

Wenn Sie einen Dataproc-Cluster mit dem Standarddienstkonto für VMs erstellen, hat er die Rolle Dataproc Worker, die die Datenherkunft ermöglicht. Sie müssen nichts weiter tun.

Wenn Sie jedoch einen Dataproc-Cluster erstellen, der ein benutzerdefiniertes Dienstkonto verwendet, müssen Sie dem benutzerdefinierten Dienstkonto eine erforderliche Rolle zuweisen, um die Datenherkunft im Cluster zu aktivieren.

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das benutzerdefinierte Dienstkonto Ihres Clusters zuzuweisen, um die Berechtigungen zu erhalten, die Sie zur Verwendung von Datenherkunft mit Dataproc benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Spark-Daten-Lineage aktivieren

Sie können die Spark-Datenherkunft auf Projekt- oder Clusterebene aktivieren.

Spark-Daten-Lineage auf Projektebene aktivieren

Nachdem Sie die Spark-Datenherkunft auf Projektebene aktiviert haben, wird sie für nachfolgende Spark-Jobs, die in Dataproc-Clustern im Projekt ausgeführt werden, aktiviert.

Wenn Sie die Spark-Datenherkunft auf Projektebene aktivieren möchten, legen Sie die folgenden benutzerdefinierten Projektmetadaten fest:

Schlüssel Wert
DATAPROC_LINEAGE_ENABLED true
DATAPROC_CLUSTER_SCOPES https://www.googleapis.com/auth/cloud-platform
Das Festlegen dieses VM-Zugriffsbereichs ist nur für Cluster mit 2.0-Image-Versionen erforderlich. Sie wird automatisch für Cluster mit der Bildversion 2.1 und höher festgelegt.

Sie können die Spark-Datenherkunft auf Projektebene deaktivieren, indem Sie die Metadaten DATAPROC_LINEAGE_ENABLED auf false setzen.

Spark-Daten-Lineage auf Clusterebene aktivieren

Wenn Sie die Spark-Datenherkunft beim Erstellen eines Clusters aktivieren, ist die Spark-Datenherkunft für unterstützte Spark-Jobs, die auf Dataproc-Clustern ausgeführt werden, aktiviert. Diese Einstellung überschreibt alle Einstellungen für die Spark-Datenherkunft auf Projektebene: Wenn die Spark-Datenherkunft auf Projektebene deaktiviert, aber auf Clusterebene aktiviert ist, hat die Clusterebene Vorrang und für unterstützte Spark-Jobs, die auf dem Cluster ausgeführt werden, ist die Datenherkunft aktiviert.

Wenn Sie die Spark-Datenherkunft in einem Cluster aktivieren möchten, erstellen Sie einen Dataproc-Cluster, bei dem die Clustereigenschaft dataproc:dataproc.lineage.enabled auf true gesetzt ist.

Beispiel für die gcloud CLI:

gcloud dataproc clusters create CLUSTER_NAME \
    --project PROJECT_ID \
    --region REGION \
    --properties 'dataproc:dataproc.lineage.enabled=true'

Sie können die Spark-Datenherkunft für einen Cluster deaktivieren, indem Sie beim Erstellen des Clusters die Property dataproc:dataproc.lineage.enabled auf false festlegen.

  • Datenherkunft in einem Cluster deaktivieren: Wenn Sie einen Cluster erstellen möchten, in dem die Datenherkunft deaktiviert ist, legen Sie dataproc:dataproc.lineage.enabled=false fest. Nach der Clustererstellung können Sie die Spark-Datenherkunft im Cluster nicht mehr deaktivieren. Wenn Sie die Spark-Datenherkunft für einen vorhandenen Cluster deaktivieren möchten, können Sie den Cluster neu erstellen und die Eigenschaft dataproc:dataproc.lineage.enabled auf false festlegen.

  • Bereich für Cluster mit Image-Version 2.0 festlegen:Für die Spark-Datenherkunft ist der cloud-platform-Bereich für den Zugriff auf Dataproc-Cluster-VMs erforderlich. In Clustern, die mit der Dataproc-Imageversion 2.1 und höher erstellt wurden, ist cloud-platform aktiviert. Wenn Sie beim Erstellen eines Clusters die Dataproc-Imageversion 2.0 angeben, legen Sie den Bereich auf cloud-platform fest.

Spark-Data-Lineage für einen Job deaktivieren

Wenn die Spark-Datenherkunft für einen Cluster aktiviert ist, können Sie sie für einen Job deaktivieren, indem Sie beim Senden des Jobs die Eigenschaft spark.extraListeners mit einem leeren Wert ("") übergeben.

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=''

Spark-Job senden

Wenn Sie einen unterstützten Spark-Job für einen Dataproc-Cluster senden, der mit aktivierter Spark-Datenherkunft erstellt wurde, erfasst und meldet Dataproc die Datenherkunftsinformationen an die Data Lineage API.

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

Hinweise:

  • Das Hinzufügen der Eigenschaften spark.openlineage.namespace und spark.openlineage.appName, die zur eindeutigen Identifizierung des Jobs verwendet werden, ist optional. Wenn Sie diese Attribute nicht hinzufügen, verwendet Dataproc die folgenden Standardwerte:
    • Standardwert für spark.openlineage.namespace: PROJECT_ID
    • Standardwert für spark.openlineage.appName: spark.app.name

Lineage in Dataplex Universal Catalog ansehen

Ein Herkunftsdiagramm zeigt die Beziehungen zwischen Ihren Projektressourcen und den Prozessen, mit denen sie erstellt wurden. Sie können Informationen zum Datenursprung in der Google Cloud -Konsole ansehen oder sie in Form von JSON-Daten über die Data Lineage API abrufen.

PySpark-Beispielcode:

Der folgende PySpark-Job liest Daten aus einer öffentlichen BigQuery-Tabelle und schreibt die Ausgabe dann in eine neue Tabelle in einem vorhandenen BigQuery-Dataset. Für die temporäre Speicherung wird ein Cloud Storage-Bucket verwendet.

#!/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()

Ersetzen Sie die folgenden Werte:

  • BUCKET: Der Name eines vorhandenen Cloud Storage-Bucket

  • PROJECT_ID, DATASET und TABLE: Die Projekt-ID, der Name eines vorhandenen BigQuery-Datasets und der Name einer neuen Tabelle, die im Dataset erstellt werden soll (die Tabelle darf nicht vorhanden sein)

Sie können das Lineage-Diagramm in der Dataplex Universal Catalog-UI ansehen.

Beispiel für ein Herkunftsdiagramm

Nächste Schritte