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

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

מידע נוסף על רכיבים אופציונליים אחרים שזמינים ב-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. עורכים את הרכיבים האופציונליים.
  4. בחלונית שנפתחת, מסמנים את התיבה לצד Delta.
  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 עם נתונים לדוגמה, נוצרת טבלת my_delta_table Delta Lake ב-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 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.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.

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

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;