התקנת הרכיב Delta Lake באשכול

הרכיב האופציונלי Delta Lake מאפשר להריץ עומסי עבודה של Delta Lake באשכול של Managed Service for Apache Spark. כשהרכיב מופעל, הוא מתקין את הספריות הנדרשות ומגדיר את Spark ו-Hive לעבודה עם Delta Lake.

‫Delta Lake 4.x, שנכלל בגרסת התמונה 3.0 של Managed Service for Apache Spark, לא תומך ב-Hive. למידע נוסף על רכיבים אופציונליים אחרים שזמינים ב-Managed Service for Apache Spark, ראו רכיבים אופציונליים זמינים.

גרסאות תואמות של Managed Service for Apache Spark

אפשר להתקין את רכיב Delta Lake באשכולות של Managed Service for Apache Spark שנוצרו באמצעות גרסת אימג' 2.2.46 של Managed Service for Apache Spark וגרסאות אימג' מאוחרות יותר.

במאמר גרסאות נתמכות של Managed Service for Apache Spark מפורטת גרסת הרכיב של Delta Lake שכלולה בגרסאות של קובצי האימג' של Managed Service for Apache Spark.

כשיוצרים אשכול Managed Service for Apache Spark עם רכיב Delta Lake מופעל, מאפייני Spark הבאים מוגדרים לעבוד עם Delta Lake.

קובץ תצורה מאפיין (property) ערך ברירת המחדל
/etc/spark/conf/spark-defaults.conf spark.sql.extensions io.delta.sql.DeltaSparkSessionExtension
/etc/spark/conf/spark-defaults.conf spark.sql.catalog.spark_catalog org.apache.spark.sql.delta.catalog.DeltaCatalog

התקנת הרכיב

מתקינים את הרכיב כשיוצרים אשכול של Managed Service for Apache Spark באמצעות מסוף Google Cloud ,‏ Google Cloud CLI או Dataproc API.

מסוףGoogle Cloud

  1. במסוף Google Cloud , פותחים את הדף Create cluster.
  2. לוחצים על הגדרות נוספות כדי להרחיב את הקטע.
  3. עורכים את Optional components.
  4. בחלונית שנפתחת, מסמנים את התיבה דלתא.
  5. לוחצים על Save.

‫CLI של gcloud

כדי ליצור אשכול Managed Service for Apache Spark שכולל את רכיב Delta Lake, משתמשים בפקודה gcloud dataproc clusters create עם הדגל --optional-components.

gcloud dataproc clusters create CLUSTER_NAME \
    --optional-components=DELTA \
    --region=REGION \
    ... other flags

הערות:

  • ‫CLUSTER_NAME: מציינים את שם האשכול.
  • ‫REGION: מציינים את האזור ב-Compute Engine שבו האשכול ימוקם.

‫API בארכיטקטורת REST

אפשר לציין את רכיב Delta Lake דרך Dataproc API באמצעות SoftwareConfig.Component כחלק מבקשת clusters.create.

דוגמאות לשימוש

בקטע הזה מפורטות דוגמאות לקריאה ולכתיבה של נתונים באמצעות טבלאות Delta Lake.

טבלת Delta Lake

כתיבה לטבלת Delta Lake

אפשר להשתמש ב-Spark DataFrame כדי לכתוב נתונים בטבלת Delta Lake. בדוגמאות הבאות נוצר DataFrame עם נתונים לדוגמה, נוצרת טבלת Delta Lake ב-my_delta_table ב-Cloud Storage, ואז הנתונים נכתבים בטבלת Delta Lake.

PySpark

# Create a DataFrame with sample data.
data = spark.createDataFrame([(1, "Alice"), (2, "Bob")], ["id", "name"])

# Create a Delta Lake table in Cloud Storage.
spark.sql("""CREATE TABLE IF NOT EXISTS my_delta_table (
    id long,
    name string)
USING delta
LOCATION 'gs://delta-gcs-demo/example-prefix/default/my_delta_table'""")

# Write the DataFrame to the Delta Lake table in Cloud Storage.
data.writeTo("my_delta_table").append()

Scala

// Create a DataFrame with sample data.
val data = Seq((1, "Alice"), (2, "Bob")).toDF("id", "name")

// Create a Delta Lake table in Cloud Storage.
spark.sql("""CREATE TABLE IF NOT EXISTS my_delta_table (
    id integer,
    name string)
USING delta
LOCATION 'gs://delta-gcs-demo/example-prefix/default/my_delta_table'""")

// Write the DataFrame to the Delta Lake table in Cloud Storage.
data.write.format("delta").mode("append").saveAsTable("my_delta_table")

Spark SQL

CREATE TABLE IF NOT EXISTS my_delta_table (
    id integer,
    name string)
USING delta
LOCATION 'gs://delta-gcs-demo/example-prefix/default/my_delta_table';

INSERT INTO my_delta_table VALUES ("1", "Alice"), ("2", "Bob");

קריאה מטבלה של Delta Lake

בדוגמאות הבאות, המערכת קוראת את my_delta_table ומציגה את התוכן שלו.

PySpark

# Read the Delta Lake table into a DataFrame.
df = spark.table("my_delta_table")

# Display the data.
df.show()

Scala

// Read the Delta Lake table into a DataFrame.
val df = spark.table("my_delta_table")

// Display the data.
df.show()

Spark SQL

SELECT * FROM my_delta_table;

‫Hive עם Delta Lake

כתיבה לטבלת Delta ב-Hive.

הרכיב האופציונלי Managed Service for Apache Spark Delta Lake מוגדר מראש לעבודה עם טבלאות חיצוניות של Hive.

מידע נוסף זמין במאמר מחבר Hive.

מריצים את הדוגמאות בלקוח beeline.

beeline -u jdbc:hive2://

יוצרים טבלת Spark Delta Lake.

כדי שטבלת Hive חיצונית תוכל להפנות לטבלת Delta Lake, צריך ליצור את טבלת Delta Lake באמצעות Spark.

CREATE TABLE IF NOT EXISTS my_delta_table (
    id integer,
    name string)
USING delta
LOCATION 'gs://delta-gcs-demo/example-prefix/default/my_delta_table';

INSERT INTO my_delta_table VALUES ("1", "Alice"), ("2", "Bob");

יוצרים טבלה חיצונית של Hive.

SET hive.input.format=io.delta.hive.HiveInputFormat;
SET hive.tez.input.format=io.delta.hive.HiveInputFormat;

CREATE EXTERNAL TABLE deltaTable(id INT, name STRING)
STORED BY 'io.delta.hive.DeltaStorageHandler'
LOCATION 'gs://delta-gcs-demo/example-prefix/default/my_delta_table';

הערות:

  • המחלקה io.delta.hive.DeltaStorageHandler מטמיעה את ממשקי ה-API של מקור הנתונים של Hive. הוא יכול לטעון טבלת Delta ולחלץ את המטא-נתונים שלה. אם סכימת הטבלה בהצהרה CREATE TABLE לא תואמת למטא-נתונים הבסיסיים של Delta Lake, תופיע הודעת שגיאה.

קריאה מטבלה של Delta Lake ב-Hive.

כדי לקרוא נתונים מטבלת Delta, משתמשים בהצהרת SELECT:

SELECT * FROM deltaTable;

מחיקת טבלה של Delta Lake.

כדי להסיר טבלת Delta, משתמשים בהצהרה DROP TABLE:

DROP TABLE deltaTable;