טכניקות אופטימיזציה עבור פלטפורמת מחשוב בזיכרון מבוזרת על ידי מינוף SSD חלק 1

Aug 17, 2023

תַקצִיר:

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

כדי לטפל בבעיה זו, אנו ממנפים SSD (כונן מצב מוצק) כדי להשלים את היעדר רוחב הפס של הזיכרון הראשי. באופן ספציפי, אנו מציגים מתודולוגיית אופטימיזציה יעילה עבור Apache Spark על ידי חקירה קולקטיבית של ההשפעות של שינוי יחסי שברי הקיבולת של ה-shuffle ושטחי האחסון ב-"Spark JVM Heap Configuration" והחלת "מדיניות מטמון RDD" (למשל, מגובה SSD) שמירת זיכרון במטמון).

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

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

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

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

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

improve working memory

לחץ על יודע תוספי מזון כדי לשפר את הזיכרון

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

מילות מפתח:

אפאצ'י ספארק; ניהול זיכרון; כונן מצב מוצק; מסגרת עיבוד בזיכרון; ביצועים; דירוג דף; סגירה טרנזיטיבית; TeraSort; k-פירושו התקבצות; תצורת ערימת Java Virtual Machine; מערך נתונים מבוזר עמיד.

1. הקדמה

ככל שתעשיית הביג דאטה מתפתחת במהירות, היו מספר מאמצי מחקר לבניית מסגרות עיבוד מבוזרות, כגון MapReduce [1] של Hadoop [2], שיכולות לאחסן ולעבד ביעילות "Big Data".

עם זאת, הביצועים של Hadoop המבוססים על דיסקים ציריים רגילים (HDD) עלולים להידרדר עקב פעולות הקריאה/כתיבה [3] של מערכת הקבצים המבוזרת של Hadoop (HDFS), במיוחד עבור עומסי עבודה של למידת מכונה שבהן יכולות להיות הרבה עבודות איטרטיביות ו נתוני ביניים. כדי לטפל בבעיה זו, הוצגה המסגרת של Spark [4], שיכולה למעשה לאחסן את נתוני הביניים בזיכרון, כך שפלטפורמת המחשוב של האשכולות תוכל לשפר באופן דרמטי את הביצועים הכוללים.

עם זאת, על פי מחקר מקיף המנתח את התנהגויות הביצוע של ספארק [5], ל-Spark עדיין יכולות להיות בעיות של פגיעה בביצועים עקב כמה משימות קשות. כתוצאה מניתוח המשימות המשפיעות על כל זמן השלמת העבודה של Spark, איסוף אשפה, כתיבה בערבוביה וקריאה אקראית מזוהים כגורמים העיקריים שיכולים להשפיע לרעה על הביצועים של מערכת Spark.

למרבה הצער, ניתוח מפורט של הסיבות העיקריות לכך שהמשימות הנ"ל משפיעות על עיבוד המשימות ב-Spark ופתרונות פוטנציאליים עדיין לא נחקרו לעומק.

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

באופן ספציפי, כדי לנתח את הגורמים הגורמים לירידה ב"זמן השלמת כל העבודה" של ה-Spark, ביצענו ניסויים שונים עם PageRank [6], סגירה טרנזיטיבית [7], TeraSort [8] ו-k-means clustering [9] עומסי עבודה. בהתבסס על תוצאות הניסוי הנרחבות שלנו, מצאנו גורמי פגיעה פוטנציאליים בביצועים במערכת Spark שניתן לסכם אותם כך:

1. ירידה בביצועים באיסוף זבל של Java: מכיוון ש-Spark פועל על Java Virtual Machines (JVM), איסוף זבל של Java יכול להתרחש במיוחד כאשר יש חוסר בזיכרון executor Spark, כלומר, גודל ערימת JVM.

