שימוש ב-Spark data lineage

במאמר הזה מוסבר איך להפעיל את שושלת הנתונים למשימות של Managed Service for Apache Spark ברמת הפרויקט או ברמת האשכול.

שושלת נתונים היא תכונה של Knowledge Catalog שמאפשרת לעקוב אחרי האופן שבו הנתונים עוברים במערכות: מאיפה הם מגיעים, לאן הם מועברים ואילו טרנספורמציות מוחלות עליהם.

אפשר להשתמש במעקב אחר שושלת נתונים בכל המשימות של Managed Service for Apache Spark, חוץ ממשימות SparkR וסטרימינג של Spark, והוא תומך במקורות נתונים של BigQuery ו-Cloud Storage. הוא כלול בגרסאות התמונה 2.0.74+,‏ 2.1.22+,‏ 2.2.50+,‏ 2.3.1+ ו-3.0 של Managed Service for Apache Spark.

אחרי שמפעילים את התכונה באשכול של Managed Service for Apache Spark, משימות Spark ב-Managed Service for Apache Spark מתעדות אירועים של שושלת נתונים ומפרסמות אותם ב-Data Lineage API של Knowledge Catalog. ‫Managed Service for Apache Spark משתלב עם Data Lineage API דרך OpenLineage, באמצעות הפלאגין OpenLineage Spark.

אתם יכולים לגשת למידע על שושלת הנתונים דרך Knowledge Catalog, באמצעות:

לפני שמתחילים

  1. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים את הפרויקט שמכיל את אשכול Managed Service for Apache Spark שרוצים לעקוב אחרי שושלת היוחסין שלו.

    כניסה לדף לבחירת הפרויקט

  2. מפעילים את Data Lineage API.

    הפעלת ממשקי ה-API

    שינויים צפויים בשושלת הנתונים של Spark: בנתוני הגרסה של Managed Service for Apache Spark מופיעה הודעה על שינוי שיהפוך את שושלת הנתונים של Spark לזמינה באופן אוטומטי לפרויקטים ולאשכולות שלכם כשמפעילים את Data Lineage API (ראו שליטה בהטמעת השושלת בשירות), בלי צורך בהגדרות נוספות ברמת הפרויקט או האשכול.

התפקידים הנדרשים

אם יוצרים אשכול Managed Service for Apache Spark באמצעות חשבון השירות של ברירת המחדל של המכונה הווירטואלית, יש לו את התפקיד Dataproc Worker. התפקיד הזה כולל את ההרשאה datalineage.locations.processOpenLineageMessage, שבה הפלאגין OpenLineage Spark משתמש כדי לתעד ולפרסם אירועי שושלת נתונים ב-Data Lineage API. אין צורך לבצע פעולה נוספת.

אם יוצרים אשכול Managed Service for Apache Spark שמשתמש בחשבון שירות בהתאמה אישית, לחשבון השירות צריכה להיות הרשאה לפרסם אירועי שושלת נתונים. כדי לשמור על העיקרון של הרשאות מינימליות, צריך להקצות את התפקיד המינימלי שנדרש לתרחיש לדוגמה:

  • ‫Dataproc Worker (roles/dataproc.worker): התפקיד הרגיל שנדרש לפעולות במישור הנתונים של Managed Service for Apache Spark. התפקיד הזה כבר כולל את ההרשאה datalineage.locations.processOpenLineageMessage, אז אם לחשבון השירות בהתאמה אישית כבר יש את התפקיד הזה, אתם לא צריכים להקצות לו תפקיד נוסף של שושלת נתונים.
  • ‫Data Lineage Events Producer (roles/datalineage.producer): התפקיד העצמאי המינימלי של שושלת נתונים שנדרש לחשבון שירות בהתאמה אישית כדי לפרסם אירועי שושלת. צריך להקצות את התפקיד הזה אם לחשבון השירות אין את התפקיד Dataproc Worker.
  • עריכת שושלת נתונים (roles/datalineage.editor): הרשאות לערוך ולמחוק תהליכים ואירועים של שושלת נתונים, בנוסף לפרסום שלהם. התפקיד הזה מספק יותר הרשאות ממה שנדרש להפעלה רגילה של צינור עיבוד הנתונים, וצריך אותו רק אם עומסי העבודה צריכים לשנות מטא-נתונים קיימים של שושלת נתונים.
  • אדמין של שושלת נתונים (roles/datalineage.admin): הרשאת אדמין מלאה למשאבים של שושלת נתונים. התפקיד הזה לא נדרש לחשבונות שירות של אשכולות.

הפעלת שושלת נתונים של Spark

אפשר להפעיל את שושלת הנתונים של Spark ברמת הפרויקט או האשכול.

הפעלת שושלת נתונים של Spark ברמת הפרויקט

אחרי שמפעילים את Spark data lineage ברמת הפרויקט, התכונה תופעל במשימות Spark הבאות שיופעלו באשכולות של Managed Service for Apache Spark בפרויקט.

כדי להפעיל את Spark data lineage ברמת הפרויקט, מגדירים את המטא-נתונים הבאים של הפרויקט בהתאמה אישית:

