מעקב ופתרון בעיות בעומסי עבודה באצווה

במסמך הזה מתוארים הכלים והקבצים שבהם אפשר להשתמש כדי לנטר ולפתור בעיות בעומסי עבודה של אצווה ב-Managed Service for Apache Spark.

פתרון בעיות בעומסי עבודה מהמסוף Google Cloud

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

שימוש בכרטיסייה 'סיכום': המרכז לפתרון בעיות

בכרטיסייה Summary, שנבחרת כברירת מחדל כשפותחים את הדף Batch details, מוצגים מדדים חשובים ויומני פעילות מסוננים שיעזרו לכם לבצע הערכה ראשונית מהירה של תקינות האצווה. אחרי ההערכה הראשונית הזו, אפשר לבצע ניתוח מעמיק יותר באמצעות כלים ייעודיים יותר שזמינים בדף פרטי אצווה, כמו Spark UI,‏ Logs Explorer ו-Gemini Cloud Assist.

הדגשים של מדדים באצווה

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

לוח הבקרה של מדדי קבוצות.

טבלת מדדים

בטבלה הבאה מפורטים מדדי עומס העבודה של Spark שמוצגים בדף Batch details במסוף Google Cloud , ומתואר איך ערכי המדדים יכולים לספק תובנות לגבי הסטטוס והביצועים של עומס העבודה.

מדד מה מוצג?
מדדים ברמת הרכיב Executor
יחס בין זמן איסוף האשפה של JVM לבין זמן הריצה המדד הזה מציג את היחס בין זמן מנגנון איסוף הזבל (GC) של JVM לבין זמן הריצה לכל executor. יחסים גבוהים יכולים להצביע על דליפות זיכרון במשימות שפועלות ב-executors מסוימים או על מבני נתונים לא יעילים, מה שיכול להוביל לתחלופה גבוהה של אובייקטים.
בייטים של דיסק שנשפכו המדד הזה מציג את המספר הכולל של בייטים בדיסק שחורגים מהמכסה של מנהלי ביצוע שונים. אם מופיע ערך גבוה של disk bytes spilled (בתים של נתונים שנשפכו לדיסק) עבור רכיב Executor, יכול להיות שיש חלוקת נתונים לא מאוזנת (partition skew). אם המדד עולה לאורך זמן, יכול להיות שיש שלבים עם עומס על הזיכרון או דליפות זיכרון.
בייטים שנקראו ונכתבו המדד הזה מציג את מספר הבייטים שנכתבו לעומת מספר הבייטים שנקראו לכל תהליך. פערים גדולים בבייטים שנקראו או נכתבו יכולים להצביע על תרחישים שבהם הצטרפות משוכפלת מובילה להגדלת נתונים במבצעים ספציפיים.
קריאה וכתיבה של רשומות המדד הזה מציג את הרשומות שנקראו ונכתבו לכל רכיב Executor. מספרים גדולים של רשומות שנקראו עם מספרים קטנים של רשומות שנכתבו יכולים להצביע על צוואר בקבוק בלוגיקה של העיבוד במבצעים ספציפיים, מה שמוביל לכך שהרשומות נקראות בזמן ההמתנה. אם יש עיכובים עקביים בפעולות קריאה וכתיבה של רכיבי Executor, יכול להיות שיש תחרות על משאבים בצמתים האלה או חוסר יעילות בקוד שספציפי לרכיב Executor.
היחס בין זמן כתיבת הנתונים לזמן הריצה המדד מציג את משך הזמן שבו תהליך ההפעלה שהה בזמן הריצה של ערבוב הנתונים, בהשוואה לזמן הריצה הכולל. אם הערך הזה גבוה עבור חלק מהמבצעים, יכול להיות שיש חלוקת נתונים לא מאוזנת או סריאליזציה לא יעילה של נתונים. אפשר לזהות שלבים עם זמני כתיבה ארוכים של shuffle בממשק המשתמש של Spark. מחפשים משימות חריגות בשלבים האלה שמשך הזמן לביצוע שלהן ארוך יותר מהממוצע. בודקים אם גם פעילות קלט/פלט גבוהה בדיסק מוצגת ב-executors עם זמני כתיבה גבוהים של shuffle. יכול להיות שסריאליזציה יעילה יותר ושלבים נוספים של חלוקה למחיצות יעזרו. כתיבה של רשומות גדולות מאוד בהשוואה לקריאה של רשומות יכולה להצביע על שכפול לא מכוון של נתונים בגלל צירופים לא יעילים או טרנספורמציות לא נכונות.
מדדים ברמת האפליקציה
התקדמות בשלבים המדד הזה מציג את מספר השלבים שנכשלו, נמצאים בהמתנה או פועלים. מספר גדול של שלבים שנכשלו או נמצאים בהמתנה יכול להצביע על חלוקת נתונים לא מאוזנת. בודקים אם יש חלוקה למחיצות של נתונים, ומאתרים את הסיבה לכשל בשלב באמצעות הכרטיסייה Stages בממשק המשתמש של Spark.
Batch Spark Executors במדד הזה מוצג מספר המפעילים שנדרשים לעומת מספר המפעילים שפועלים. הבדל גדול בין מספר המבצעים הנדרשים לבין מספר המבצעים הפעילים יכול להצביע על בעיות בהתאמה לעומס (autoscaling).
מדדים ברמת המכונה הווירטואלית
זיכרון בשימוש המדד הזה מציג את אחוז הזיכרון של המכונה הווירטואלית שנמצא בשימוש. אם אחוז הזיכרון הראשי גבוה, יכול להיות שהדרייבר נמצא בעומס זיכרון. בצמתים אחרים של מכונות וירטואליות, אחוז גבוה יכול להצביע על כך שהמבצעים (executors) מתחילים להיות ללא זיכרון פנוי (OOM), מה שעלול להוביל לזליגת נתונים גבוהה לדיסק ולזמן ריצה איטי יותר של עומס העבודה. אפשר להשתמש בממשק המשתמש של Spark כדי לנתח את ה-executors ולבדוק אם יש זמן GC גבוה ושיעור גבוה של כשלים במשימות. בנוסף, אפשר לנפות באגים בקוד Spark כדי לבדוק אם יש שמירה במטמון של מערכי נתונים גדולים ושידור מיותר של משתנים.

