מודל תכנות ל-Apache Beam

‫Dataflow מבוסס על פרויקט הקוד הפתוח Apache Beam. במסמך הזה מתואר מודל התכנות של Apache Beam. הוא כולל סקירה כללית של הארכיטקטורה שלו ומשמש כמדריך למושגי הליבה שלו.

סקירה כללית של עיבוד נתונים ב-Apache Beam

בקטע הזה מוסבר על ארכיטקטורת Apache Beam, ומתואר איך הרכיבים שלה פועלים יחד כדי לעבד נתונים בצורה יעילה. ‫Apache Beam הוא מודל קוד פתוח מאוחד להגדרת צינורות (pipelines) של נתונים באצווה ונתוני סטרימינג. מודל התכנות של Apache Beam מפשט את המכניקה של עיבוד נתונים בקנה מידה גדול. באמצעות אחד מ-SDKs של Apache Beam, יוצרים תוכנית שמגדירה את צינור עיבוד הנתונים. לאחר מכן מריצים את צינור הנתונים בפלטפורמה ספציפית כמו Dataflow. המודל הזה מאפשר לכם להתרכז בהרכב הלוגי של משימת עיבוד הנתונים, במקום לנהל את התיאום של עיבוד מקביל.

‫Apache Beam מבודד אתכם מפרטים ברמה נמוכה של עיבוד מבוזר, כמו תיאום בין עובדים פרטניים, חלוקת מערכי נתונים למקטעים ומשימות דומות אחרות. ‫Dataflow מנהל את הפרטים האלה ברמה הנמוכה באופן מלא.

צינור הוא תרשים של טרנספורמציות שמוחלות על אוספים של נתונים. ב-Apache Beam, אוסף נקרא PCollection, וטרנספורמציה נקראת PTransform. PCollection יכול להיות מוגבל או לא מוגבל. ל-PCollection מוגבל יש גודל קבוע וידוע, ואפשר לעבד אותו באמצעות צינור (pipeline) של אצווה. במקרים של PCollections ללא גבולות, חובה להשתמש בצינור עיבוד נתונים בסטרימינג, כי הנתונים מעובדים כשהם מגיעים.

‫Apache Beam מספק מחברים לקריאה ממערכות שונות ולכתיבה למערכות שונות, כולל שירותים וטכנולוגיות של צד שלישי כמו Apache Kafka. Google Cloud

בתרשים הבא מוצג צינור עיבוד נתונים של Apache Beam.

פייפליין של Apache Beam.

אפשר לכתוב PTransforms שמבצעים לוגיקה שרירותית. ערכות ה-SDK של Apache Beam מספקות גם ספרייה של PTransforms שימושיות מוכנות לשימוש, כולל:

  • סינון של כל האלמנטים שלא עומדים בתנאי.
  • החלת פונקציית מיפוי של 1 ל-1 על כל רכיב.
  • קיבוץ אלמנטים לפי מפתח.
  • ספירת הרכיבים באוסף.
  • ספירה של הרכיבים שמשויכים לכל מפתח באוסף של צמדי מפתח/ערך.

כדי להריץ פייפליין של Apache Beam באמצעות Dataflow, מבצעים את השלבים הבאים:

  1. משתמשים ב-Apache Beam SDK כדי להגדיר ולבנות את צינור עיבוד הנתונים. לחלופין, אפשר לפרוס צינור מוכן מראש באמצעות תבנית Dataflow.
  2. משתמשים ב-Dataflow כדי להריץ את צינור עיבוד הנתונים. ‫Dataflow מקצה מאגר של מכונות וירטואליות להרצת העבודה, פורס את הקוד במכונות הווירטואליות ומנהל את הרצת העבודה.
  3. מערכת Dataflow מבצעת אופטימיזציות בבק-אנד כדי שהצינור יפעל ביעילות וינצל את היתרונות של ההרצה המקבילה.
  4. במהלך הרצת העבודה ואחריה, אפשר להשתמש ביכולות הניהול של Dataflow כדי לעקוב אחרי ההתקדמות ולפתור בעיות.

מושגים בתכנות Apache Beam

בקטע הזה יש סיכומים של מושגים בסיסיים.

מושגים בסיסיים בנושא עיבוד ברצף (batch processing) ועיבוד נתונים בזמן אמת (streaming)

