פתרון בעיות בצינורות נתונים באצווה ב-Cloud Data Fusion

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

שגיאה בצינור העיבוד: קובץ הטקסט נמצא בשימוש

השגיאה הבאה מתרחשת כשמריצים צינור להעברת נתונים של קבוצת נתונים, וגורמת לכך שהוא ייכשל:

error=26, Text file busy

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

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

צינור (pipeline) מקביל נתקע

ב-Cloud Data Fusion, הפעלה של הרבה צינורות נתונים באצווה בו-זמנית עלולה להעמיס על המכונה, ולגרום לכך שהמשימות ייתקעו במצבים Starting, Provisioning או Running. כתוצאה מכך, אי אפשר לעצור את צינורות העיבוד דרך ממשק האינטרנט או קריאות ה-API. כשמריצים הרבה צינורות במקביל, ממשק האינטרנט עלול להיות איטי או לא להגיב. הבעיה הזו מתרחשת בגלל בקשות מרובות לממשק המשתמש שמועברות ל-HTTP handler בבק-אנד.

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

הזמן הקצוב לתפוגה של חיבור SSH מסתיים בזמן שצינור העברת נתונים פועל

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

java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)

כדי לפתור את הבעיה:

  • בודקים אם חסר כלל בחומת האש (בדרך כלל יציאה 22). כדי ליצור כלל חומת אש חדש, ראו הגדרת רשת של אשכול Managed Service for Apache Spark.
  • בודקים שהאכיפה של Compute Engine מאפשרת את החיבור בין מופע Cloud Data Fusion לבין אשכול Managed Service for Apache Spark.

קוד תגובה: 401. שגיאה: שגיאה לא ידועה

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

java.io.IOException: Failed to send message for program run program_run:
Response code: 401. Error: unknown error

כדי לפתור את הבעיה הזו, צריך להעניק את התפקיד Cloud Data Fusion Runner ‏ (roles/datafusion.runner) לחשבון השירות שבו נעשה שימוש ב-Managed Service for Apache Spark.

צינור עם פלאגין BigQuery נכשל עם השגיאה Access Denied

יש בעיה ידועה שבה צינור נתונים נכשל עם שגיאה Access Denied כשמריצים משימות של BigQuery. הבעיה הזו משפיעה על צינורות שמשתמשים בפלאגינים הבאים:

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

דוגמה לשגיאה ביומנים (יכול להיות שיהיו הבדלים בהתאם לפלאגין שבו אתם משתמשים):

POST https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Access Denied: Project xxxx: User does not have bigquery.jobs.create permission in project PROJECT_ID",
"reason" : "accessDenied"
} ],
"message" : "Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.",
"status" : "PERMISSION_DENIED"
}

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

  • הרצת משימה ב-BigQuery
  • קריאת מערך נתונים ב-BigQuery
  • יצירת קטגוריה זמנית
  • יצירת מערך נתונים ב-BigQuery
  • יצירת הטבלה ב-BigQuery

כדי לפתור את הבעיה, צריך להקצות לפרויקט (PROJECT_ID) שצוין בתוסף את התפקידים החסרים:

  • כדי להריץ משימה ב-BigQuery, צריך להעניק את התפקיד BigQuery Job User‏ (roles/bigquery.jobUser).

  • כדי לקרוא מערך נתונים ב-BigQuery, צריך להעניק את התפקיד BigQuery Data Viewer (צפייה בנתוני BigQuery) (roles/bigquery.dataViewer).

  • כדי ליצור קטגוריה זמנית, צריך להעניק את התפקיד 'אדמין לניהול אחסון' (roles/storage.admin).

  • כדי ליצור מערך נתונים או טבלה ב-BigQuery, צריך להעניק את התפקיד BigQuery Data Editor (roles/bigquery.dataEditor).

מידע נוסף זמין במאמר לפתרון בעיות שקשורות לתוסף (פתרון בעיות ב-Google BigQuery Multi Table Sink).

הצינור לא נעצר כשהוא מגיע לסף השגיאה

יכול להיות שצינור לא ייעצר אחרי כמה שגיאות, גם אם הגדרתם את סף השגיאות ל-1.

סף השגיאה מיועד לכל החריגים שמועלים מההנחיה במקרה של כשל שלא מטופל בדרך אחרת. אם ה-directive כבר משתמש ב-API של emitError, סף השגיאה לא מופעל.

כדי לתכנן צינור עיבוד נתונים שנכשל כשמושג סף מסוים, משתמשים בהנחיה FAIL.

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

מחיקת אשכול זמני של Managed Service for Apache Spark

כש-Cloud Data Fusion יוצר אשכול זמני של Managed Service for Apache Spark במהלך הקצאת משאבים להרצת צינור עיבוד נתונים, האשכול נמחק אחרי שהרצת צינור עיבוד הנתונים מסתיימת. במקרים נדירים, מחיקת האשכול נכשלת.

מומלץ מאוד: כדאי לשדרג לגרסה העדכנית ביותר של Cloud Data Fusion כדי להבטיח תחזוקה תקינה של האשכול.

הגדרת זמן מקסימלי של חוסר פעילות

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

Max Idle Time זמין ב-Cloud Data Fusion בגרסה 6.4 ואילך.