2. ירידה בביצועים בעת דליפת ערבוב: כאשר כתיבת הערבוב מעובדת, אם זיכרון הערבוב של זיכרון המבצעים של Spark (ערימת JVM) אינו מספיק, Spark ישפוך את נתוני הערבוב החוצה לדיסק (HDD). במקרה זה, Spark צריך לעשות סדרה של הנתונים כדי לכתוב ולבטל את הסדרה כדי לקרוא את הנתונים מהדיסק. מכיוון שנדרש משאב CPU עבור תהליכי הסידרה והסידרה, הדבר עלול להאט את העיבוד הכולל של המשימות.

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

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

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

ראשית, אנו משנים את יחסי שברי הקיבולת של ה-shuffle ושטחי האחסון ב"תצורת Spark JVM Heap". על פי תוצאות הניסוי של עומסי עבודה שונים, אנו רואים הבדלי ביצועים בהתאם לדפוסי השימוש בזיכרון של עומס העבודה.

שנית, אנו מיישמים "מדיניות מטמון RDD" שונים, כגון ללא מטמון, מטמון לזיכרון בלבד, מטמון לדיסק בלבד ומטמון זיכרון מגובה SSD. ברוב המקרים, מדיניות אחסון הזיכרון המגובה ב-SSD מציגה את הביצועים הטובים ביותר, אלא אם כל ה-RDDs יכולים להתאים לחלוטין לזיכרון הראשי בפועל.

ערכנו הערכת ביצועים אמפירית תחת תצורות שונות ועומסי עבודה שונים. תוצאות הניסוי שלנו מראות כי על ידי הקצאה מדוקדקת של כמויות האחסון והעירבוב בערימת ה-JVM של Spark בהתבסס על השימוש בזיכרון בעומסי עבודה יעד ועל ידי יישום מדיניות אחסון RDD אופטימלית במטמון, נוכל להפחית באופן משמעותי את זמן הביצוע הכולל עד 42%.

שאר מאמר זה בנוי באופן הבא. בסעיף 2, אנו מתארים בקצרה את הרקע למערכת Spark ומציגים עבודה קשורה, וסעיף 3 מציג את השימוש ב-Spark ואת התצורה של אשכול Spark ומפרט את מתודולוגיית האופטימיזציה שלנו לשיפור הביצועים הכוללים. בסעיף 4, אנו מציגים את תוצאות הניסוי שלנו וניתוח של גורמי הירידה בביצועים והפתרונות הנלווים עבורם. סעיף 5 דן בתוצאות הערכה ומסכם את הממצאים שלנו, ואנו מסכמים ודנים בעבודה עתידית בסעיף 6.

2. רקע ועבודת מחקר קשורה
2.1. רקע כללי

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

Apache Spark מנצל מערכי נתונים מבוזרים גמישים (RDD) [10] שיכולים לנהל ביעילות כל נתוני ביניים/סופיים בזיכרון הראשי כגון מטמון שניתן לנצל ביעילות בכל שלב של יישומים איטרטיביים. מכיוון שה-RDD אינו ניתן לשינוי, Spark מציג קונספט של שושלת שיכולה לעקוב אחר ההיסטוריה של יצירות RDD, שבהן ניתן להשתמש לשחזור כשלים.

באמצעות הרעיון הזה, Spark יכול להפחית את מספר פעולות ה-I/O בדיסק בהשוואה ל-Hadoop. בגלל יכולת מחשוב בזיכרון מבוזרת זו, Spark מציג בדרך כלל ביצועים טובים יותר מאשר Hadoop עבור מגוון רחב של יישומי ניתוח נתונים.

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

ways to improve your memory