יומני משרות

בדף Batch details יש קטע Job logs שבו מוצגות אזהרות ושגיאות שסוננו מיומני הרישום של העבודה (עומס העבודה של ה-Batch). התכונה הזו מאפשרת לזהות במהירות בעיות קריטיות בלי שתצטרכו לנתח ידנית קובצי יומן נרחבים. אפשר לבחור חומרה של יומן (לדוגמה, Error) מהתפריט הנפתח ולהוסיף מסנן טקסט כדי לצמצם את התוצאות. כדי לבצע ניתוח מעמיק יותר, לוחצים על הסמל הצגה ב-Logs Explorer כדי לפתוח את יומני האצווה שנבחרו ב-Logs Explorer.

צפייה ביומנים של אצווה ב-Cloud Logging
הצגת יומני אצווה ב-Cloud Logging

דוגמה: Logs Explorer נפתח אחרי שבוחרים באפשרות Errors מתוך בורר החומרה בדף Batch details במסוף Google Cloud .

הכלי לבדיקת יומני אצווה.

ממשק המשתמש של Spark

ממשק המשתמש של Spark אוסף פרטי ביצוע של Apache Spark מעומסי עבודה של עיבוד ברצף (batch processing) ב-Managed Service for Apache Spark. התכונה Spark UI מופעלת כברירת מחדל ואין חיוב על השימוש בה.

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

הרשאות ותפקידים נדרשים בניהול הזהויות והרשאות הגישה (IAM)

כדי להשתמש בתכונה Spark UI עם עומסי עבודה של אצווה, נדרשות ההרשאות הבאות.

  • הרשאה לאיסוף נתונים: dataproc.batches.sparkApplicationWrite. צריך להעניק את ההרשאה הזו לחשבון השירות שמריץ עומסי עבודה של Batch. ההרשאה הזו כלולה בתפקיד Managed Service for Apache Spark Worker, שמוענק באופן אוטומטי לחשבון השירות שמשמש כברירת מחדל של Compute Engine, ושירות Managed Service for Apache Spark משתמש בו כברירת מחדל (ראו חשבון השירות של Managed Service for Apache Spark). עם זאת, אם מציינים חשבון שירות בהתאמה אישית לעומס העבודה של אצווה, צריך להוסיף את ההרשאה dataproc.batches.sparkApplicationWrite לחשבון השירות הזה (בדרך כלל, על ידי הקצאת התפקיד Worker Managed Service for Apache Spark לחשבון השירות).

  • הרשאת גישה לממשק המשתמש של Spark: ‏ dataproc.batches.sparkApplicationRead. צריך להעניק את ההרשאה הזו למשתמש כדי לגשת לממשק המשתמש של Spark במסוףGoogle Cloud . ההרשאה הזו כלולה בתפקידים Dataproc Viewer, ‏ Dataproc Editor ו-Dataproc Administrator. כדי לפתוח את ממשק המשתמש של Spark במסוף Google Cloud , צריך להיות לכם אחד מהתפקידים האלה או תפקיד בהתאמה אישית שכולל את ההרשאה הזו.

