ייצוא מסדי נתונים מ-Spanner ל-Avro

בדף הזה מוסבר איך לייצא מסדי נתונים של Spanner באמצעות מסוףGoogle Cloud .

כדי לייצא מסד נתונים של Spanner באמצעות ה-API בארכיטקטורת REST או Google Cloud CLI, מבצעים את השלבים שמפורטים בקטע לפני שמתחילים בדף הזה, ואז פועלים לפי ההוראות המפורטות במאמר Spanner to Cloud Storage Avro במסמכי התיעוד של Dataflow. תהליך הייצוא משתמש ב-Dataflow וכותב נתונים לתיקייה בקטגוריה של Cloud Storage. התיקייה שנוצרת מכילה קבוצה של קובצי Avro וקובצי מניפסט בפורמט JSON.

לפני שמתחילים

כדי לייצא מסד נתונים של Spanner, קודם צריך להפעיל את ממשקי ה-API של Spanner,‏ Cloud Storage,‏ Compute Engine ו-Dataflow:

התפקידים שנדרשים כדי להפעיל ממשקי API

כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?

הפעלת ממשקי ה-API

אתם צריכים גם מכסה מספיקה והרשאות IAM נדרשות.

דרישות לגבי המכסות

אלה דרישות המכסה למשימות ייצוא:

  • ‫Spanner: לא נדרשת קיבולת מחשוב נוספת כדי לייצא מסד נתונים, אבל יכול להיות שתצטרכו להוסיף עוד קיבולת מחשוב כדי שהמשימה תסתיים תוך פרק זמן סביר. פרטים נוספים זמינים במאמר אופטימיזציה של משימות.
  • ‫Cloud Storage: כדי לייצא, צריך ליצור קטגוריה לקבצים המיוצאים אם עדיין אין לכם קטגוריה כזו. אפשר לעשות את זה במסוף Google Cloud , דרך הדף Cloud Storage או בזמן שיוצרים את הייצוא דרך הדף Spanner. לא צריך להגדיר גודל לקטגוריה.
  • ‫Dataflow: משימות הייצוא כפופות לאותן מכסות של Compute Engine בנוגע לשימוש ב-CPU, בדיסק ובכתובות IP, כמו משימות אחרות של Dataflow.
  • ‫Compute Engine: לפני שמריצים את משימת הייצוא, צריך להגדיר מכסות ראשוניות ל-Compute Engine, שמשמש את Dataflow. המכסות האלה מייצגות את המספר המקסימלי של המשאבים שאתם מאפשרים ל-Dataflow להשתמש בהם בשביל המשימה. הערכים ההתחלתיים המומלצים הם:

    • מעבדים: 200
    • כתובות IP בשימוש: 200
    • דיסק מתמיד סטנדרטי: ‏50TB

    בדרך כלל לא צריך לבצע שינויים נוספים. ב-Dataflow יש התאמה אוטומטית לעומס (scaling), כך שאתם משלמים רק על המשאבים שבהם השתמשתם בפועל במהלך הייצוא. אם המשימה יכולה להשתמש במשאבים נוספים, יופיע סמל אזהרה בממשק המשתמש של Dataflow. המשימה אמורה להסתיים גם אם מופיע סמל אזהרה.

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות לייצוא מסד נתונים, צריך לבקש מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בחשבון השירות של ה-worker VM ב-Dataflow:

כדי להשתמש במשאבי המחשוב העצמאיים של Spanner Data Boost במהלך הייצוא, צריך גם את ההרשאה spanner.databases.useDataBoost לניהול זהויות והרשאות גישה (IAM). מידע נוסף זמין במאמר סקירה כללית על Data Boost.

ייצוא של מסד נתונים

אחרי שתעמדו בדרישות המכסה ו-IAM שמתוארות למעלה, תוכלו לייצא מסד נתונים קיים של Spanner.

