מהו Apache Spark? פלטפורמת הביג דאטה שריסקה את הדופ

מוגדר אפאצ'י ספארק

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

מההתחלה הצנועה שלה ב- AMPLab באוניברסיטת ברקלי בשנת 2009, אפאצ'י ספארק הפך לאחד ממסגרות העיבוד המרכזיות המופצות בנתונים גדולים בעולם. ניתן לפרוס את הניצוץ במגוון דרכים, מספק כריכות מקוריות לשפות התכנות Java, Scala, Python ו- R ותומך ב- SQL, הזרמת נתונים, למידת מכונה ועיבוד גרפים. תמצא אותו בשימוש על ידי בנקים, חברות טלקומוניקציה, חברות משחקים, ממשלות וכל ענקיות הטכנולוגיה הגדולות כמו אפל, פייסבוק, יבמ ומיקרוסופט.

אדריכלות Apache Spark

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

מחוץ לקופסה, Spark יכול לרוץ במצב אשכול עצמאי שדורש פשוט את מסגרת Apache Spark ו- JVM בכל מכונה באשכול שלך. עם זאת, סביר יותר להניח שתרצה לנצל מערכת איתנה יותר של משאבים או אשכולות כדי לדאוג להקצות עובדים לפי דרישה עבורך. בארגון זה בדרך כלל אומר לרוץ ב- Hadoop YARN (כך הפצות Cloudera ו- Hortonworks מפעילות עבודות Spark), אך Apache Spark יכול גם לפעול ב- Apache Mesos, Kubernetes ו- Docker Swarm.

אם אתה מחפש פיתרון מנוהל, ניתן למצוא את Apache Spark כחלק מ- Amazon EMR, Google Cloud Dataproc ו- Microsoft Azure HDInsight. Databricks, החברה המעסיקה את מייסדי Apache Spark, מציעה גם את פלטפורמת Databricks Unified Analytics, שהיא שירות מנוהל מקיף המציע אשכולות Apache Spark, תמיכה בסטרימינג, פיתוח מחשב נייד משולב מבוסס אינטרנט וביצועי קלט / פלט ענן מותאמים. הפצה סטנדרטית של Apache Spark.

Apache Spark בונה את פקודות עיבוד הנתונים של המשתמש לתרשים Acyclic Directed , או DAG. ה- DAG הוא שכבת התזמון של אפאצ'י ספארק; הוא קובע אילו משימות מבוצעות באילו צמתים ובאיזה רצף.  

ניצוץ לעומת Hadoop: מדוע להשתמש באפצ'י ספארק?

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

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

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

ליבת ניצוץ

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

val textFile = sparkSession.sparkContext.textFile ("hdfs: /// tmp / words")

ספירת val = textFile.flatMap (line => line.split (““))

                      .map (word => (word, 1))

                      .reduceByKey (_ + _)

counts.saveAsTextFile ("hdfs: /// tmp / words_agg")

על ידי מתן כריכות לשפות פופולריות לניתוח נתונים כמו Python ו- R, כמו גם Java ו- Scala הידידותיים יותר לארגונים, Apache Spark מאפשר לכל אחד ממפתחי יישומים ועד מדעני נתונים לרתום את הסקלביליות והמהירות שלו בצורה נגישה.

ניצוץ RDD

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

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

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

ניצוץ SQL

ידוע במקור בשם Shark, Spark SQL הפך חשוב יותר ויותר לפרויקט Apache Spark. זה ככל הנראה הממשק הנפוץ ביותר עבור מפתחי היום בעת יצירת יישומים. Spark SQL מתמקד בעיבוד נתונים מובנים, תוך שימוש בגישה של מסגרת נתונים השאולה מ- R ו- Python (בפנדה). אך כפי שהשם מרמז, Spark SQL מספק גם ממשק תואם SQL2003 לשאילתת נתונים, ומביא את הכוח של Apache Spark לאנליסטים כמו גם למפתחים.

לצד תמיכת SQL רגילה, Spark SQL מספק ממשק סטנדרטי לקריאה וכתיבה לחנויות נתונים אחרות, כולל JSON, HDFS, Apache Hive, JDBC, Apache ORC ו- Apache Parquet, כולם נתמכים מהקופסה. ניתן להשתמש בחנויות פופולריות אחרות - Apache Cassandra, MongoDB, Apache HBase ורבים אחרים - על ידי משיכת מחברים נפרדים מהמערכת האקולוגית Spark Packages.

בחירת כמה עמודות ממסגרת נתונים היא פשוטה כמו שורה זו:

townsDF.select ("שם", "פופ")

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

townsDF.createOrReplaceTempView ("ערים")

spark.sql ("בחר שם, פופ בערים")