מומלץ: בגרסאות קודמות ל-6.6, צריך להגדיר את Max Idle Time באופן ידני ל-30 דקות או יותר.

מחיקת אשכולות באופן ידני

אם אתם לא יכולים לשדרג את הגרסה או להגדיר את האפשרות Max Idle Time, אתם יכולים למחוק ידנית את האשכולות הישנים:

  1. מקבלים את מזהה הפרויקט שבו נוצרו האשכולות:

    1. בארגומנטים של זמן הריצה של צינור הנתונים, בודקים אם מזהה הפרויקט של Managed Service for Apache Spark מותאם אישית להרצה.

      בודקים אם מזהה פרויקט Dataproc מותאם אישית להרצה

    2. אם לא מציינים מזהה פרויקט של Managed Service for Apache Spark באופן מפורש, המערכת קובעת באיזה מנהל הקצאות (provisioner) נעשה שימוש, ואז בודקת אם יש מזהה פרויקט:

      1. בארגומנטים של זמן הריצה של הפייפליין, בודקים את הערך system.profile.name.

        אחזור שם הספק בארגומנטים של זמן הריצה

      2. פותחים את הגדרות כלי ההקצאה ובודקים אם מוגדר מזהה פרויקט של Managed Service for Apache Spark. אם ההגדרה לא מופיעה או שהשדה ריק, המערכת משתמשת בפרויקט שבו מופעל מופע Cloud Data Fusion.

  2. לכל פרויקט:

    1. פותחים את הפרויקט במסוף Google Cloud ועוברים לדף Clusters של Managed Service for Apache Spark.

      מעבר אל Clusters

    2. מיון האשכולות לפי תאריך היצירה, מהישן לחדש.

    3. אם חלונית המידע מוסתרת, לוחצים על Show info panel ועוברים לכרטיסייה Labels.

    4. לכל אשכול שלא נמצא בשימוש – למשל, אם עבר יותר מיום – בודקים אם יש לו תווית גרסה של Cloud Data Fusion. זהו סימן לכך שהיא נוצרה על ידי Cloud Data Fusion.

    5. מסמנים את תיבת הסימון לצד שם האשכול ולוחצים על מחיקה.

צינורות (Pipelines) נכשלים כשהם מופעלים באשכולות של Managed Service for Apache Spark עם עובדים ראשיים או משניים

בגרסאות 6.8 ו-6.9 של Cloud Data Fusion, מתרחשת בעיה שגורמת לצינורות להיכשל אם הם פועלים באשכולות של Managed Service for Apache Spark:

ERROR [provisioning-task-2:i.c.c.i.p.t.ProvisioningTask@161] - PROVISION task failed in REQUESTING_CREATE state for program run program_run:default.APP_NAME.UUID.workflow.DataPipelineWorkflow.RUN_ID due to
Caused by: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
Caused by: com.google.protobuf.GeneratedMessageV3$Builder.parseUnknownField(Lcom/google/protobuf/CodedInputStream;Lcom/google/protobuf/ExtensionRegistryLite;I)Z.

כדי לפתור את הבעיה, צריך לשדרג לתיקון 6.8.3.1, 6.9.2.1 או לגרסה מאוחרת יותר.

התוסף Cloud Storage נכשל לסירוגין עם ביטוי רגולרי ב-Managed Service for Apache Spark 2.0

יכול להיות שצינורות עיבוד הנתונים ייכשלו לסירוגין ב-Cloud Data Fusion בגרסה 6.10.1, אם התוסף Cloud Storage משתמש בתבנית של *ביטוי רגולרי בנתיב וסביבת ההפעלה היא Managed Service for Apache Spark 2.0.

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

  • מעדכנים את קובץ האימג' של Managed Service for Apache Spark לגרסה 2.1 ואילך.
  • חזרה לגרסה קודמת של הפלאגין Cloud Storage.
  • הגדלת הזיכרון שהוקצה ל-executor של Managed Service for Apache Spark.

צינורות נכשלים עם NoSuchMethodError ב-Managed Service for Apache Spark 2.2

ב-Cloud Data Fusion מגרסה 6.10.1.1 ואילך, יכול להיות שצינורות עיבוד הנתונים ייכשלו עם השגיאה הבאה כשהם פועלים ב-Managed Service for Apache Spark 2.2:

java.lang.NoSuchMethodError: 'org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
org.apache.spark.sql.catalyst.encoders.RowEncoder.apply(org.apache.spark.sql.types.StructType)'

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

התוסף Multiple database tables (מספר טבלאות במסד נתונים) נכשל אם השם של קובץ העזר מכיל רווחים

ב-Cloud Data Fusion בגרסה 6.10.1 ואילך, צינורות עיבוד נתונים שמשתמשים במקור אצווה של כמה טבלאות במסד נתונים עלולים להיכשל אם השדה Reference Name מכיל תווי רווח.

כדי לפתור את הבעיה, צריך לעדכן את התוסף Multiple database tables (מספר טבלאות במסד נתונים) לגרסה 1.4.1 ואילך מ-Hub. בגרסה המעודכנת אי אפשר להשתמש ברווחים בשדה שם ההפניה.