Dataproc Metastore תומך בעסקאות עם סמנטיקה של ACID ב-Apache Hive. מידע נוסף זמין במאמר בנושא עסקאות ב-Hive. העסקאות האלה מופעלות כברירת מחדל ב-Hive 3.
הגדרות אישיות
כדי להפעיל תמיכה בעסקאות, צריך להגדיר את ההגדרות בצד השרת ובצד הלקוח.
הגדרות בצד השרת
ההגדרות הבאות בצד השרת מוגדרות כברירת מחדל במהלך יצירת השירות על ידי Dataproc Metastore. אפשר לבחור לבטל את ההגדרות האלה על ידי הזנת ביטולים של מפתח וערך בקטע ביטולים של הגדרות Metastore.
metastore.compactor.initiator.on– האם להריץ את השרשורים של המפעיל והניקוי בשירות Dataproc Metastore.מגדירים את הערך
trueכדי להפעיל את היוזם.
metastore.compactor.worker.threads– מספר ה-threads של העובדים של הכלי לדחיסת קבצים שיופעלו ב-Dataproc Metastore.מגדירים מספר חיובי כדי להפעיל את הכלי לדחיסת נתונים. הגדרה של מספר גבוה יותר עשויה להשפיע על ביצועי השירות, במיוחד אם אתם ברמת מפתח. אם צריך לשנות את המספר הזה, מומלץ להשתמש בערך נמוך יותר, כמו 8.
hive.metastore.event.db.notification.api.auth– האם שירות Dataproc Metastore צריך לאשר גישה לממשקי API שקשורים להודעות על מסדי נתונים.ההגדרה היא
false. אם ההגדרה היאtrue, רק למשתמשי-העל בהגדרות ה-proxy יש הרשאה. מידע נוסף על הרשאת פרוקסי של משתמש-על זמין במאמר אבטחת API של הודעות Metastore.
הגדרות בצד הלקוח
ההגדרות בצד הלקוח מוגדרות בלקוח Hive כמו שמתואר במאמר בנושא אימות עסקאות.
hive.support.concurrency– צריך להגדיר את הערךtrueכדי לתמוך בעסקאות של הוספה, עדכון ומחיקה.
hive.exec.dynamic.partition.mode– במצב קפדני, צריך לציין לפחות מחיצה סטטית אחת למקרה שכל המחיצות יימחקו בטעות. במצב לא מחמיר, כל המחיצות יכולות להיות דינמיות.מגדירים את הערך
nonstrictכדי לתמוך בעסקאות של הוספה, עדכון ומחיקה.
hive.txn.manager— מוגדר לערךorg.apache.hadoop.hive.ql.lockmgr.DbTxnManager.
אימות עסקאות
אפשר לאמת טרנזקציות של Hive באמצעות אשכול Dataproc שמשתמש בשירות Dataproc Metastore ב-Hive 3.
צריך ליצור את אשכול Dataproc באותו פרויקט שבו נמצא שירות Dataproc Metastore, ועם Hive 3. תמונות Dataproc
2.0, 2.0-ubuntu18 ו-2.0-debian10, תומכות ב-Hive 3 ובעסקאות. אפשר להשתמש בדגל --image-version כדי להגדיר את התמונה בגרסה 2.0. לדוגמה:
gcloud dataproc clusters create DATAPROC_CLUSTER_ID \
--dataproc-metastore=projects/PROJECT_ID/locations/LOCATION/services/SERVICE \
--region=REGION \
--image-version 2.0-debian10
בהוראות הבאות מוסבר איך לאמת טרנזקציות בשירות Dataproc Metastore שבו נעשה שימוש באשכול Dataproc.
מתחברים ב-SSH לאשכול Dataproc. אפשר לעשות את זה בדפדפן או משורת הפקודה.
מריצים את הפקודה
hiveכדי לפתוח את לקוח Hive:$> hiveמגדירים את ההגדרות בצד הלקוח כדי להפעיל תמיכה ב-Hive ACID לעסקאות בסשן של לקוח Hive:
SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; SET hive.support.concurrency=true; SET hive.exec.dynamic.partition.mode=nonstrict;יוצרים טבלת טרנזקציות להוספה ולעדכון. הנה דוגמה.
יצירת טבלת עסקאות:
create table student (id int, name string, age int) STORED AS ORC TBLPROPERTIES ('transactional' = 'true');בודקים אם הטבלה היא טרנזקציונלית:
describe formatted <tableName>;רשימה של מאפייני הטבלה מודפסת. בטבלה של טרנזקציות מופיע הערך
transactional=trueבפרמטרים של הטבלה.מוסיפים נתונים לטבלה:
INSERT INTO student VALUES (1, 'Alice', 10), (2, 'Bob', 10), (3, 'Charlie', 10);- בודקים את תיקיית הדלתא שנוצרה בספריית מחסן הנתונים של השירות, מתחת לספרייה
student. נוצרות כמה תיקיות דלתא אם מריצים כמה הצהרות של הוספה או עדכון.
- בודקים את תיקיית הדלתא שנוצרה בספריית מחסן הנתונים של השירות, מתחת לספרייה
אפשר לראות אילו פעולות דחיסה פועלות ומה הסטטוס שלהן. מאגר המטא-נתונים של Hive מריץ כל חמש דקות שרשור שנקרא initiator כדי לבדוק אם יש טבלאות שצריך לבצע בהן דחיסה, ומבקש לבצע דחיסה בטבלאות האלה.
show compactions;כדי להתחיל דחיסה ידנית (משנית או ראשית):
ALTER TABLE student COMPACT 'minor'; ALTER TABLE student COMPACT 'major';