פתיחת ממשק המשתמש של Spark

הדף Spark UI זמין בעומסי עבודה של אצווה במסוף Google Cloud .

  1. עוברים לדף סשנים אינטראקטיביים של Managed Service for Apache Spark.

    מעבר אל Managed Service for Apache Spark Batches

  2. לוחצים על מזהה אצווה כדי לפתוח את הדף פרטי אצווה.

  3. לוחצים על View Spark UI (הצגת ממשק המשתמש של Spark) בתפריט העליון.

הכפתור View Spark UI מושבת במקרים הבאים:

יומנים של Managed Service for Apache Spark

הרישום ביומן מופעל כברירת מחדל ב-Managed Service for Apache Spark, ויומני עומסי העבודה נשמרים אחרי שעומס העבודה מסתיים. ‫Managed Service for Apache Spark אוסף יומנים של עומסי עבודה ב-Cloud Logging. אפשר לגשת ליומנים של Managed Service for Apache Spark במשאב Cloud Dataproc Batch ב-Logs Explorer.

שאילתות ביומנים של Managed Service for Apache Spark

ב-Logs Explorer במסוף Google Cloud יש חלונית שאילתות שבעזרתה אפשר ליצור שאילתה לבדיקת יומנים של עומסי עבודה באצווה. אלה השלבים ליצירת שאילתה לבדיקת יומני עומסי עבודה של אצווה:

  1. כניסה לדף Logs Explorer

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

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

      1. בקטע כל המשאבים, בוחרים את המשאב Cloud Managed Service for Apache Spark Batch.

        1. בחלונית Select resource, בוחרים את חבילת LOCATION ואז את BATCH ID. פרמטרים של חבילות מופיעים בדף Batches של Managed Service for Apache Spark במסוף Google Cloud .

        2. לוחצים על אישור.

        3. בקטע Select log names (בחירת שמות יומנים), מזינים dataproc.googleapis.com בתיבה Search log names (חיפוש שמות יומנים) כדי להגביל את סוגי היומנים לשאילתה. בוחרים שם אחד או יותר של קובץ יומן מהרשימה.

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

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

        resource.type="cloud_dataproc_batch"
        labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCH_UUID-VM_SUFFIX"
        
        הערות:

        • VM_NAME_PREFIX: משתמשים ב-gdpic-rm לעומסי עבודה באצווה שפועלים ב-Managed Service for Apache Spark 3.0 ובגרסאות מאוחרות יותר של זמן ריצה, וב-gdpic-srvls-batch לעומסי עבודה באצווה שפועלים בגרסאות מוקדמות יותר של זמן ריצה.
        • BATCH_UUID: ה-UUID של אצווה מופיע בדף הפרטים של האצווה במסוף Google Cloud , שנפתח כשלוחצים על מזהה האצווה בדף Batches.

        בנוסף, ביומני האצווה מופיע ה-UUID של האצווה בשם המשאב של מכונת ה-VM. דוגמה מ-driver.log של קבוצת מודעות:

  4. לוחצים על Run query.

סוגי יומנים ושאילתות לדוגמה ב-Managed Service for Apache Spark

