שימוש ב-Dataflow Portable Runner

כשמשתמשים ב-Dataflow כדי להריץ את צינור עיבוד הנתונים, רכיב ההרצה של Dataflow מעלה את קוד צינור עיבוד הנתונים ואת התלות שלו לדלי ב-Cloud Storage ויוצר משימת Dataflow. הפעלתם את עבודת ה-Dataflow הזו בפייפליין במשאבים מנוהלים ב-Google Cloud.

  • בצינורות (pipelines) של עיבוד אצווה שמשתמשים ב-Apache Beam Java SDK בגרסה 2.54.0 ואילך, Portable Runner מופעל כברירת מחדל.
  • בצינורות שמשתמשים ב-Apache Beam Java SDK, חובה להשתמש ב-Portable Runner כשמריצים צינורות רב-לשוניים, כשמשתמשים במאגרי מידע מותאמים אישית או כשמשתמשים בצינורות של Spanner או Bigtable לשינוי נתונים. לצינורות עיבוד נתונים של סטרימינג ב-Java בהיקף גדול, משתמשים ב-Runner של סטרימינג ב-Java (ברירת מחדל).
  • בצינורות שמשתמשים בגרסאות 2.21.0 ואילך של Apache Beam Python SDK, ‏ Portable Runner מופעל כברירת מחדל. בצינורות (pipelines) שמשתמשים ב-Apache Beam Python SDK בגרסה 2.45.0 ואילך, Dataflow Portable Runner הוא ה-Runner היחיד של Dataflow שזמין.
  • ב-Apache Beam SDK for Go, ‏ Portable Runner הוא ה-Dataflow runner היחיד שזמין.

‫Portable Runner מבוסס על ארכיטקטורה של שירותים, שמועילה לצינורות רבים:

מגבלות

הדרישות והמגבלות של Dataflow Portable Runner:

  • תכונות שזמינות רק בגרסה הניידת: התכונות הבאות נתמכות רק ב-Portable Runner:
    • Managed transforms ו-RunInference ב-Java.
    • מאגרי תגים מותאמים אישית.
    • מכונות וירטואליות של עובדים שמבוססות על ARM.
    • ‫DoFn שניתן לפיצול. אנחנו בודקים אפשרות לתמיכה ב-runner שאי אפשר להעביר.
  • כדי להריץ משימות סטרימינג, צריך להשתמש ב-Streaming Engine ב-Dataflow Portable Runner.
  • מכיוון שה-Dataflow Portable Runner דורש את Streaming Engine למשימות סטרימינג, כל טרנספורמציה של Apache Beam שדורשת את ה-Dataflow Portable Runner דורשת גם שימוש ב-Streaming Engine למשימות סטרימינג. לדוגמה, מחבר הקלט/פלט של Pub/Sub Lite ל-Apache Beam SDK ל-Python הוא טרנספורמציה חוצת-שפות שדורשת את Dataflow Portable Runner. אם מנסים להשבית את Streaming Engine עבור משימה או תבנית שמשתמשות בטרנספורמציה הזו, המשימה נכשלת.
  • בצינורות סטרימינג שמשתמשים ב-Apache Beam Java SDK, המחלקות MapState ו-SetState לא נתמכות ב-Portable Runner. כדי להשתמש במחלקות MapState ו-SetState בצינורות Java, צריך להפעיל את Streaming Engine, להשבית את Portable Runner ולהשתמש ב-Apache Beam SDK בגרסה 2.58.0 ואילך.
  • בצינורות עיבוד ברצף (batch processing) ובצינורות סטרימינג שמשתמשים ב-Apache Beam Java SDK, אין תמיכה במחלקה AfterSynchronizedProcessingTime.
  • במקרים רבים, ה-Runner הנייד מספק יכולת הרחבה טובה יותר מה-Runner הלא נייד, אבל השימוש בזיכרון עשוי להיות גבוה יותר עבור חלוקה קבועה.
  • אי אפשר להפעיל תבניות קלאסיות של Dataflow עם גרסה אחרת של Dataflow runner מזו שהן נבנו איתה. המשמעות היא שלא ניתן להפעיל את Portable Runner באמצעות תבניות קלאסיות שסופקו על ידי Google. כדי להפעיל את Portable Runner בתבניות בהתאמה אישית, צריך להגדיר את הדגל המתאים כשיוצרים את התבנית. הסימון הבוליאני הזה תלוי בגרסת ה-SDK שבה אתם משתמשים:
    • גרסאות Beam SDK‏ 2.74 ואילך: --experiments=enable_portable_runner.
    • גרסאות SDK של Beam‏ 2.73 ואילך: --experiments=use_runner_v2.
  • בגלל בעיה מוכרת בהתאמת קנה מידה אוטומטית, ה-Portable Runner מושבת כברירת מחדל עבור צינורות Java לעיבוד אצווה שנדרש בהם עיבוד עם שמירת מצב. עדיין אפשר להפעיל את Portable Runner לצינורות האלה (ראו הפעלת Portable Runner), אבל יכול להיות שיהיו צווארי בקבוק חמורים בביצועים של צינורות עיבוד הנתונים.

  • בצינורות מסוימים, Portable Runner יכול להגדיל את התדירות של כשלים בעקביות. יכול להיות שהשגיאה הבאה תופיע בקובצי היומן: 'בדיקת העקביות הפנימית נכשלה, סביר להניח שהפלט שגוי. צריך לנסות שוב לשלוח את העבודה". פתרון אפשרי הוא להוסיף טרנספורמציה Reshuffle אחרי השלב Join/GrouByKey. אם שיעור הכשלים לא נסבל והפתרון לא פותר את הבעיה, אפשר לנסות להשבית את Portable Runner.