כדי לייצא את מסד הנתונים של Spanner לקטגוריה של Cloud Storage:

  1. נכנסים לדף Instances ב-Spanner.

    כניסה לדף Instances

  2. לוחצים על השם של המכונה שמכילה את מסד הנתונים.

  3. בחלונית הימנית, לוחצים על Import/Export ואז על Export.

  4. בקטע Choose where to store your export, לוחצים על Browse.

  5. אם עדיין אין לכם קטגוריה של Cloud Storage לייצוא:

    1. לוחצים על קטגוריה חדשה צילום מסך של רכיב חדש בממשק המשתמש של הקטגוריות.
    2. נותנים שם לקטגוריה. שמות הקטגוריות חייבים להיות ייחודיים ב-Cloud Storage.
    3. בוחרים מיקום וסוג אחסון שיוגדרו כברירת מחדל ולוחצים על Create.
    4. לוחצים על הקטגוריה כדי לבחור אותה.

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

  6. לוחצים על בחירה.

  7. בתפריט הנפתח Choose a database to export, בוחרים את מסד הנתונים שרוצים לייצא.

  8. אופציונלי: כדי לייצא את מסד הנתונים מנקודת זמן מוקדמת יותר, מסמנים את התיבה ומזינים חותמת זמן.

  9. בתפריט הנפתח Choose a region for the export job, בוחרים אזור.

  10. אופציונלי: כדי להצפין את מצב צינור עיבוד הנתונים של Dataflow באמצעות מפתח הצפנה בניהול הלקוח:

    1. לוחצים על הצגת אפשרויות ההצפנה.
    2. בוחרים באפשרות שימוש במפתח הצפנה בניהול הלקוח (CMEK).
    3. בוחרים את המפתח מהרשימה הנפתחת.

    האפשרות הזו לא משפיעה על ההצפנה ברמת הקטגוריה של Cloud Storage ביעד. כדי להפעיל את CMEK בקטגוריה של Cloud Storage, קראו את המאמר שימוש ב-CMEK עם Cloud Storage.

  11. אופציונלי: כדי לייצא באמצעות Data Boost, מסמנים את התיבה Use Spanner Data Boost. מידע נוסף זמין במאמר סקירה כללית על Data Boost.

  12. מסמנים את התיבה בקטע Confirm charges כדי לאשר שאתם מודעים לכך שיש חיובים נוספים לאלה של מכונת Spanner הקיימת.

  13. לוחצים על ייצוא.

    במסוף Google Cloud מוצג הדף Database Import/Export, שבו מופיע עכשיו פריט בשורה של משימת הייצוא ברשימת המשימות Import/Export, כולל הזמן שחלף מאז תחילת המשימה:

    צילום מסך של משימה בתהליך

כשהמשימה מסתיימת או נפסקת, הסטטוס מתעדכן ברשימה Import/Export. אם המשימה בוצעה בהצלחה, הסטטוס Succeeded יוצג:

הודעה על הצלחה של משימת ייצוא

אם המשימה נכשלה, הסטטוס Failed מוצג:

הודעת שגיאה במשימת ייצוא

כדי לראות את פרטי פעולת Dataflow של המשימה, לוחצים על שם המשימה בעמודה Dataflow job name.

אם המשימה נכשלת, בודקים את יומני Dataflow של המשימה כדי לקבל פרטים על השגיאה.

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

הערה לגבי ייצוא של עמודות שנוצרו וסנכרון שינויים בזרמי נתונים

הערכים בעמודה שנוצרה ונשמרה לא מיוצאים. הגדרת העמודה מיוצאת לסכימת Avro כשדה רשומה מסוג null, והגדרת העמודה היא מאפיינים מותאמים אישית של השדה. עד שפעולת המילוי החוזר של עמודה שנוצרה לאחרונה מסתיימת, המערכת מתעלמת מהעמודה שנוצרה כאילו היא לא קיימת בסכימה.

שינויים בזרמי נתונים שמיוצאים כקובצי Avro מכילים רק את הסכימה של השינויים בזרמי הנתונים, ולא רשומות של שינויים בנתונים.

הערה לגבי ייצוא רצפים

רצפים (GoogleSQL,‏ PostgreSQL) הם אובייקטים של סכימה שמשמשים ליצירת ערכים ייחודיים של מספרים שלמים. ‫Spanner מייצא כל אחד מאובייקטי הסכימה לסכימת Avro כשדה רשומה, עם סוג הרצף, הטווח שדילגו עליו והמונה כמאפיינים של השדה. שימו לב: כדי למנוע איפוס של רצף ויצירת ערכים כפולים אחרי הייבוא, במהלך ייצוא הסכימה, הפונקציה GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL,‏ PostgreSQL) מתעדת את מונה הרצף. ‫Spanner מוסיף מאגר של 1,000 למונה, וכותב את ערך המונה החדש בשדה הרשומה. כך אפשר להימנע משגיאות של ערכים כפולים שעלולות להתרחש אחרי הייבוא. אם יש יותר כתיבות למסד הנתונים של המקור במהלך ייצוא הנתונים, צריך לשנות את מונה הרצף בפועל באמצעות ההצהרה ALTER SEQUENCE (GoogleSQL,‏ PostgreSQL).

