הזמן קצר והדאטה מרובה: מה עושים כשצריך לנתח מסה של נתונים במהירות?

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

בדרך המקבילית והמבוזרת ניתן לחשב הרים של מידע באופן יחסית מהיר (צילום: Pexels)

מאת בן אמיר, Technical Lead בחברת Riskified

במהלך העבודה היומיומית של מפתחים ואנשי דאטה סיינס, אנחנו נדרשים לא פעם להריץ סדרה של פקודות או פעולות ארוכות שיבצעו עבודת חישוב מסובכת למספר נושאים. חישוב עיבוד תמונה מורכב, עדכון נתונים ב-Database, העתקה או העברה של מידע ממקום למקום (ETL) – כל אלה הן פעולות הדורשות בדרך כלל כוח עיבוד רב (זיכרון או CPU) וזמן רב (לעתים כמה שעות טובות).

הנה דוגמה להמחשה: עלינו לבחון את מספר מקרי הקורונה בעולם (כי פשוט לא שמענו על זה מספיק בשנה האחרונה), ולצורך כך נרצה לחשב את מספר מקרי ההדבקה לעומת מספר המחלימים בכל עיר ומדינה. נניח שהדאטה ב-Database שלנו מורכב ממספר שדות (עמודות) כגון שם החולה, מדינה, היכן נדבק, אזור מגורים, שעה, תאריך וגיל.

אם נניח שהדאטה נמצא ב-Database רלציוני, הרי שניתן לפתור זאת בשליפת SQL פשוטה יחסית:

SELECT city, country,  COUNT(*), SUM(is_recovered::INT)
FROM my_covid19-table
GROUP BY city, county;

פעולת שליפה כזו תימשך זמן קצר וכנראה תסתיים לאחר מספר שניות, אך בדרך כלל מבנה הדאטה שלנו לא כזה פשוט. מה אם נרצה לעשות פעולות מורכבות יותר כמו לקרוא ממספר טבלאות שונות ולאחד את המידע ביניהן (נגיד, לקרוא את כל המקרים והמיקומים של ערים אדומות בעולם)? לחלופין, מה אם נרצה לבצע מניפולציה על המידע (לדוגמה, אגריגציה על כמות ההדבקות עבור כל עיר אדומה בכל מדינה) ולבסוף לשמור את המידע הזה ב-Database או בקבצים?

כאן באה לידי ביטוי עבודת ה-Batch. אנו נשתמש ב-Batch Processing כשנרצה לעשות פעולה על הרבה מאוד מידע בו זמנית, אך הפעולה לוקחת זמן (תלוי במורכבות וכמות הדאטה), עלולה להיכשל או צורכת המון משאבים וכסף. הפתרון הזה מתאים כאשר מדובר בפעולה חד פעמית או כשהיא נעשית אחת לפרק זמן ארוך, אבל מה אם נרצה לחשב את המידע הזה באופן יום יומי, או אפילו שעתי?

תכירו: הדרך המקבילית והמבוזרת

כמויות הדאטה בעולם גדלות ואיתן הצורך לעבד אותו, וישנם מספר פתרונות ודרכים לעשות זאת, אך אנו נתמקד בדרך המקבילית והמבוזרת (Parallel and Distributed), שבאמצעותה ניתן לחשב הררים של מידע באופן יחסית מהיר.

עיבוד מקבילי מאפשר לנו להריץ בו זמנית מספר תהליכים (processes) שיבצעו עבודת חישוב כלשהי, כאשר הרעיון הוא לקחת משימה אחת גדולה ולפרק אותה לתתי משימות קטנות שניתן יהיה להריץ במקביל. בשביל להבין איך עיבוד מקבילי עובד נחזור לדוגמת הקורונה שלנו, אך הפעם נניח שהדאטה שלנו נמצא במסמכים וכל מסמך מתאר את הפרטים הרפואיים של החולה. אנחנו רוצים לספור את כמות המקרים בכל עיר ומדינה בכל יום, ומכיוון שפעולה זו יכולה להיות ארוכה מאוד נוכל להשתמש בעקרונות העיבוד המקבילי: נשתמש בכמה “סורקים” שכל אחד מהם יסרוק ויספור את כמות המקרים עבור מדינה ספציפית.

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

יתרונות עקרון ה-MapReduce

