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

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

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

gcloud

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

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cassandra_To_Cloud_Bigtable \
    --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/Cassandra_To_Cloud_Bigtable
{
   "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 שצריך להעביר

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