פתרון בעיות שקשורות למשימות

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

הודעות שגיאה נפוצות לגבי עבודות

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

המשימה לא נרכשה

המשמעות היא שהסוכן של Managed Service for Apache Spark בצומת הראשי לא הצליח לקבל את המשימה ממישור הבקרה. לרוב, זה קורה בגלל בעיות בזיכרון (OOM) או ברשת. אם העבודה רצה בהצלחה בעבר ולא שיניתם את הגדרות התצורה של הרשת, סביר להניח שהסיבה היא OOM. לרוב, זה קורה כתוצאה משליחה של הרבה עבודות שרצות בו-זמנית או של עבודות שהדרייברים שלהן צורכים כמות משמעותית של זיכרון (לדוגמה, עבודות שמעלות מערכי נתונים גדולים לזיכרון).

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

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

כדי לפתור את הבעיה, אפשר לנסות את הפעולות הבאות:

המשימה לא נמצאה

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

  • כדי לזהות את חשבון המשתמש שביצע את פעולת המחיקה, צריך לעיין ביומני הביקורת של Managed Service for Apache Spark.

  • משתמשים ב-Logging או ב-CLI של gcloud כדי לוודא שהמצב הידוע האחרון של אפליקציית YARN היה RUNNING:

    • משתמשים במסנן הבא ב-Logging:
    resource.type="cloud_dataproc_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.cluster_uuid="CLUSTER_UUID"
    "YARN_APPLICATION_ID State change from"
    
    • מריצים את הפקודה gcloud dataproc jobs describe job-id --region=REGION ואז בודקים את yarnApplications: > STATE בפלט.
  • אם הגורם שהרשאותיו הוגדרו כ-principal ומחק את האשכול הוא חשבון השירות של סוכן השירות Managed Service for Apache Spark, צריך לבדוק אם האשכול הוגדר עם משך זמן למחיקה אוטומטית שהוא קצר יותר ממשך העבודה.

כדי למנוע שגיאות מסוג Task not found, כדאי להשתמש באוטומציה כדי לוודא שאשכולות לא נמחקים לפני שכל המשימות הפעילות מסתיימות.

אין מקום פנוי במכשיר

‫Managed Service for Apache Spark כותב נתוני HDFS ונתוני scratch לדיסק. הודעת השגיאה הזו מציינת שהאשכול נוצר עם נפח אחסון לא מספיק. כדי לנתח את השגיאה הזו ולמנוע אותה:

  • בודקים את הגודל של הדיסק הראשי של האשכול שמופיע בכרטיסייה Configuration בדף Cluster details במסוף Cloud de Confiance . גודל הדיסק המינימלי המומלץ הוא 1000 GB לאשכולות שמשתמשים בסוג המכונה n1-standard-4, ו-2 TB לאשכולות שמשתמשים בסוג המכונה n1-standard-32.

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

  • אם גודל הדיסק הוא הגודל המומלץ או גדול יותר, צריך להתחבר לאב VM הראשי של האשכול באמצעות SSH, ואז להריץ את הפקודה df -h באב VM הראשי כדי לבדוק את ניצול הדיסק ולקבוע אם נדרש שטח דיסק נוסף.

  • איסוף ובדיקה של מדדי דיסק.

מעקב אחרי משימות וניפוי באגים

אפשר להשתמש ב-Google Cloud CLI, ב-Managed Service for Apache Spark API בארכיטקטורת REST ובמסוף Cloud de Confiance כדי לנתח ולנפות באגים במשימות של Managed Service for Apache Spark.

‫CLI של gcloud

כדי לבדוק את הסטטוס של עבודה שפועלת:

gcloud dataproc jobs describe job-id \
    --region=region

כדי לראות את הפלט של מנהל העבודות, אפשר לעיין במאמר בנושא הצגת פלט של עבודות.

‫API בארכיטקטורת REST

כדי לבדוק את השדות JobStatus.State,‏ JobStatus.Substate,‏ JobStatus.details ו-YarnApplication של משימה, צריך להתקשר אל jobs.get.

המסוף

כדי לראות את הפלט של מנהל העבודות, אפשר לעיין במאמר בנושא הצגת פלט של עבודות.

כדי לראות את יומן הסוכן של Dataproc ב-Logging, בוחרים באפשרות Managed Service for Apache Spark Cluster→Cluster Name→Cluster UUID בתפריט לבחירת אשכולות ב-Logs Explorer.

לאחר מכן משתמשים בבורר היומנים כדי לבחור ביומני google.dataproc.agent.

צפייה ביומני המשימות ב-Logging

אם משימה נכשלת, אפשר לגשת ליומני המשימות ב-Logging.

איך קובעים מי שלח עבודה

כשמחפשים את פרטי המשרה, בשדה submittedBy מופיע מי שלח את המשרה. לדוגמה, בפלט של המשרה הזו אפשר לראות ש-user@domain שלח את המשרה לדוגמה לאשכול.

...
placement:
  clusterName: cluster-name
  clusterUuid: cluster-uuid
reference:
  jobId: job-uuid
  projectId: project
status:
  state: DONE
  stateStartTime: '2018-11-01T00:53:37.599Z'
statusHistory:
- state: PENDING
  stateStartTime: '2018-11-01T00:33:41.387Z'
- state: SETUP_DONE
  stateStartTime: '2018-11-01T00:33:41.765Z'
- details: Agent reported job success
  state: RUNNING
  stateStartTime: '2018-11-01T00:33:42.146Z'
submittedBy: user@domain