מאחורי הקלעים, Apache Spark משתמש בכלי אופטימיזציית שאילתות בשם Catalyst הבוחן נתונים ושאילתות במטרה לייצר תוכנית שאילתות יעילה ליישוב נתונים ולחישוב שתבצע את החישובים הנדרשים על פני האשכול. בעידן Apache Spark 2.x, ממשק ה- Spark SQL של ​​מסגרות נתונים ומערכי נתונים (למעשה מסגרת נתונים מוקלדת שניתן לבדוק בזמן קומפילציה לתקינות ולנצל זיכרון נוסף ואופטימיזציות מחשוב בזמן הריצה) הוא הגישה המומלצת לפיתוח . ממשק ה- RDD עדיין זמין, אך מומלץ רק אם לא ניתן לענות על צרכיך במסגרת פרדיגמת ה- Spark SQL.

Spark 2.4 הציג קבוצה של פונקציות מובנות מסדר גבוה לניהול ישיר של מערכים וסוגי נתונים מסדר גבוה יותר.

ניצוץ MLlib

Apache Spark מקבץ גם ספריות ליישום טכניקות למידת מכונה וניתוח גרפים על נתונים בקנה מידה גדול. Spark MLlib כולל מסגרת ליצירת צינורות למידת מכונה, המאפשר יישום קל של חילוץ תכונות, בחירות ושינויים בכל מערך נתונים מובנה. MLlib מגיע עם יישומים מבוזרים של אלגוריתמי אשכולות וסיווג כגון k- פירושו אשכולות ויערות אקראיים שניתן להחליף פנימה ומתוך צינורות מותאמים אישית בקלות. ניתן להכשיר מודלים על ידי מדעני נתונים ב- Apache Spark באמצעות R או Python, לשמור אותם באמצעות MLlib ואז לייבא אותם לצינור מבוסס Java או Scala לשימוש ייצור.

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

Spark GraphX

Spark GraphX ​​מגיע עם מבחר אלגוריתמים מבוזרים לעיבוד מבני גרפים כולל יישום של PageRank של גוגל. אלגוריתמים אלה משתמשים בגישת ה- RDD של Spark Core לנתוני דוגמנות; חבילת GraphFrames מאפשרת לך לבצע פעולות גרף במסגרות נתונים, כולל ניצול אופטימיזציה של Catalyst לשאילתות גרפים.

הזרמת ניצוצות

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

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

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

סטרימינג מובנה

סטרימינג מובנה (נוסף ב- Spark 2.x) הוא ספארק סטרימינג מה שהיה Spark SQL לממשקי ה- API של Spark Core: ממשק API ברמה גבוהה יותר והפשטה קלה יותר עבור יישומי כתיבה. במקרה של הזרמת מבנים, ה- API ברמה הגבוהה יותר מאפשר למעשה למפתחים ליצור מסגרות נתונים ומערכי נתונים אינסופיים. זה גם פותר כמה נקודות כאב אמיתיות מאוד שמשתמשים נאבקו בהן במסגרת הקודמת, במיוחד בנוגע להתמודדות עם צבירות בזמן האירוע ומסירה מאוחרת של הודעות. כל השאילתות בזרמים מובנים עוברות באמצעות כלי האופטימיזציה של שאילתות קטליסט, ואף ניתן להריץ בצורה אינטראקטיבית, ומאפשרת למשתמשים לבצע שאילתות SQL כנגד נתוני סטרימינג בשידור חי.

סטרימינג מובנה הסתמך במקור על תכנית המיקרו-אצווה של ספארק סטרימינג לטיפול בנתוני סטרימינג. אבל ב- Spark 2.3, צוות Apache Spark הוסיף מצב עיבוד רציף עם זמן אחזור לזרם מובנה, מה שמאפשר לו לטפל בתגובות עם זמן השהיה של עד 1 ms, וזה מרשים מאוד. החל מ- Spark 2.4, עיבוד רציף עדיין נחשב לניסוי. בעוד שסטרימינג מובנה בנוי על גבי מנוע ה- Spark SQL, סטרימינג רציף תומך רק במערך מוגבל של שאילתות.

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

צינורות למידה עמוקה

Apache Spark תומך בלמידה עמוקה באמצעות צינורות Deep Learning. באמצעות מבנה הצינור הקיים של MLlib, אתה יכול להיכנס לספריות למידה עמוקה ברמה נמוכה יותר ולבנות מסווגים בכמה שורות קוד בלבד, וכן להחיל גרפים מותאמים אישית של TensorFlow או מודלים של Keras על נתונים נכנסים. ניתן אפילו לרשום גרפים ומודלים אלה כ- UDF של Spark SQL בהתאמה אישית (פונקציות המוגדרות על ידי המשתמש), כך שניתן להחיל את מודלי הלמידה העמוקה על נתונים כחלק מהצהרות SQL.

מדריכי Apache Spark

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

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

צריך להעמיק? ל- DZone יש את מה שהוא מכנה בצניעות אוסף הניצוצות של אפאצ'י המורכב ממגוון הדרכות מועילות בנושאים רבים של אפאצ'י ספארק. למידה שמחה!