כשמשתמשים ב-Dataflow כדי להריץ את צינור עיבוד הנתונים, רכיב ההרצה של Dataflow מעלה את קוד צינור עיבוד הנתונים ואת התלות שלו לקטגוריה של Cloud Storage ויוצר משימת Dataflow. העבודה הזו של Dataflow מריצה את צינור העיבוד על משאבים מנוהלים ב-Google Cloud Platform.
- בצינורות (pipelines) של עיבוד אצווה שמשתמשים בגרסאות 2.54.0 ואילך של Apache Beam Java SDK, Runner v2 מופעל כברירת מחדל.
- בצינורות נתונים שמשתמשים ב-Apache Beam Java SDK, נדרש Runner v2 כשמריצים צינורות נתונים מרובי-שפות, כשמשתמשים במאגרי מידע מותאמים אישית או כשמשתמשים בצינורות נתונים של Spanner או Bigtable לשינוי הזרם. במקרים אחרים, משתמשים ב-runner שמוגדר כברירת מחדל.
- בצינורות שמשתמשים בגרסאות 2.21.0 ואילך של Apache Beam Python SDK, Runner v2 מופעל כברירת מחדל. בצינורות שמשתמשים בגרסאות 2.45.0 ואילך של Apache Beam Python SDK, Dataflow Runner v2 הוא ה-Dataflow Runner היחיד שזמין.
- ב-Apache Beam SDK for Go, Dataflow Runner v2 הוא ה-Dataflow runner היחיד שזמין.
ב-Runner v2 נעשה שימוש בארכיטקטורה מבוססת-שירותים שמועילה לצינורות עיבוד נתונים רבים:
Dataflow Runner v2 מאפשר ליצור מראש את קובץ ה-Python container, מה שיכול לשפר את זמני ההפעלה של מכונות וירטואליות ואת הביצועים של Horizontal Autoscaling. מידע נוסף זמין במאמר בנושא יחסי תלות ב-Python לפני ה-build.
Dataflow Runner v2 תומך בצינורות עיבוד נתונים רב-לשוניים, תכונה שמאפשרת לצינור עיבוד הנתונים של Apache Beam להשתמש בטרנספורמציות שהוגדרו בערכות SDK אחרות של Apache Beam. Dataflow Runner v2 תומך בשימוש בטרנספורמציות של Java מצינור עיבוד נתונים של Python SDK ובשימוש בטרנספורמציות של Python מצינור עיבוד נתונים של Java SDK. כשמריצים צינורות נתונים של Apache Beam בלי Runner v2, רכיב ה-Runner של Dataflow משתמש בעובדים ספציפיים לשפה.
מגבלות
אלו הדרישות והמגבלות של Dataflow Runner v2:
- Dataflow Runner v2 דורש Streaming Engine לעבודות סטרימינג.
- מכיוון ש-Dataflow Runner v2 דורש את מנוע הסטרימינג לעבודות סטרימינג, כל טרנספורמציה של Apache Beam שדורשת את Dataflow Runner v2 דורשת גם שימוש במנוע הסטרימינג לעבודות סטרימינג. לדוגמה, מחבר הקלט/פלט של Pub/Sub Lite ל-Apache Beam SDK ל-Python הוא טרנספורמציה חוצת-שפות שדורשת Dataflow Runner v2. אם תנסו להשבית את Streaming Engine עבור משימה או תבנית שמשתמשות בטרנספורמציה הזו, המשימה תיכשל.
- בצינורות סטרימינג שמשתמשים ב-Apache Beam Java SDK, המחלקות
MapStateו-SetStateלא נתמכות ב-Runner v2. כדי להשתמש במחלקותMapStateו-SetStateבצינורות Java, צריך להפעיל את Streaming Engine, להשבית את Runner v2 ולהשתמש ב-Apache Beam SDK בגרסה 2.58.0 ואילך. - בצינורות לעיבוד ברצף (batch processing) ולסטרימינג שמשתמשים ב-Apache Beam Java SDK, אין תמיכה במחלקה
AfterSynchronizedProcessingTime. - במקרים רבים, גרסה 2 של Runner מתאימה יותר לשינוי גודל מאשר גרסה 1, אבל השימוש בזיכרון עשוי להיות גבוה יותר בפיצול קבוע.
- אי אפשר להפעיל תבניות קלאסיות של Dataflow עם גרסה אחרת של Dataflow runner מזו שהן נבנו איתה. המשמעות היא שלא ניתן להפעיל את Runner v2 באמצעות תבניות קלאסיות שסופקו על ידי Google. כדי להפעיל את Runner v2 בתבניות מותאמות אישית, צריך להגדיר את הדגל
--experiments=use_runner_v2כשיוצרים את התבנית. בגלל בעיה מוכרת של התאמה אוטומטית לעומס, Runner v2 מושבת כברירת מחדל עבור צינורות Java לעיבוד באצווה שנדרש בהם עיבוד עם שמירת מצב. עדיין אפשר להפעיל את Runner v2 עבור צינורות כאלה (ראו הפעלה של Runner v2), אבל יכול להיות שביצועי צינורות כאלה יהיו מוגבלים מאוד.
בצינורות מסוימים, Runner v2 יכול להגדיל את התדירות של כשלים בעקביות. יכול להיות שהשגיאה הבאה תופיע בקובצי היומן: 'בדיקת העקביות הפנימית נכשלה, סביר להניח שהפלט שגוי. צריך לנסות שוב להריץ את העבודה". אפשר להוסיף טרנספורמציה אחרי השלב /.
ReshuffleJoinGrouByKeyאם שיעור הכשלים לא נסבל והפתרון לא פותר את הבעיה, אפשר לנסות להשבית את Runner v2.
הפעלת Runner v2
כדי להפעיל את Dataflow Runner v2, פועלים לפי הוראות ההגדרה של Apache Beam SDK.
Java
Dataflow Runner v2 דורש את Apache Beam Java SDK בגרסאות 2.30.0 ואילך, ומומלץ להשתמש בגרסה 2.44.0 ואילך.
בצינורות (pipelines) של עיבוד אצווה שמשתמשים בגרסאות 2.54.0 ואילך של Apache Beam Java SDK, Runner v2 מופעל כברירת מחדל.
כדי להפעיל את Runner v2, מריצים את העבודה עם האפשרות use_runner_v2 experiment. למידע נוסף, ראו הגדרת אפשרויות ניסיוניות של צינורות עיבוד נתונים.
Python
בצינורות שמשתמשים בגרסאות 2.21.0 ואילך של Apache Beam Python SDK, Runner v2 מופעל כברירת מחדל.
Dataflow Runner v2 לא נתמך בגרסאות 2.20.0 ומטה של Apache Beam Python SDK.
במקרים מסוימים, יכול להיות שצינור הנתונים לא ישתמש ב-Runner v2 גם אם הוא פועל בגרסת SDK נתמכת. כדי להריץ את העבודה עם Runner v2,
מגדירים את use_runner_v2 experiment. מידע נוסף מופיע במאמר בנושא הגדרת אפשרויות של צינורות ניסיוניים.
Go
Dataflow Runner v2 הוא ה-Dataflow runner היחיד שזמין ל-Apache Beam SDK for Go. Runner v2 מופעל כברירת מחדל.
השבתה של Runner v2
כדי להשבית את Dataflow Runner v2, פועלים לפי הוראות ההגדרה של Apache Beam SDK.
Java
כדי להשבית את Runner v2, מגדירים את הניסוי disable_runner_v2. מידע נוסף מופיע במאמר הגדרת אפשרויות של צינורות ניסויים.
Python
אין תמיכה בהשבתה של Runner v2 בגרסאות 2.45.0 ואילך של Apache Beam Python SDK.
בגרסאות קודמות של Python SDK, אם העבודה שלכם מזוהה כשימוש בניסוי auto_runner_v2, אתם יכולים להשבית את Runner v2 על ידי הגדרת הניסוי disable_runner_v2. מידע נוסף מופיע במאמר בנושא הגדרת אפשרויות של צינורות ניסיוניים.
Go
אי אפשר להשבית את Dataflow Runner v2 ב-Go. Runner v2 הוא ה-Dataflow runner היחיד שזמין ל-Apache Beam SDK ל-Go.
מעקב אחרי העבודה
אפשר להשתמש בממשק המעקב כדי לראות מדדים של משימות Dataflow, כמו ניצול הזיכרון, ניצול ה-CPU ועוד.
יומני ה-worker VM זמינים דרך Logs Explorer וממשק המעקב של Dataflow. יומני מכונות וירטואליות של Worker כוללים יומנים מתהליך runner harness ויומנים מתהליכי ה-SDK. אפשר להשתמש ביומני הרישום של ה-VM כדי לפתור בעיות בעבודה.
פתרון בעיות ב-Runner v2
כדי לפתור בעיות בעבודות באמצעות Dataflow Runner v2, צריך לפעול לפי השלבים הרגילים לפתרון בעיות בצינורות עיבוד נתונים. ברשימה הבאה מפורט מידע נוסף על אופן הפעולה של Dataflow Runner v2:
- במשימות של Dataflow Runner v2 מופעלים שני סוגים של תהליכים במכונת העובד הווירטואלית: תהליך SDK ותהליך runner harness. יכול להיות שיהיו תהליכי SDK אחד או יותר, בהתאם לצינור ולסוג המכונה הווירטואלית, אבל יהיה רק תהליך אחד של runner harness לכל מכונה וירטואלית.
- תהליכי ה-SDK מריצים קוד משתמש ופונקציות אחרות שספציפיות לשפה. התהליך של רתמת ה-Runner מנהל את כל השאר.
- תהליך runner harness ממתין שכל תהליכי ה-SDK יתחברו אליו לפני שהוא מתחיל לבקש עבודה מ-Dataflow.
- יכול להיות שיהיו עיכובים במשימות אם ה-worker VM מוריד ומתקין תלות במהלך הפעלת תהליך ה-SDK. אם מתרחשות בעיות במהלך תהליך SDK, למשל בהפעלה או בהתקנה של ספריות, העובד מדווח על הסטטוס שלו כ'לא תקין'. אם זמני ההפעלה מתארכים, מפעילים את Cloud Build API בפרויקט ושולחים את צינור עיבוד הנתונים עם הפרמטר הבא:
--prebuild_sdk_container_engine=cloud_build. - מכיוון ש-Dataflow Runner v2 משתמש בנקודות ביקורת, כל עובד עשוי להמתין עד חמש שניות בזמן שהוא מאחסן שינויים במאגר זמני לפני שהוא שולח את השינויים לעיבוד נוסף. כתוצאה מכך, צפויים עיכובים של כ-6 שניות.
- כדי לאבחן בעיות בקוד המשתמש, בודקים את יומני העובדים מתהליכי ה-SDK. אם מצאתם שגיאות ביומני של כלי ההרצה, אתם יכולים לפנות לתמיכה כדי לדווח על באג.
- כדי לנפות באגים בשגיאות נפוצות שקשורות לצינורות עיבוד נתונים של Dataflow בכמה שפות, אפשר לעיין במדריך טיפים לצינורות עיבוד נתונים בכמה שפות.