בבעיה שהצגתי קודם, ובעוד בעיות שונות שניתן למקבל, ניתן להשתמש בעקרון יעיל הנקרא MapReduce. הרעיון הכללי מתאר חלוקה שווה של משימות בין יחידות העיבוד, כך שכל יחידת עיבוד (שיכולה להיות process בשרת או במספר שרתים שונים) מבצעת עבודה קטנה יותר (פעולת ה-Map), משתפת את שאר היחידות בתוצאה שהיא קיבלה ומבצעת סכימה של הכל (Reduce).

עקרון זה מאפשר לנו לבצע פעולות מורכבות יותר בכך שנחלק אותן לתת-בעיות קטנות ונוכל לבזר אותן בין יחידות העיבוד.

לשימוש ב-MapReduce יש כמה יתרונות:

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

ישנן שתי טכנולוגיות עיקריות התומכות בעיקרון זה:

Hadoop MapReduce – הדופ מתבסס על כך שהדאטה יישמר בקבצים (לדוגמה S3 באמזון), מה שקרוי HDFS – Hadoop Distributed File System. ב-Hadoop ישנו שרת הקרוי Main שמבזר את העבודה (את הדאטה) בין ה-Nodeים השונים (הנקראים Worker), וכל אחד מהם מבצע פעולת MapReduce על כמות מידע קטנה יותר במקביל. בסופו של דבר כל ה-Nodeים יכתבו את התוצר לHDFS. ב-Hadoop, כל Node מתפקד כיחידה עצמאית.

Apache Spark – מתבסס גם הוא על העיקרון של MapReduce, אך בשונה מ-Hadoop הוא מסתמך על עיבוד המידע על גבי הזיכרון של המכונה ולא על דיסק, מה שהופך אותו למהיר בהרבה. בארכיטקטורה של Spark יש Driver (שהוא מנהל המשימות) ו-Executors שמבצעים את המשימות הקטנות יותר. הדרייבר אחראי לחלוקת תתי-המשימות והן מתבצעות באופן מקבילי על גבי ה-executors.

Spark משתמש בעקרונות ה-functional programing, הוא נוח מאוד לשימוש ומסוגל להתממשק בקלות למספר רחב של מקורות מידע (S3 ,HDFS ומגוון רחב של בסיסי נתונים).

אחד היתרונות המהותיים בשימוש בטכנולוגיות הללו הוא מנגנון ה-Fault-Tolerance (עמידה בכישלונות). כל מערכת מממשת אותו בצורה שונה אבל העיקרון דומה: המערכת לא תקרוס אם יש בעיה נקודתית ב-Executor מסוים וגם תדע להתמודד עם כישלונות (לדוגמה, בעיית חיבור זמנית ל S3).

אז איך בוחרים?

הבחירה בטכנולוגיה תלויה בצורך ובבעיה שאותה נרצה לפתור. היתרון היחסי של Spark על שאר החלופות הקיימות היום בשוק הוא בעיקר זמן החישוב, שמתבצע על גבי הזיכרון של המכונה ולא על דיסק (בניגוד ל-Hadoop) – זמן העיבוד של Spark מהיר פי 100 מהחלופות. בנוסף, ל-Spark יש יתרון משמעותי עבור אפליקציות המשמשות ל-Machine Learning ויש לו אפילו ספרייה ייעודית לזה.

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

הכתבה בחסות Riskified

ריסקיפייד (Riskified) מאפשרת לעסקים לממש את מלוא הפוטנציאל שלהם בתחום הסחר האלקטרוני על ידי הפיכתו לבטוח, נגיש ומהיר. הפלטפורמה פורצת הגבולות של החברה מאפשרת לסוחרים מקוונים לבנות קשרי אמון ארוכי טווח עם הצרכנים שלהם. אנחנו ב- Riskified Technology משלבים בין פיתוח מוצרים לבין הפיתוח האישי והמקצועי שלנו ומאמינים בעצמאות ובעלות מקצה לקצה על המוצרים שלנו . בעזרת השימוש בכמויות דאטה רבות, אלגוריתמים של Machine Learning וניתוחים התנהגותיים, אנו מזהים עסקאות לגיטימיות ומביאים ערך ללקוחות שלנו. אנחנו משתמשים בטכנולוגיות מתקדמות (Scala, Kafka, Spark, DynamoDB, Elasticsearch, Airflow), בונים אפליקציות לסוחרים שלנו (React, Angular, Node. js) ונעזרים בתשתיות שתומכות בצמיחה המהירה שלנו (Microservices, Kubernetes, Istio, ArgoCD).
מוזמנים ומוזמנות להצטרף אלינו ולקרוא עוד בבלוג שלנו.

כתב אורח

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

הגב

רוצה להיות הראשון להגיב?

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

wpDiscuz

תגיות לכתבה: