מודל תכנות ל-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 מוגבל יש גודל קבוע וידוע, ואפשר לעבד אותו באמצעות צינור עיבוד באצווה. במקרים של 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) ועיבוד בסטרימינג

פייפליינים
צינור עיבוד נתונים כולל את כל סדרת החישובים שנדרשים לקריאת נתוני קלט, לשינוי הנתונים ולכתיבת נתוני פלט. מקור הקלט ויעד הפלט יכולים להיות מאותו סוג או מסוגים שונים, כך שאפשר להמיר נתונים מפורמט אחד לפורמט אחר. תוכניות 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 שנכתבו בשפות שונות.
משחק ריצה
רצים הם התוכנה שמקבלת צינור עיבוד נתונים ומבצעת אותו. רוב הרצים הם מתרגמים או מתאמים למערכות עיבוד ביג דאטה מקביליות באופן מסיבי. יש רכיבי Runner אחרים לבדיקה ולניפוי באגים מקומיים.
מקור
טרנספורמציה שקוראת ממערכת אחסון חיצונית. בדרך כלל, צינור נתונים קורא נתוני קלט ממקור. למקור יש סוג, שיכול להיות שונה מסוג היעד, כך שאפשר לשנות את פורמט הנתונים כשהם עוברים דרך צינור הנתונים.
כיור
טרנספורמציה שכותבת למערכת אחסון נתונים חיצונית, כמו קובץ או מסד נתונים.
TextIO
PTransform לקריאה וכתיבה של קובצי טקסט. מקור TextIO ויעד TextIO תומכים בקבצים דחוסים בפורמטים gzip ו-bzip2. מקור הקלט TextIO תומך ב-JSON. עם זאת, כדי ששירות Dataflow יוכל להקביל את הקלט והפלט, נתוני המקור צריכים להיות מופרדים באמצעות מעבר שורה. אפשר להשתמש בביטוי רגולרי כדי לטרגט קבצים ספציפיים באמצעות התג TextIO source. ‫Dataflow תומך בדפוסים כלליים של תווים כלליים לחיפוש. ביטוי ה-glob יכול להופיע בכל מקום בנתיב. עם זאת, Dataflow לא תומך בתווים כלליים רקורסיביים (**).

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

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

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

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