בזמן הייבוא, הרצף מתחיל מהמונה החדש הזה במקום מהמונה שנמצא בסכימה. לחלופין, אפשר להשתמש בהצהרה ALTER SEQUENCE (GoogleSQL,‏ PostgreSQL) כדי לעדכן את הרצף באמצעות מונה חדש.

איך רואים את הייצוא ב-Cloud Storage

כדי לראות את התיקייה שמכילה את מסד הנתונים שיוצא במסוףGoogle Cloud , עוברים לדפדפן Cloud Storage ובוחרים את הקטגוריה שבחרתם קודם:

כניסה לדף Storage browser

הקטגוריה מכילה עכשיו תיקייה עם מסד הנתונים שיוצא. שם התיקייה מתחיל במזהה המכונה, בשם מסד הנתונים ובחותמת הזמן של משימת הייצוא. התיקייה מכילה:

  • קובץ spanner-export.json
  • קובץ TableName-manifest.json לכל טבלה במסד הנתונים שייצאתם.
  • קובץ TableName.avro-#####-of-##### אחד או יותר. המספר הראשון בסיומת .avro-#####-of-##### מייצג את האינדקס של קובץ ה-Avro, החל מאפס, והמספר השני מייצג את מספר קובצי ה-Avro שנוצרו לכל טבלה.

    לדוגמה, Songs.avro-00001-of-00002 הוא הקובץ השני מבין שני קבצים שמכילים את הנתונים של הטבלה Songs.

  • קובץ ChangeStreamName-manifest.json לכל סנכרון שינויים בזרמי נתונים במסד הנתונים שייצאתם.

  • קובץ ChangeStreamName.avro-00000-of-00001 לכל סנכרון שינויים בזרמי נתונים. הקובץ הזה מכיל נתונים ריקים, ורק את סכימת Avro של סנכרון השינויים בזרמי הנתונים.

בחירת אזור למשימת הייבוא

יכול להיות שתרצו לבחור אזור אחר, בהתאם למיקום של הקטגוריה של Cloud Storage. כדי להימנע מחיובים על העברת נתונים יוצאים, צריך לבחור אזור שתואם למיקום של הקטגוריה של Cloud Storage.

  • אם המיקום של הקטגוריה של Cloud Storage הוא אזור, אתם יכולים ליהנות משימוש ברשת בחינם על ידי בחירת אותו אזור למשימת הייבוא, בהנחה שהאזור הזה זמין.

  • אם המיקום של הקטגוריה של Cloud Storage הוא שני אזורים, אתם יכולים ליהנות משימוש ברשת ללא עלות על ידי בחירה באחד משני האזורים שמרכיבים את שני האזורים של משימת הייבוא, בהנחה שאחד מהאזורים זמין.

  • אם אין אזור משותף שזמין למשימת הייבוא, או אם המיקום של קטגוריה של Cloud Storage הוא במספר אזורים, תחויבו על העברת נתונים יוצאים. כדי לבחור אזור שבו חיובי העברת הנתונים הם הנמוכים ביותר, עיינו בתמחור של העברת נתונים ב-Cloud Storage.

ייצוא של קבוצת משנה של טבלאות

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

אתם יכולים לציין קבוצת משנה של טבלאות לייצוא באמצעות הדף Dataflow במסוף Google Cloud או באמצעות ה-CLI של gcloud. (הפעולה הזו לא קיימת בדף של Spanner).

אם מייצאים נתונים של טבלה שהיא צאצא של טבלה אחרת, צריך לייצא גם את הנתונים של טבלת ההורה. אם ההורים לא מיוצאים, משימת הייצוא נכשלת.

כדי לייצא קבוצת משנה של טבלאות, מתחילים את הייצוא באמצעות התבנית Spanner to Cloud Storage Avro של Dataflow, ומציינים את הטבלאות באמצעות הדף Dataflow במסוף Google Cloud או באמצעות ה-CLI של gcloud, כפי שמתואר:

המסוף

אם אתם משתמשים בדף Dataflow במסוף Google Cloud , הפרמטר Cloud Spanner Table name(s)‎ נמצא בקטע Optional parameters בדף Create job from template. אפשר לציין כמה טבלאות בפורמט מופרד בפסיקים.