לכן, הקיבולת המוגבלת של זיכרון RAM יכולה להגביל את המהירות הכוללת של עיבוד Spark. אם Spark לא יכול לשמור RDD בזיכרון RAM בגלל שטח מוגבל במהלך עיבוד היישום, Spark צריך ליצור מחדש את ה-RDD החסרים שלא יכלו להתאים ל-RAM בכל שלב, מה שהופך דומה לגישה של Hadoop. בנוסף, מכיוון שעבודת Spark היא תהליך Java הפועל על ה-JVM, GC (איסוף אשפה) מתרחש בכל פעם שכמות הזיכרון הזמינה מוגבלת. מכיוון ש-RDD שמור בדרך כלל במרחב הישן של JVM, כאשר מתרחש GC גדול, זה יכול להשפיע באופן מהותי על כל ביצועי עיבוד העבודה.

יתרה מכך, המחסור בזיכרון עלול לגרום ל"Shuffle Spill", שהוא תהליך של שפיכת נתוני הביניים שנוצרו במהלך ערבוב מזיכרון לדיסק. שפיכת דשדוש כרוכה בפעולות קלט/פלט של דיסקים ותקורות מעבד. כתוצאה מכך, יש לשקול פתרון חדש לשמירה במטמון של כל ה-RDD ולאבטחת זיכרון עבור הערובה.

2.2. עבודה קשורה

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

improve cognitive function

• שיפור הביצועים של Spark Shuffle:

האופטימיזציה של ביצועי הדשדוש ב-Spark [11] מנתחת את צוואר הבקבוק בהפעלת עבודת Spark ומציגה שתי חלופות, דחיסה טורית ואיחוד קבצים ערבוב. מכיוון ששפיכת כל הנתונים מהמאגר בזיכרון מהווה עומס על מערכת ההפעלה, הפתרון הוא לכתוב פחות קבצים גדולים יותר מלכתחילה.

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

Riffle [13] הוא אחד משירותי הדשדוש היעילים ביותר לניתוח נתונים בקנה מידה גדול. Riffle ממזג קבצי ערבוב ביניים מקוטעים לקובצי בלוק גדולים יותר ובכך ממירה בקשות I/O של דיסק קטן ואקראיים לבקשות גדולות עוקבות. Riffle גם מערבבת קובצי בלוק ממוזגים ובלתי ממוזגים כדי למזער את תקורה של פעולת המיזוג. פו וחב'. מציע שירות דשדוש חסכוני על ידי שילוב אחסון זול אך איטי עם אחסון מהיר אך יקר כדי להשיג ביצועים טובים [14]. הם מריצים TPC-DS, CloudSort ו-Big Data Benchmark במערכת שלהם ומציגים הפחתה בשימוש במשאבים של עד 59%.

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

• ניתוח ביצועים, מודלים ואופטימיזציה עבור Spark:

המחברים של [15] מראים ש-I/O לאחסון ממלא תפקיד כבד במסגרות המחשוב של אשכולות בתוך הזיכרון ומציעים מודל אנליטי מודע ל-I/O להגיון באמצעות הביצועים של תוכניות Spark. המודל המוצע יכול להסביר ולחזות בצורה אנליטית את התנהגות זמן הריצה של אלגוריתמים איטרטיביים שהם אלגוריתמים כבדי חישוב/ערבוב. הם גם מיישמים את המודל המוצע על אופטימיזציה של עלויות ב-Google Cloud.

Marcu et al. הצג את ניתוח הביצועים של Spark ו-Flink בהתבסס על תוצאות הניסוי שלהם באופן השוואתי תוך שימוש בעומסי עבודה מייצגים [16]. הם מזהים קבוצה של ארבעת הפרמטרים החשובים ביותר שיש להם השפעה גדולה על הביצועים. מקביליות המשימות, התנהגות הרשת במהלך שלב הדשדוש, הזיכרון והסדרת הנתונים הם הפרמטרים החשובים ביותר שהם בוחרים. מצד שני, במחקר שלנו, אנו מתמקדים במתודולוגיית שיפור הביצועים על ידי בחירה נכונה של סוג האחסון והקצאת כמות שטחי האחסון והעירבוב בערימת ה-JVM של Spark בהתאם לדפוסי השימוש בזיכרון של עומסי עבודה יעד.

