תבנית להעברה מ-Apache Cassandra ל-Bigtable

התבנית Apache Cassandra to Bigtable מעתיקה טבלה מ-Apache Cassandra ל-Bigtable. התבנית הזו דורשת הגדרה מינימלית ומבצעת שכפול של מבנה הטבלה ב-Cassandra בצורה הכי מדויקת שאפשר ב-Bigtable.

התבנית Apache Cassandra to Bigtable שימושית למטרות הבאות:

  • העברת מסד נתונים של Apache Cassandra כשזמן השבתה קצר הוא סביר.
  • שכפול תקופתי של טבלאות Cassandra ל-Bigtable לצורך הצגה גלובלית.

הדרישות לגבי צינורות עיבוד נתונים

  • טבלת היעד ב-Bigtable צריכה להתקיים לפני שמריצים את צינור הנתונים.
  • חיבור רשת בין עובדי Dataflow לבין צמתי Apache Cassandra.

המרת סוג

תבנית Apache Cassandra to Bigtable ממירה באופן אוטומטי סוגי נתונים של Apache Cassandra לסוגי נתונים של Bigtable.

רוב הפרימיטיבים מיוצגים באותו אופן ב-Bigtable וב-Apache Cassandra, אבל הפרימיטיבים הבאים מיוצגים באופן שונה:

  • Date ו-Timestamp מומרים לאובייקטים של DateTime
  • UUID מומר ל-String
  • Varint מומר ל-BigDecimal

ב-Apache Cassandra יש גם תמיכה מובנית בסוגים מורכבים יותר כמו Tuple, ‏ List, ‏ Set ו-Map. הצינור הזה לא תומך בטפלים כי אין סוג תואם ב-Apache Beam.

לדוגמה, ב-Apache Cassandra יכולה להיות עמודה מסוג List בשם mylist עם ערכים כמו אלה שבטבלה הבאה:

שורה mylist
1 (a,b,c)

הצינור מרחיב את עמודת הרשימה לשלוש עמודות שונות (שנקראות ב-Bigtable מזהים של עמודות). שם העמודות הוא mylist, אבל הצינור מוסיף את האינדקס של הפריט ברשימה, למשל mylist[0].

שורה mylist[0] mylist[1] mylist[2]
1 a b c

הצינור מטפל בקבוצות באותו אופן שבו הוא מטפל ברשימות, אבל הוא מוסיף סיומת כדי לציין אם התא הוא מפתח או ערך.

שורה mymap
1 {"first_key":"first_value","another_key":"different_value"}

אחרי השינוי, הטבלה תיראה כך:

שורה mymap[0].key mymap[0].value mymap[1].key mymap[1].value
1 first_key first_value another_key different_value

המרת מפתח ראשי

ב-Apache Cassandra, מפתח ראשי מוגדר באמצעות שפת הגדרת נתונים. המפתח הראשי הוא פשוט, מורכב או משולב עם עמודות האשכול. ‫Bigtable תומך ביצירה ידנית של מפתחות שורות, שממוינים לקסיקוגרפית במערך של בייטים. הצינור אוסף באופן אוטומטי מידע על סוג המפתח ובונה מפתח על סמך שיטות מומלצות לבניית מפתחות שורות שמבוססים על כמה ערכים.

פרמטרים של תבניות

פרמטרים נדרשים

  • cassandraHosts: רשימה מופרדת בפסיקים של המארחים של צמתי Apache Cassandra.
  • cassandraKeyspace: מרחב המפתחות של Apache Cassandra שבו נמצא הטבלה.
  • cassandraTable: טבלת Apache Cassandra להעתקה.
  • bigtableProjectId: מזהה הפרויקט ב-Google Cloud שמשויך למופע Bigtable.
  • bigtableInstanceId: המזהה של מכונת Bigtable שאליה מועתקת טבלת Apache Cassandra.
  • bigtableTableId: השם של טבלת Bigtable שאליה מועתקת טבלת Apache Cassandra.

פרמטרים אופציונליים

  • cassandraPort: יציאת ה-TCP שמשמשת להגעה אל Apache Cassandra בצמתים. ערך ברירת המחדל הוא 9042.
  • defaultColumnFamily: השם של קבוצת העמודות בטבלת Bigtable. ערך ברירת המחדל הוא default.
  • rowKeySeparator: המפריד שמשמש ליצירת מפתחות שורות. ערך ברירת המחדל הוא #.
  • splitLargeRows: הדגל להפעלת פיצול של שורות גדולות לכמה בקשות MutateRows. שימו לב: כששורה גדולה מפולגת בין כמה קריאות API, העדכונים בשורה לא מתבצעים באופן אטומי. .
  • writetimeCassandraColumnSchema: נתיב GCS לסכימה להעתקת נתוני writetime של Cassandra ל-Bigtable. הפקודה ליצירת הסכימה הזו היא cqlsh -e "select json * from system_schema.columns where keyspace_name='$CASSANDRA_KEYSPACE' and table_name='$CASSANDRA_TABLE'`" > column_schema.json. מגדירים את $WRITETIME_CASSANDRA_COLUMN_SCHEMA לנתיב GCS, לדוגמה gs://$BUCKET_NAME/column_schema.json. לאחר מכן מעלים את הסכימה ל-GCS: gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMA. נדרשת גרסה 2.2 ואילך של Cassandra לתמיכה ב-JSON.
  • setZeroTimestamp: הדגל להגדרת חותמת הזמן של תא Bigtable ל-0 אם לא מופיע writetime של Cassandra. ההתנהגות שמוגדרת כברירת מחדל כשלא מגדירים את הדגל הזה היא להגדיר את חותמת הזמן של תא Bigtable כזמן השכפול של התבנית, כלומר עכשיו.

הרצת התבנית

המסוף

  1. עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow.
  2. כניסה לדף Create job from template
  3. בשדה שם המשימה, מזינים שם ייחודי למשימה.
  4. אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא us-central1.

    רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר בנושא מיקומי Dataflow.

  5. בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים בתבנית Cassandra to Cloud Bigtable (מ-Cassandra אל Cloud Bigtable).
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. לוחצים על הפעלת העבודה.

gcloud

במעטפת או בטרמינל, מריצים את התבנית:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/ \
    --region REGION_NAME \
    --parameters \
bigtableProjectId=BIGTABLE_PROJECT_ID,\
bigtableInstanceId=BIGTABLE_INSTANCE_ID,\
bigtableTableId=BIGTABLE_TABLE_ID,\
cassandraHosts=CASSANDRA_HOSTS,\
cassandraKeyspace=CASSANDRA_KEYSPACE,\
cassandraTable=CASSANDRA_TABLE

מחליפים את מה שכתוב בשדות הבאים:

  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • VERSION: הגרסה של התבנית שבה רוצים להשתמש

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • REGION_NAME: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • BIGTABLE_PROJECT_ID: מזהה הפרויקט שבו נמצא Bigtable
  • BIGTABLE_INSTANCE_ID: מזהה מכונת Bigtable
  • BIGTABLE_TABLE_ID: השם של טבלת Bigtable
  • CASSANDRA_HOSTS: רשימת המארחים של Apache Cassandra. אם מציינים כמה מארחים, צריך לפעול לפי ההוראות להוספת פסיקים
  • CASSANDRA_KEYSPACE: מרחב המפתחות של Apache Cassandra שבו נמצאת הטבלה
  • CASSANDRA_TABLE: טבלת Apache Cassandra שצריך להעביר

API

כדי להריץ את התבנית באמצעות API בארכיטקטורת REST, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/
{
   "jobName": "JOB_NAME",
   "parameters": {
       "bigtableProjectId": "BIGTABLE_PROJECT_ID",
       "bigtableInstanceId": "BIGTABLE_INSTANCE_ID",
       "bigtableTableId": "BIGTABLE_TABLE_ID",
       "cassandraHosts": "CASSANDRA_HOSTS",
       "cassandraKeyspace": "CASSANDRA_KEYSPACE",
       "cassandraTable": "CASSANDRA_TABLE"
   },
   "environment": { "zone": "us-central1-f" }
}

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud
  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • VERSION: הגרסה של התבנית שבה רוצים להשתמש

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • BIGTABLE_PROJECT_ID: מזהה הפרויקט שבו נמצא Bigtable
  • BIGTABLE_INSTANCE_ID: מזהה מכונת Bigtable
  • BIGTABLE_TABLE_ID: השם של טבלת Bigtable
  • CASSANDRA_HOSTS: רשימת המארחים של Apache Cassandra. אם מציינים כמה מארחים, צריך לפעול לפי ההוראות להוספת פסיקים
  • CASSANDRA_KEYSPACE: מרחב המפתחות של Apache Cassandra שבו נמצאת הטבלה
  • CASSANDRA_TABLE: טבלת Apache Cassandra שצריך להעביר

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