כניסה ל-Dataflow

gcloud

מריצים את הפקודה gcloud dataflow jobs run ומציינים את הארגומנט tableNames. לדוגמה:

gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=table1,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123

כדי לציין כמה טבלאות ב-gcloud, צריך להוסיף תו בריחה (escape) לארגומנטים מסוג מילון. בדוגמה הבאה, התו "|" משמש כתו בריחה:

 gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='^|^instanceId=test-instance|databaseId=example-db|tableNames=table1,table2|outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123

הפרמטר shouldExportRelatedTables הוא אפשרות נוחה לייצוא אוטומטי של כל טבלאות ההורה של הטבלאות שנבחרו. לדוגמה, בהיררכיית הסכימה הזו עם הטבלאות Singers,‏ Albums ו-Songs, צריך לציין רק את Songs. האפשרות shouldExportRelatedTables תייצא גם את Singers ואת Albums כי Songs הוא צאצא של שניהם.

gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=Songs,shouldExportRelatedTables=true,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123

הצגה או פתרון בעיות של משימות בממשק המשתמש של Dataflow

אחרי שמתחילים משימת ייצוא, אפשר לראות את הפרטים שלה, כולל יומנים, בקטע Dataflow במסוף Google Cloud .

הצגת פרטי המשימה ב-Dataflow

כדי לראות פרטים על משימות ייבוא או ייצוא שהפעלתם בשבוע האחרון, כולל משימות שפועלות עכשיו:

  1. עוברים לדף Database overview של מסד הנתונים.
  2. בחלונית הימנית, לוחצים על ייבוא/ייצוא. בדף Import/Export של מסד הנתונים מוצגת רשימה של המשימות האחרונות.
  3. בדף Import/Export של מסד הנתונים, לוחצים על שם המשימה בעמודה Dataflow job name:

    הודעת סטטוס של משימה בתהליך

    במסוף Google Cloud מוצגים הפרטים של משימת Dataflow.

כדי להציג משימה שהפעלתם לפני יותר משבוע:

  1. נכנסים לדף המשימות של Dataflow במסוף Google Cloud .

    כניסה לדף Jobs

  2. מוצאים את המשימה ברשימה ולוחצים על השם שלה.

    במסוף Google Cloud מוצגים הפרטים של משימת Dataflow.

צפייה ביומני Dataflow של המשימה

כדי לראות את היומנים של משימת Dataflow, עוברים לדף הפרטים של המשימה ולוחצים על Logs משמאל לשם המשימה.

אם משימה נכשלת, חפשו שגיאות ביומנים. אם יש שגיאות, מספר השגיאות מוצג ליד Logs:

דוגמה למספר השגיאות ליד הלחצן "יומנים"

כדי לראות שגיאות במשימות:

  1. לוחצים על מספר השגיאות לצד יומנים.

    היומנים של המשימה מוצגים במסוף Google Cloud . יכול להיות שתצטרכו לגלול כדי לראות את השגיאות.

  2. מאתרים את הרשומות שמופיע לידן סמל השגיאה סמל שגיאה.

  3. לוחצים על רשומה ביומן כדי להרחיב את התוכן שלה.

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

פתרון בעיות במשימות ייצוא שנכשלו

אם השגיאות הבאות מופיעות ביומני המשימות:

com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found

--or--

com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.

בודקים את הערך של 99% Read latency בכרטיסייה Monitoring של מסד הנתונים ב-Spanner במסוףGoogle Cloud . אם הערכים גבוהים (כמה שניות), סימן שהמכונה עמוסה מדי, מה שגורם לזמן הקצוב לתפוגה של פעולות הקריאה להיגמר והן נכשלות.

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

כדי להגביל את מספר ה-workers ב-Dataflow, במקום להשתמש בכרטיסייה Import/Export בדף הפרטים של המכונה של מסד הנתונים ב-Spanner ב Google Cloud מסוף, צריך להתחיל את הייצוא באמצעות התבנית Spanner to Cloud Storage Avro של Dataflow ולציין את המספר המקסימלי של ה-workers, כמו שמתואר כאן:

המסוף

אם אתם משתמשים במסוף Dataflow, הפרמטר Max workers נמצא בקטע Optional parameters בדף Create job from template.

כניסה ל-Dataflow

gcloud