• כוונון פרמטרים עבור Spark:

היו כמה ניסויים מחקריים לשיפור הביצועים של Spark על ידי כוונון כל פרמטרי התצורה. Petridis et al. הראו את החוויה שלהם בכוונון פרמטרים של Spark על ידי ניסוי וטעייה [17]. הם בוחרים 12 פרמטרים ספציפיים למופעי יישום מפתח ומעריכים את השפעתם באמצעות ביצועים אמיתיים על מחשב-על של Petaflop.

באופן דומה, Gounaris ו-Torres [18] מנתחים את ההשפעה של הפרמטרים החשובים ביותר של Spark הניתנים לכוונון לגבי דשדוש, דחיסה וסדרה על ביצועי האפליקציה בצורה אמפירית. הם מספקים תוצאות ניסוי נרחבות על תשתית המחשוב Marenostrum III (MN3) המותאמת ל-Spark של מרכז מחשוב העל של ברצלונה.

בניגוד לשיטת הכוונון האמפירי, Yu et al. מציע סכימת כוונון אוטומטי עבור פלטפורמת מחשוב בזיכרון [19]. הם לוקחים את גודל מערך הקלט ו-41 מדדי תצורה כפרמטרים של מודל הביצועים. הם משתמשים במודלים היררכיים (HM) כדי לשלב מספר תת-מודלים בודדים באופן היררכי ומשתמשים באלגוריתם הגנטי (GA) כדי לחפש את התצורה האופטימלית. למרות שעבודות המחקר לעיל מנסות להגיע לביצועים האופטימליים על ידי כוונון פרמטרים של Spark, הדומה לעבודה שלנו, המאמר שלנו שונה מאלה מכיוון שאנו משתמשים במדיניות זיכרון מטמון מגובה SSD כדי להרחיב ביעילות את מגבלת הזיכרון הפיזי של Spark. אֶשׁכּוֹל.

improve brain

• מיטוב זיכרון עבור עיבוד נתונים מבוסס MapReduce:

המחברים של [20] מנתחים לעומק את ההשפעה של יעילות זיכרון על הביצועים של מסגרת Flame-MR תואמת Hadoop. הם מציגים מספר טכניקות אופטימיזציה של זיכרון כדי להפחית את מספר הקצאות והקצאות אובייקטים, הפחתת תקורה של GC וזמן הביצוע הכולל. במחקר שלנו, אנו ממנפים כונני SSD לשיפור הביצועים של מערכת הזיכרון.

• צמצום תקורה של JVM ואיסוף אשפה ב-Spark:

JVM ו-GC מהווים את אחת התקורות העיקריות בפלטפורמת Spark, במיוחד כאשר עומס העבודה סובל ממגבלות זיכרון. אריה וחב'. ציין ש-JVM חימום תקורה הוא אחד מצווארי הבקבוק העיקריים בפלטפורמות HDFS, Hive ו-Spark [21]. הם מציעים JVM חדש שמפחית את עלות החימום על ידי שימוש חוזר במאגר של JVM חמים כבר.

Maas et al. מצאו שלהפסקות הנגרמות על ידי GC יכולות להיות השפעה משמעותית על Spark [22]. לפיכך, הם מציעים מערכת זמן ריצה הוליסטית, זמן ריצה בשפה מבוזרת המנהלת יחד שירותי ריצה כדי לתאם הפסקות הנגרמות על ידי GC על פני מספר צמתים.

למרות ששני המאמרים עוסקים בנושאים הקשורים ל-JVM ו-GC ב-Spark עבור מקרים כלליים, המאמר שלנו מניח שעומסי העבודה סובלים ממגבלות זיכרון.

• אופטימיזציה של מדיניות ניהול מטמון עבור Spark:

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

improve memory

3. טכניקות אופטימיזציה לפלטפורמת Spark

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


For more information:195477648nn@gmail.com

אולי גם תרצה