מפתח ערך
DATAPROC_LINEAGE_ENABLED true
DATAPROC_CLUSTER_SCOPES https://www.googleapis.com/auth/cloud-platform
צריך להגדיר את היקף הגישה למכונה הווירטואלית רק באשכולות עם גרסת אימג' 2.0. הוא מוגדר באופן אוטומטי באשכולות של גרסאות תמונה 2.1 ואילך.

כדי להשבית את שושלת הנתונים של Spark ברמת הפרויקט, מגדירים את המטא-נתונים של DATAPROC_LINEAGE_ENABLED ל-false.

הפעלת שושלת נתונים של Spark ברמת האשכול

אם תפעילו את Spark data lineage כשתיצרו אשכול, התכונה תופעל במשימות Spark נתמכות שפועלות באשכולות של Managed Service for Apache Spark. ההגדרה הזו מבטלת כל הגדרה של Spark לתיעוד שושלת נתונים ברמת הפרויקט: אם תיעוד שושלת נתונים של Spark מושבת ברמת הפרויקט אבל מופעל ברמת האשכול, רמת האשכול מקבלת קדימות, ותיעוד שושלת הנתונים יופעל במשימות Spark נתמכות שפועלות באשכול.

כדי להפעיל את שושלת הנתונים של Spark באשכול, יוצרים אשכול Managed Service for Apache Spark עם מאפיין האשכול dataproc:dataproc.lineage.enabled שמוגדר לערך true.

דוגמה ל-CLI של gcloud:

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

כדי להשבית את שושלת הנתונים של Spark באשכול, מגדירים את המאפיין dataproc:dataproc.lineage.enabled לערך false כשיוצרים את האשכול.

  • השבתת שושלת הנתונים באשכול: כדי ליצור אשכול עם שושלת מושבתת, מגדירים את dataproc:dataproc.lineage.enabled=false. אחרי שיוצרים את האשכול, אי אפשר להשבית בו את Spark data lineage. כדי להשבית את שושלת הנתונים של Spark באשכול קיים, אפשר ליצור מחדש את האשכול כשהמאפיין dataproc:dataproc.lineage.enabled מוגדר לערך false.

  • הגדרת היקף באשכולות של גרסת תמונה 2.0: כדי להשתמש בשושלת הנתונים של Spark, צריך cloud-platformהיקף גישה למכונות הווירטואליות של אשכול Managed Service for Apache Spark. באשכולות של Managed Service for Apache Spark שנוצרו עם גרסת אימג' 2.1 ואילך, cloud-platform מופעל. אם אתם מציינים את גרסת התמונה 2.0 של Managed Service for Apache Spark כשאתם יוצרים אשכול, הגדירו את ההיקף ל-cloud-platform.

השבתת שושלת הנתונים של Spark במשימה

אם שושלת הנתונים של Spark מופעלת באשכול, אתם יכולים להשבית אותה במשימה על ידי העברת המאפיין spark.extraListeners עם ערך ריק ("") כשאתם שולחים את המשימה.

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

כששולחים משימת Spark נתמכת באשכול של Managed Service for Apache Spark שנוצר עם שושלת נתונים מופעלת של Spark, השירות Managed Service for Apache Spark מתעד את פרטי שושלת הנתונים ומדווח עליהם ל-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

הערות:

  • אפשר להוסיף את המאפיינים spark.openlineage.namespace ו-spark.openlineage.appName, שמשמשים לזיהוי ייחודי של המשרה. אם לא מוסיפים את המאפיינים האלה, Managed Service for Apache Spark משתמש בערכי ברירת המחדל הבאים:
    • ערך ברירת המחדל של spark.openlineage.namespace: PROJECT_ID
    • ערך ברירת המחדל של spark.openlineage.appName: spark.app.name

צפייה בשושלת היוחסין ב-Knowledge Catalog

תרשים שושלת מציג את הקשרים בין משאבי הפרויקט לבין התהליכים שיצרו אותם. אפשר לצפות במידע על שושלת הנתונים במסוף Google Cloud , או לאחזר אותו מ-Data Lineage API כנתוני JSON.

קוד לדוגמה ב-PySpark:

משימת PySpark הבאה קוראת נתונים מטבלה ציבורית ב-BigQuery, ואז כותבת את הפלט בטבלה חדשה במערך נתונים קיים ב-BigQuery. הוא משתמש בקטגוריה של Cloud Storage לאחסון זמני.

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

מחליפים את הפרטים הבאים:

  • ‫BUCKET: השם של קטגוריה של Cloud Storage קיימת

  • ‫PROJECT_ID,‏ DATASET ו-TABLE: מזהה הפרויקט, השם של קבוצת נתונים קיימת ב-BigQuery והשם של טבלה חדשה שרוצים ליצור בקבוצת הנתונים (הטבלה לא יכולה להיות קיימת)

אפשר לראות את תרשים השושלת בממשק המשתמש של Knowledge Catalog.

תרשים שושלת לדוגמה

המאמרים הבאים