מריצים את הפקודה gcloud dataflow jobs run ומציינים את הארגומנט max-workers. לדוגמה:

  gcloud dataflow jobs run my-export-job \
    --gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,outputDir=gs://my-gcs-bucket' \
    --max-workers=10 \
    --network=network-123

פתרון בעיות בחיבור לרשת

יכול להיות שתקבלו את השגיאה הבאה כשאתם מייצאים את מסדי הנתונים של Spanner:

Workflow failed. Causes: Error: Message: Invalid value for field
'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface
must specify a subnet if the network resource is in custom subnet mode.
HTTP Code: 400

השגיאה הזו מתרחשת כי Spanner מניח שאתם מתכוונים להשתמש ברשת VPC במצב אוטומטי בשם default באותו פרויקט של משימת Dataflow. אם אין לכם רשת VPC שמוגדרת כברירת מחדל בפרויקט, או אם רשת ה-VPC שלכם היא רשת VPC במצב מותאם אישית, אתם צריכים ליצור משימת Dataflow ולציין רשת או רשת משנה חלופית.

אופטימיזציה של משימות ייצוא שפועלות לאט

אם פעלתם לפי ההצעות בהגדרות הראשוניות, בדרך כלל לא תצטרכו לבצע שינויים נוספים. אם המשימה פועלת לאט, אתם יכולים לנסות כמה אופטימיזציות אחרות:

  • אופטימיזציה של מיקום המשימה והנתונים: מריצים את משימת Dataflow באותו אזור שבו נמצאים המכונה של Spanner והקטגוריה של Cloud Storage.

  • הקצאת מספיק משאבים ל-Dataflow: אם המכסות הרלוונטיות של Compute Engine מגבילות את המשאבים של משימת Dataflow, בדף Dataflow של המשימה במסוף Google Cloud מופיע סמל אזהרה סמל אזהרה והודעות ביומן:

    צילום מסך של אזהרה לגבי מגבלת המכסה

    במצב כזה, הגדלת המכסות למעבדי CPU, לכתובות IP בשימוש ולדיסקים מתמידים סטנדרטיים עשויה לקצר את זמן הריצה של המשימה, אבל יכול להיות שתחויבו יותר על השימוש ב-Compute Engine.

  • בודקים את ניצול המעבד (CPU) ב-Spanner: אם ניצול המעבד במכונה הוא מעל 65%, אפשר להגדיל את קיבולת המחשוב במכונה הזו. הקיבולת מוסיפה עוד משאבי Spanner והמשימה אמורה להאיץ, אבל תחויבו בעוד חיובים של Spanner.

גורמים שמשפיעים על הביצועים של משימות הייצוא

יש כמה גורמים שמשפיעים על משך הזמן שלוקח להשלים משימת ייצוא.

  • גודל מסד הנתונים ב-Spanner: עיבוד של יותר נתונים דורש יותר זמן ומשאבים.

  • סכימת מסד הנתונים של Spanner, כולל:

    • מספר הטבלאות
    • גודל השורות
    • מספר האינדקסים המשניים
    • מספר המפתחות הזרים
    • מספר השינויים בזרמי הנתונים

  • מיקום הנתונים: הנתונים מועברים בין Spanner לבין Cloud Storage באמצעות Dataflow. באופן אידיאלי, כל שלושת הרכיבים נמצאים באותו אזור. אם הרכיבים לא נמצאים באותו אזור, העברת הנתונים בין האזורים מאטה את המשימה.

  • מספר ה-workers ב-Dataflow: כדי להשיג ביצועים טובים, צריך מספר אופטימלי של workers ב-Dataflow. כשמשתמשים בהתאמה אוטומטית לעומס, Dataflow בוחר את מספר ה-workers למשימה בהתאם לכמות העבודה שצריך לבצע. עם זאת, מספר ה-workers מוגבל על ידי המכסות של המעבדים, כתובות ה-IP שבשימוש והדיסק המתמיד הסטנדרטי. אם יש חריגה ממכסות, בממשק המשתמש של Dataflow מופיע סמל אזהרה. במצב כזה, ההתקדמות איטית יותר, אבל המשימה עדיין אמורה להסתיים.

  • עומס קיים ב-Spanner: משימת ייצוא בדרך כלל מוסיפה עומס קל למכונה של Spanner. אם כבר יש עומס משמעותי על המכונה, המשימה תפעל לאט יותר.

  • כמות קיבולת המחשוב של Spanner: אם ניצול המעבד (CPU) של המכונה הוא מעל 65%, המשימה פועלת לאט יותר.