ברשימה הבאה מתוארים סוגים שונים של יומנים של Managed Service for Apache Spark, ומוצגות דוגמאות לשאילתות ב-Logs Explorer לכל סוג יומן.

  1. dataproc.googleapis.com/output: קובץ היומן הזה מכיל פלט של עומסי עבודה באצווה. Managed Service for Apache Spark מעביר את הפלט של העיבוד ברצף (batch processing) למרחב השמות output, ומגדיר את שם הקובץ ל-JOB_ID.driver.log.

    דוגמה לשאילתה ב-Logs Explorer ליומני פלט:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Foutput"
    

  2. dataproc.googleapis.com/spark: מרחב השמות spark צובר יומנים של Spark עבור דמונים וקובצי הפעלה שפועלים במכונות וירטואליות של מאסטר ועובד באשכול Managed Service for Apache Spark. כל רשומה ביומן כוללת תווית רכיב master, worker או executor כדי לזהות את מקור היומן, באופן הבא:

    • executor: יומנים ממבצעי קוד משתמש. בדרך כלל מדובר ביומני רישום מבוזרים.
    • master: יומנים מהמאסטר של מנהל המשאבים העצמאי של Spark, שדומים ליומנים של ResourceManagerYARN של Managed Service for Apache Spark.
    • worker: יומנים מהעובד של מנהל המשאבים העצמאי של Spark, שדומים ליומנים של Managed Service for Apache Spark YARN‏ NodeManager.

    דוגמה לשאילתה ב-Logs Explorer לכל היומנים במרחב השמות spark:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    

    דוגמה לשאילתה ב-Logs Explorer ליומנים של רכיב Spark עצמאי במרחב השמות spark:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    jsonPayload.component="COMPONENT"
    

  3. dataproc.googleapis.com/startup: מרחב השמות startup כולל את יומני ההפעלה של אצווה (אשכול). כל היומנים של סקריפט האתחול נכללים. הרכיבים מזוהים לפי תווית, לדוגמה:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    שאילתה לדוגמה ב-Logs Explorer ליומני הפעלה במכונה וירטואלית ספציפית:
    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fstartup"
    labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agent: מרחב השמות agent צובר את יומני הסוכן של Managed Service for Apache Spark. כל רשומה ביומן כוללת תווית של שם הקובץ שמזהה את מקור היומן.

    דוגמה לשאילתה ב-Logs Explorer ליומני סוכנים שנוצרו על ידי worker VM ספציפי:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fagent"
    labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscaler: מרחב השמות autoscaler כולל את היומנים של קנה המידה האוטומטי של Managed Service for Apache Spark.

    דוגמה לשאילתת Logs Explorer ליומני autoscaler שנוצרו על ידי worker VM ספציפית:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fautoscaler"
    labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCHUUID-wWORKER#"
    

מידע נוסף זמין במאמר בנושא יומנים של Managed Service for Apache Spark.

מידע על יומני ביקורת של Managed Service for Apache Spark זמין במאמר יומני ביקורת של Managed Service for Apache Spark.

מדדים של עומסי עבודה

‫Managed Service for Apache Spark מספק מדדים של אצווה ו-Spark שאפשר לראות בMetrics Explorer או בדף Batch details במסוף Google Cloud .

מדדים של קבוצות

מדדי המשאבים של Managed Service for Apache Spark batch מספקים תובנות לגבי משאבים של אצווה, כמו מספר המבצעים של אצווה. מדדים של קבוצות מסומנים בקידומת dataproc.googleapis.com/batch.

דוגמה למדד של Batch בכלי Metrics Explorer.

מדדי Spark

כברירת מחדל, ב-Managed Service for Apache Spark מופעל איסוף של מדדי Spark זמינים, אלא אם משתמשים במאפיינים של איסוף מדדי Spark כדי להשבית או לבטל את האיסוף של מדד Spark אחד או יותר.

המדדים הזמינים של Spark כוללים מדדים של מנהל ההתקן והמפעיל של Spark, ומדדים של המערכת. למדדי Spark הזמינים יש קידומת custom.googleapis.com/.

דוגמה למדד Spark ב-Metrics Explorer.

הגדרת התראות לגבי מדדים

אתם יכולים ליצור התראות על מדדים של Managed Service for Apache Spark כדי לקבל הודעה על בעיות בעומסי העבודה.

יצירת תרשימים

אתם יכולים ליצור תרשימים שמציגים את מדדי עומס העבודה באמצעות Metrics Explorer במסוףGoogle Cloud . לדוגמה, אפשר ליצור תרשים להצגת disk:bytes_used, ואז לסנן לפי batch_id.

Cloud Monitoring