הפעלת Portable Runner

כדי להפעיל את Dataflow Portable Runner, פועלים לפי הוראות ההגדרה של Apache Beam SDK.

Java

כדי להשתמש ב-Dataflow Portable Runner, צריך להשתמש ב-Apache Beam Java SDK בגרסה 2.30.0 ואילך. מומלץ להשתמש בגרסה 2.44.0 ואילך.

בצינורות (pipelines) של עיבוד אצווה שמשתמשים ב-Apache Beam Java SDK בגרסה 2.54.0 ואילך, Portable Runner מופעל כברירת מחדל.

כדי להפעיל את Portable Runner, מריצים את העבודה עם ערך הניסוי שמתאים לגרסת Beam SDK ולסוג הצינור:

  • גרסאות Beam SDK‏ 2.74 ואילך: enable_portable_runner (batch) או enable_portable_runner (streaming).enable_streaming_java_runner
  • גרסאות SDK של Beam‏ 2.73 ואילך: use_runner_v2.

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

Python

בצינורות שמשתמשים בגרסאות 2.21.0 ואילך של Apache Beam Python SDK, ‏ Portable Runner מופעל כברירת מחדל.

‫Dataflow Portable Runner לא נתמך בגרסאות 2.20.0 ומטה של Apache Beam Python SDK.

במקרים מסוימים, יכול להיות שצינור הנתונים לא ישתמש ב-Portable Runner גם אם הוא פועל בגרסת SDK נתמכת. כדי להריץ את העבודה באמצעות Portable Runner, מגדירים את ערך הניסוי שמתאים לגרסת Beam SDK:

  • גרסאות Beam SDK‏ 2.74 ואילך: enable_portable_runner.
  • גרסאות SDK של Beam‏ 2.73 ואילך: use_runner_v2.

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

המשך

‫Dataflow Portable Runner הוא ה-Runner היחיד של Dataflow שזמין ל-Apache Beam SDK for Go. הוא מופעל כברירת מחדל.

השבתת ה-Portable Runner

כדי להשבית את Dataflow Portable Runner, פועלים לפי הוראות ההגדרה של Apache Beam SDK.

Java

