מחיצת חלוקה ב- Spark



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

תורם על ידי Prithviraj Bose

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





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

מדוע להשתמש במחיצה?

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



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

ניתן להגדיר מחיצות בתנאי שה- RDD מבוסס על ערך מפתח.

מאפייני המחיצה

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

סוגי חלוקה ב- Spark

ניצוץ תומך בשני סוגים של מחיצה,

למה לי ללמוד SQL
  • מחיצת האש : משתמש בג'אווה Object.hashCode שיטה לקביעת המחיצה כ- partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



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

דוגמת קוד

בואו נראה דוגמה כיצד לחלק נתונים בין צמתים עובדים. קוד Scala המלא זמין כאן .

הנה כמה נתוני בדיקה של 12 קואורדינטות (כטומפלות),

מצא מספר מקסימאלי במערך Java

ליצור org.apache.spark.HashPartitioner בגודל 2, כאשר המפתחות יחולקו על פני שתי המחיצות הללו בהתבסס על קוד החשיש של המקשים.

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

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

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות ונחזור אליך.

פוסטים קשורים:

מהו צימוד בג'אווה

למה אתה צריך ללמוד ניצוץ לאחר שליטה בהאופ

Apache Spark Vs Hadoop MapReduce