הניטור מתבסס על מטא-נתונים ומדדים של עומסי עבודה כדי לספק תובנות לגבי התקינות והביצועים של עומסי עבודה ב-Managed Service for Apache Spark. מדדי עומס העבודה כוללים מדדי Spark, מדדי אצווה ומדדי פעולה.

אתם יכולים להשתמש ב-Cloud Monitoring במסוף Google Cloud כדי לעיין במדדים, להוסיף תרשימים, ליצור לוחות בקרה וליצור התראות.

יצירת מרכזי בקרה

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

שרת היסטוריה מתמשך

שירות מנוהל ל-Apache Spark יוצר את משאבי המחשוב שנדרשים להרצת עומס עבודה, מריץ את עומס העבודה במשאבים האלה ואז מוחק את המשאבים כ שעומס העבודה מסתיים. מדדים ואירועים של עומס עבודה לא נשמרים אחרי שעומס העבודה מסתיים. עם זאת, אפשר להשתמש בשרת היסטוריה מתמשך (PHS) כדי לשמור את היסטוריית האפליקציות של עומסי העבודה (יומני אירועים) ב-Cloud Storage.

כדי להשתמש ב-PHS עם עומס עבודה של אצווה, צריך לבצע את הפעולות הבאות:

  1. יצירת שרת היסטוריה מתמיד (PHS) של Managed Service for Apache Spark.

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

  3. אפשר להשתמש בComponent Gateway כדי להתחבר ל-PHS ולראות את פרטי האפליקציה, שלבי התזמון, פרטים ברמת המשימה ומידע על הסביבה והמבצע.

כוונון אוטומטי

  • הפעלת אופטימיזציה אוטומטית ל-Managed Service for Apache Spark: אתם יכולים להפעיל אופטימיזציה אוטומטית ל-Managed Service for Apache Spark כשאתם שולחים כל עומס עבודה חוזר של Spark batch באמצעות Google Cloud המסוף, ה-CLI של gcloud או Managed Service for Apache Spark API.

המסוף

כדי להפעיל כוונון אוטומטי בכל עומס עבודה חוזר של Spark batch:

  1. נכנסים לדף Batches של Managed Service for Apache Spark במסוף Google Cloud .

    מעבר אל Managed Service for Apache Spark Batches

  2. כדי ליצור עומס עבודה של אצווה, לוחצים על Create.

  3. בקטע Container, ממלאים את השם של Cohort, שמזהה את האצווה כאחת מסדרה של עומסי עבודה חוזרים. ניתוח בעזרת Gemini מוחל על עומסי העבודה השני והבאים שנשלחים עם שם הקבוצה הזה. לדוגמה, אפשר לציין את השם TPCH-Query1 לקוהורט של עומס עבודה מתוזמן שמריץ שאילתת TPC-H מדי יום.

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

gcloud

מריצים את הפקודה הבאה של ה-CLI של gcloud‏ gcloud dataproc batches submit באופן מקומי בחלון הטרמינל או ב-Cloud Shell כדי להפעיל כוונון אוטומטי בכל עומס עבודה חוזר של Spark batch:

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    other arguments ...

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

  • COMMAND: סוג עומס העבודה של Spark, למשל Spark, ‏PySpark, ‏Spark-Sql או Spark-R.
  • REGION: האזור שבו יפעל עומס העבודה.
  • COHORT: שם הקוהורט, שמזהה את האצווה כאחת מתוך סדרה של עומסי עבודה חוזרים. הניתוח בעזרת Gemini מוחל על עומסי העבודה השני והבאים שמוגשים עם שם הקבוצה הזה. לדוגמה, אפשר לציין TPCH Query 1 בתור שם הקוהורט לעומס עבודה מתוזמן שמריץ שאילתת TPC-H מדי יום.

API

כדי להפעיל כוונון אוטומטי בכל עומס עבודה חוזר של Spark batch, צריך לכלול את השם RuntimeConfig.cohort בבקשת batches.create. התאמה אוטומטית מופעלת בעומסי העבודה השני והבאים שמוגשים עם שם הקוהורט הזה. לדוגמה, אפשר לציין את TPCH-Query1 כשם הקוהורט לעומס עבודה מתוזמן שמריץ שאילתת TPC-H מדי יום.

דוגמה:

...
runtimeConfig:
  cohort: TPCH-Query1
...