כדי להשבית את Portable Runner, צריך להגדיר את ערך הניסוי שמתאים לגרסת Beam SDK:

  • גרסאות Beam SDK‏ 2.74 ואילך: disable_portable_runner.
  • גרסאות SDK של Beam‏ 2.73 ואילך: disable_runner_v2.

ברירת המחדל של המשימה תהיה Non-Portable Runner (Streaming Java Runner for streaming). מידע נוסף מופיע במאמר בנושא הגדרה של אפשרויות ניסיוניות של צינורות.

Python

השבתה של Portable Runner לא נתמכת בגרסאות 2.45.0 ואילך של Apache Beam Python SDK.

בגרסאות קודמות של Python SDK, אם העבודה שלכם מזוהה כשימוש בניסוי auto_runner_v2, אתם יכולים להשבית את Portable Runner על ידי הגדרת הניסוי disable_runner_v2. מידע נוסף מופיע במאמר בנושא הגדרה של אפשרויות ניסיוניות של צינורות.

המשך

אי אפשר להשבית את Portable Runner ב-Go. ‏ Portable Runner הוא ה-Runner היחיד של Dataflow שזמין ל-Apache Beam SDK ל-Go.

מעקב אחרי העבודה

אפשר להשתמש בממשק המעקב כדי לראות מדדים של משימות Dataflow, כמו ניצול הזיכרון, ניצול ה-CPU ועוד.

יומני מכונות וירטואליות של Worker זמינים דרך הכלי לבדיקת יומנים וממשק המעקב של Dataflow. יומני מכונות וירטואליות של Worker כוללים יומנים מתהליך ה-runner harness ויומנים מתהליכי ה-SDK. אפשר להשתמש ביומני הרישום של ה-VM כדי לפתור בעיות בעבודה.

פתרון בעיות ב-Portable Runner

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

  • עבודות שמשתמשות ב-Dataflow Portable Runner מריצות שני סוגים של תהליכים במכונה הווירטואלית של העובד: תהליך SDK ותהליך runner harness. יכולים להיות תהליכי SDK אחד או יותר, בהתאם לצינור ולסוג המכונה הווירטואלית, אבל יש רק תהליך אחד של runner harness לכל מכונה וירטואלית.
  • תהליכי SDK מריצים קוד משתמש ופונקציות אחרות שספציפיות לשפה. התהליך של רתמת ההרצה מנהל את כל השאר.
  • תהליך ה-runner harness ממתין שכל תהליכי ה-SDK יתחברו אליו לפני שהוא מתחיל לבקש עבודה מ-Dataflow.
  • יכול להיות שיהיו עיכובים במשימות אם המכונה הווירטואלית של העובד מורידה ומתקינה תלויות במהלך הפעלת תהליך ה-SDK. אם מתרחשות בעיות במהלך תהליך SDK, למשל כשמפעילים או מתקינים ספריות, העובד מדווח על הסטטוס שלו כ'לא תקין'. אם זמני ההפעלה מתארכים, מפעילים את Cloud Build API בפרויקט ושולחים את צינור הנתונים עם הפרמטר הבא: --prebuild_sdk_container_engine=cloud_build.
  • מכיוון ש-Dataflow Portable Runner משתמש בנקודות ביקורת, כל עובד עשוי להמתין עד חמש שניות בזמן שהוא שומר שינויים במאגר זמני לפני שהוא שולח את השינויים לעיבוד נוסף. כתוצאה מכך, צפויים עיכובים של כ-6 שניות.
  • כדי לאבחן בעיות בקוד המשתמש, בודקים את יומני ה-worker מתהליכי ה-SDK. אם מצאתם שגיאות ביומני של כלי ההרצה, אתם יכולים לפנות לתמיכה כדי לדווח על באג.
  • כדי לנפות באגים בשגיאות נפוצות שקשורות לצינורות עיבוד נתונים של Dataflow בכמה שפות, אפשר לעיין במדריך טיפים לצינורות עיבוד נתונים בכמה שפות.