פייפליינים
צינור (pipeline) כולל את כל סדרת החישובים שקשורים לקריאת נתוני קלט, לשינוי הנתונים ולכתיבת נתוני פלט. מקור הקלט ויעד הפלט יכולים להיות מאותו סוג או מסוגים שונים, וכך תוכלו להמיר נתונים מפורמט אחד לפורמט אחר. תוכניות Apache Beam מתחילות ביצירת אובייקט Pipeline, ואז משתמשות באובייקט הזה כבסיס ליצירת מערכי הנתונים של צינור עיבוד הנתונים. כל צינור מייצג משימה יחידה שניתן לחזור עליה.
מערך נתונים מורכב (PCollection)
A PCollection מייצג מערך נתונים רב-אלמנטי שאולי מפוזר, שמשמש כנתונים של צינור עיבוד הנתונים. טרנספורמציות של Apache Beam משתמשות באובייקטים של PCollection כקלט ופלט לכל שלב בצינור. PCollection יכול להכיל מערך נתונים בגודל קבוע או מערך נתונים בלתי מוגבל ממקור נתונים שמתעדכן באופן רציף.
טרנספורמציות
Transform מייצג פעולת עיבוד שמשנה את הנתונים. טרנספורמציה מקבלת כקלט PCollection אחד או יותר, מבצעת פעולה שאתם מציינים על כל רכיב באוסף הזה ומפיקה כפלט PCollection אחד או יותר. פעולת טרנספורמציה יכולה לבצע כמעט כל סוג של פעולת עיבוד, כולל ביצוע חישובים מתמטיים על נתונים, המרת נתונים מפורמט אחד לפורמט אחר, קיבוץ נתונים, קריאה וכתיבה של נתונים, סינון נתונים כדי להפיק רק את הרכיבים הרצויים או שילוב של רכיבי נתונים לערכים יחידים.
ParDo
ParDo היא פעולת הליבה של עיבוד מקביל ב-SDK של Apache Beam, שמפעילה פונקציה שצוינה על ידי המשתמש בכל אחד מהרכיבים של הקלט PCollection. ‫ParDo אוסף את אפס או יותר רכיבי הפלט לתוך פלט PCollection. הטרנספורמציה ParDo מעבדת את האלמנטים באופן עצמאי, ואולי במקביל. הפונקציה בהגדרת המשתמש של ParDo נקראת DoFn.
קלט/פלט של צינור עיבוד נתונים
מחברי קלט/פלט של Apache Beam מאפשרים לקרוא נתונים לצינור עיבוד הנתונים ולכתוב נתוני פלט מצינור עיבוד הנתונים. מחבר קלט/פלט מורכב ממקור וממטרה. כל המקורות והיעדים של Apache Beam הם טרנספורמציות שמאפשרות לצינור הנתונים לעבוד עם נתונים מכמה פורמטים שונים של אחסון נתונים. אפשר גם לכתוב מחבר קלט/פלט בהתאמה אישית.
צבירה
צבירה היא תהליך של חישוב ערך מסוים מכמה רכיבי קלט. התבנית החישובית העיקרית לצבירה ב-Apache Beam היא קיבוץ של כל הרכיבים עם מפתח משותף וחלון משותף. לאחר מכן, המערכת משלבת כל קבוצת רכיבים באמצעות פעולה אסוציאטיבית וקומוטטיבית.
פונקציות בהגדרת המשתמש (UDF)
חלק מהפעולות ב-Apache Beam מאפשרות להריץ קוד בהגדרת המשתמש כדי להגדיר את הטרנספורמציה. במקרה של ParDo, קוד שהוגדר על ידי המשתמש מציין את הפעולה שצריך להחיל על כל רכיב, ובמקרה של Combine, הוא מציין איך לשלב את הערכים. יכול להיות שצינור יכיל פונקציות UDF שנכתבו בשפה שונה מהשפה של הרצת הצינור. צינור יכול להכיל גם פונקציות UDF שנכתבו בכמה שפות.
רץ
רצים הם התוכנה שמקבלת צינור עיבוד נתונים ומבצעת אותו. רוב הרצים הם מתרגמים או מתאמים למערכות עיבוד ביג דאטה מקביליות באופן מסיבי. יש רצים אחרים לבדיקה ולניפוי באגים מקומיים.
מקור
טרנספורמציה שקוראת ממערכת אחסון חיצונית. בדרך כלל, צינור מעביר נתוני קלט ממקור. למקור יש סוג, שיכול להיות שונה מסוג היעד, כך שאפשר לשנות את פורמט הנתונים כשהם עוברים דרך צינור הנתונים.
כיור
טרנספורמציה שכותבת למערכת אחסון נתונים חיצונית, כמו קובץ או מסד נתונים.
TextIO
PTransform לקריאה ולכתיבה של קובצי טקסט. מקור TextIO ויעד TextIO תומכים בקבצים דחוסים בפורמטים gzip ו-bzip2. מקור הקלט TextIO תומך ב-JSON. עם זאת, כדי ששירות Dataflow יוכל להקביל את הקלט והפלט, נתוני המקור צריכים להיות מופרדים באמצעות הזנת שורה. אפשר להשתמש בביטוי רגולרי כדי לטרגט קבצים ספציפיים באמצעות מקור TextIO. ‫Dataflow תומך בדפוסים כלליים של תווים כלליים לחיפוש. ביטוי ה-glob יכול להופיע בכל מקום בנתיב. עם זאת, Dataflow לא תומך בתווים כלליים רקורסיביים (**).

מושגים מתקדמים בנושא עיבוד ברצף (batch processing) ועיבוד בסטרימינג

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

המאמרים הבאים

Apache Beam®‎ הוא סימן מסחרי רשום של The Apache Software Foundation או של השותפים העצמאיים שלה בארצות הברית או במדינות אחרות.