פרטי השלב במשימה ב-Dataflow

בחלונית Step info בממשק המעקב של Dataflow מוצג מידע על שלבים ספציפיים במשימה. שלב מייצג טרנספורמציה אחת בצינור. טרנספורמציות מורכבות כוללות שלבי משנה.

בחלונית Step info מוצג המידע הבא:

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

אפשר להשתמש בחלונית Step info כדי להבין את הביצועים של העבודה בכל שלב, וכדי למצוא שלבים שאפשר לבצע בהם אופטימיזציה.

הצגת פרטי השלב

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

  1. במסוף Google Cloud , נכנסים לדף Dataflow >‏ Jobs.

    מעבר לדף Jobs

  2. בוחרים משרה.

  3. לוחצים על הכרטיסייה Job graph כדי לראות את תרשים המשימות. בתרשים של העבודה, כל שלב בצינור העיבוד מיוצג כתיבה.

  4. לוחצים על שלב. המידע על השלב מופיע בחלונית Step info.

  5. כדי לראות את שלבי המשנה של טרנספורמציה מורכבת, לוחצים על החץ הרחבת הצומת.

מדדים של שלבים

בחלונית פרטי השלב מוצגים המדדים הבאים של השלב.

סימן מים של המערכת ופיגור

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

סימן מים של נתונים וזמן השהיה

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

זמן בפועל

זמן שעון הוא הזמן הכולל המשוער שחלף בכל השרשורים בכל העובדים בפעולות הבאות:

  • אתחול השלב
  • עיבוד נתונים
  • ערבוב נתונים
  • סיום השלב

בשלבים מורכבים, הזמן שחלף שווה לסכום הזמן שהושקע בשלבי הרכיב.

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

סטטוס צוואר הבקבוק

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

זמן האחזור המקסימלי של הפעולה

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

מקביליות של מפתחות

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

מידע על עיבוד החלק הנצפה בלבד

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

  • פונקציית חלון: org.apache.beam.sdk.transforms.windowing.SlidingWindows
  • תקופת החלון: 30 sec
  • גודל החלון: 5 min
  • Window Start Offset: 0 ms
  • מצב צבירה של חלונות: DISCARDING
  • Windowing Write Amplification Factor: 10

השדות הבאים של חלונות מספקים הקשר חשוב לביצועים של סטרימינג ולנפח הנתונים:

  • מצב צבירה של חלונות: מציין אם מצב החלון נשמר בין הפעלות של טריגרים. מידע נוסף זמין במאמר בנושא Window accumulation modes (מצבי צבירה של חלונות) במסמכי התיעוד של Apache Beam.
  • מקדם הגדלת הכתיבה של חלונות: המספר הממוצע של חלונות שכל רכיב נכנס משויך אליהם, שמחושב לפי הנוסחה Window Size / Window Period. לדוגמה, אם גודל החלון הוא 5 דקות (300 sec) ומשך ההזזה הוא 30 שניות (30 sec), כל רכיב משויך ל-10 חלונות חופפים (300 / 30 = 10), וכתוצאה מכך מקדם הגדלת הכתיבה הוא 10. גורם הגברה גדול מ-1 מכפיל את נפח הרכיבים במורד הזרם, את התנועה של ערבוב הנתונים ואת אחסון המצב.

קולקציות של קלט/פלט

בחלונית Step info מוצג המידע הבא על כל אוסף של קלט ופלט בשלב:

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

  • מספר הרכיבים שנוספו לאוסף.

  • הגודל המשוער של האוסף, בבייטים.

שלבים שעברו אופטימיזציה

שלב מייצג יחידת עבודה אחת שמבוצעת על ידי Dataflow. כשבוחרים שלב בתרשים של העבודה, בחלונית Step info מוצגים שמות השלבים שמבצעים את השלב הזה, וגם הסטטוס הנוכחי, כמו running, stopped או succeeded.

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

מדדים של מקורות קלט נוספים

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

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

טרנספורמציות שיוצרות קלט צדדי

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

  • הזמן שהושקע בכתיבה: הזמן שהושקע בכתיבת אוסף הקלט הצדדי.
  • Bytes written: המספר הכולל של בייטים שנכתבו באוסף של קלט צדדי.
  • הזמן והבייטים שנקראו מקלט צדדי: טבלה שמכילה מדדים נוספים לכל הטרנספורמציות שצורכות את אוסף הקלט הצדדי, שנקראות צרכני קלט צדדי.

בטבלה Time & bytes read from side input מופיע המידע הבא לגבי כל צרכן של קלט צדדי:

  • Side input consumer: The transform name of the side input consumer.
  • הזמן שהושקע בפעילות קריאה: הזמן שהצרכן הזה השקיע בקריאת אוסף הקלט הצדדי.
  • בייטים שנקראו: מספר הבייטים שהצרכן הזה קרא מאוסף הקלט הצדדי.

בתמונה הבאה מוצגים מדדים של קלט צדדי לטרנספורמציה שיוצרת אוסף של קלט צדדי:

מדדים של קלט צדדי שמוצגים בחלונית Step info

בתרשים של העבודה יש טרנספורמציה מורכבת מורחבת (MakeMapView). נבחרה טרנספורמציית המשנה שיוצרת את הקלט הצדדי (CreateDataflowView), והמדדים של הקלט הצדדי גלויים בחלונית Step info.

טרנספורמציות שצורכות קלט צדדי

אם טרנספורמציה צורכת קלט צדדי אחד או יותר, הטבלה Time & bytes read from side input (זמן וקריאת בייטים מקלט צדדי) מוצגת בקטע Side Input Metrics (מדדים של קלט צדדי). בטבלה הזו מפורטים הפרטים הבאים לגבי כל אוסף של קלט צדדי:

  • אוסף קלט צדדי: השם של אוסף הקלט הצדדי.
  • הזמן שהושקע בפעילות קריאה: הזמן שנדרש לטרנספורמציה לקריאת אוסף הקלט הצדדי הזה.
  • בייטים שנקראו: מספר הבייטים שהטרנספורמציה קראה מאוסף הקלט הצדדי הזה.

בתמונה הבאה מוצגים מדדים של קלט צדדי לטרנספורמציה שקוראת מאוסף של קלט צדדי.

מדדים של קלט צדדי שמוצגים בחלונית Step info

הטרנספורמציה JoinBothCollections קוראת מאוסף קלט צדדי. האפשרות JoinBothCollections נבחרה בתרשים של המשימה, והמדדים של קלט הצד מוצגים בחלונית פרטי השלב.

זיהוי בעיות בביצועים של קלט צדדי

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

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

בתמונה הבאה, המדדים של הקלט הצדדי מראים שהמספר הכולל של הבייטים שנקראו מאוסף הקלט הצדדי גדול בהרבה מהגודל של האוסף, שמוצג כמספר הכולל של הבייטים שנכתבו. האוסף של קלט הצד הוא 563 MB, והסכום של הבייטים שנקראו על ידי טרנספורמציות צריכה הוא כמעט 12 GB.

דוגמה לחזרה על אותה נקודה

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

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

בתמונה הבאה מוצגים מדדים של קלט צדדי שקשורים לבעיה הזו:

דוגמה לצירוף יקר של קלט צדדי

הזמן הכולל לעיבוד של טרנספורמציית JoinBothCollections הוא יותר מ-18 דקות. העובדים משקיעים את רוב זמן העיבוד (10 דקות) בקריאה מאוסף הקלט הצדדי בגודל 10 GB. כדי לשפר את הביצועים של צינור העיבוד הזה, כדאי להשתמש ב-CoGroupByKey במקום בקלט צדדי.