1. מבוא – Managed Service for Apache Spark
Managed Service for Apache Spark הוא שירות מנוהל במלואו וניתן להתאמה לעומס, להרצת Apache Spark, Apache Flink, Presto ועוד הרבה כלים ומסגרות בקוד פתוח. אתם יכולים להשתמש ב-Managed Service for Apache Spark כדי לעדכן את אגם הנתונים, לבצע ETL / ELT ולבצע מדעי נתונים מאובטחים, בקנה מידה גלובלי. השירות המנוהל ל-Apache Spark משולב באופן מלא גם עם כמה שירותים של Google Cloud, כולל BigQuery, Cloud Storage, Gemini Enterprise Agent Engine ו-Knowledge Catalog.
Managed Service for Apache Spark זמין בשני מצבי פריסה:
- Apache Spark מנוהל ללא שרת מאפשר להריץ משימות PySpark בלי צורך להגדיר תשתית והתאמה אוטומטית לעומס. Apache Spark מנוהל תומך בעומסי עבודה של PySpark batch ובסשנים או ב-Notebooks.
- אשכולות מנוהלים של Apache Spark מאפשרים לכם לנהל אשכול Hadoop YARN לעומסי עבודה של Spark שמבוססים על YARN, בנוסף לכלים בקוד פתוח כמו Flink ו-Presto. אתם יכולים להתאים את האשכולות מבוססי הענן שלכם עם קנה מידה אנכי או אופקי ככל שתרצו, כולל שינוי קנה מידה אוטומטי.
2. יצירת אשכול מנוהל של Apache Spark ב-VPC של Google Cloud
בשלב הזה, תיצרו אשכול מנוהל של Apache Spark ב-Google Cloud באמצעות מסוף Google Cloud.
קודם כול, צריך להפעיל את Managed Apache Spark service API במסוף. אחרי שמפעילים אותו, מחפשים את האפשרות Managed Apache Spark בסרגל החיפוש ולוחצים על Create Cluster (יצירת אשכול).
בוחרים באפשרות Cluster on Compute Engine (אשכול ב-Compute Engine) כדי להשתמש במכונות וירטואליות של Google Compute Engine (GCE) כתשתית הבסיס להרצת אשכולות מנוהלים של Apache Spark.

נפתח הדף 'יצירת אשכול'.

בדף הזה:
- מזינים שם ייחודי לאשכול.
- בוחרים את האזור הספציפי. אפשר גם לבחור אזור, אבל Managed Apache Spark מאפשר לבחור אזור באופן אוטומטי. ב-codelab הזה, בוחרים באפשרויות us-central1 ו-us-central1-c.
- בוחרים את סוג האשכול Standard (רגיל). כך מוודאים שיש צומת ראשי אחד.
- בכרטיסייה Configure nodes (הגדרת צמתים), מוודאים שמספר העובדים שייווצרו יהיה שניים.
- בקטע התאמה אישית של האשכול, מסמנים את התיבה לצד הפעלת שער רכיבים.כך מופעלת הגישה לממשקי אינטרנט באשכול, כולל ממשק המשתמש של Spark, Yarn Node Manager ו-Jupyter notebooks.
- בקטע Optional Components (רכיבים אופציונליים), בוחרים באפשרות Jupyter Notebook. הפעולה הזו מגדירה את האשכול עם שרת Jupyter notebook.
- משאירים את כל שאר ההגדרות כמו שהן ולוחצים על Create Cluster (יצירת אשכול).
תתחיל הרצה של אשכול מנוהל של Apache Spark.
3. הפעלת האשכול וחיבור אליו באמצעות SSH
אחרי שמצב האשכול משתנה לפועל, לוחצים על שם האשכול במסוף Managed Apache Spark.

לוחצים על הכרטיסייה VM Instance (מופע של מכונה וירטואלית) כדי לראות את צומת הראשי ואת שני צומתי העובדים של האשכול.

לוחצים על SSH ליד הצומת הראשי כדי להיכנס לצומת הראשי.

מריצים פקודות hdfs כדי לראות את מבנה הספרייה.
hadoop_commands_example
sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51
sudo hadoop fs -ls /
4. ממשקי אינטרנט ושערי רכיבים
ב- Managed Apache Spark cluster console לוחצים על שם האשכול ואז על הכרטיסייה WEB INTERFACES.

כאן מוצגים ממשקי האינטרנט הזמינים, כולל Jupyter. לוחצים על Jupyter כדי לפתוח מחברת Jupyter. אפשר להשתמש בזה כדי ליצור מחברות ב-PySpark שמאוחסנות ב-GCS. כדי לאחסן את המחברת ב-Google Cloud Storage ולפתוח מחברת PySpark לשימוש בשיעור Codelab הזה.
5. מעקב אחרי עבודות Spark
אחרי שהאשכול המנוהל של Apache Spark פועל, יוצרים משימת PySpark batch ושולחים אותה לאשכול המנוהל של Apache Spark.
יוצרים קטגוריה של Google Cloud Storage (GCS) כדי לאחסן את סקריפט PySpark. חשוב לוודא שהקטגוריה נוצרת באותו אזור שבו נמצא אשכול Managed Apache Spark.

אחרי שיוצרים את קטגוריית ה-GCS, מעתיקים את הקובץ הבא לקטגוריה הזו.
https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py
הסקריפט הזה יוצר DataFrame לדוגמה של Spark וכותב אותו כטבלת Hive.
hive_job.py
from pyspark.sql import SparkSession
from datetime import datetime, date
from pyspark.sql import Row
spark = SparkSession.builder.master("local").enableHiveSupport().getOrCreate()
df = spark.createDataFrame([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
(2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
], schema='a long, b double, c string, d date, e timestamp')
print("..... Writing data .....")
df.write.mode("overwrite").saveAsTable("test_table_1")
print("..... Complete .....")
שולחים את הסקריפט הזה כמשימה באצווה של Spark ב-Managed Apache Spark. בתפריט הניווט הימני, לוחצים על משימות ואז על שליחת משימה.

צריך לספק מזהה משרה ואזור. בוחרים את האשכול ומזינים את המיקום ב-GCS של סקריפט Spark שהעתקתם. המשימה הזו תפעל כמשימת Spark batch ב-Managed Apache Spark.
בקטע Properties (מאפיינים), מוסיפים את המפתח spark.submit.deployMode ואת הערך client כדי לוודא שהדרייבר פועל בצומת הראשי של Apache Spark המנוהל ולא בצומתי העובדים. לוחצים על Submit (שליחה) כדי לשלוח את משימת האצווה אל Apache Spark המנוהל.

תסריט Spark ייצור Dataframe ויכתוב לטבלת Hive test_table_1.
אחרי שהעבודה תפעל בהצלחה, תוכלו לראות את הצהרות ההדפסה של המסוף בכרטיסייה Monitoring.

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

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

שימו לב איך HiveQL בוחר את כל הרשומות ומציג אותן במסוף.
6. התאמה אוטומטית לעומס (Automatic scaling)
התאמה אוטומטית לעומס (autoscaling) היא המשימה של הערכת המספר ה "נכון" של צמתים של עובדים באשכול לעומס עבודה.
Managed Apache Spark AutoscalingPolicies API מספק מנגנון לאוטומציה של ניהול משאבי האשכול, ומאפשר התאמה אוטומטית של מכונות וירטואליות (VM) של עובדי האשכול. מדיניות של התאמה אוטומטית היא הגדרה לשימוש חוזר שמתארת איך עובדי האשכול צריכים להתאים את עצמם לעומס באמצעות מדיניות ההתאמה האוטומטית. היא מגדירה את גבולות ההתאמה, התדירות והאגרסיביות כדי לספק שליטה מדויקת במשאבי האשכול לאורך חיי האשכול.
כללי מדיניות לשינוי גודל אוטומטי מנוהל של Apache Spark נכתבים באמצעות קובצי YAML. קובצי ה-YAML האלה מועברים בפקודת ה-CLI ליצירת האשכול, או נבחרים מקטגוריית GCS כשיוצרים אשכול ממסוף Cloud.
דוגמה למדיניות של שינוי גודל אוטומטי ב-Managed Apache Spark :
policy.yaml
workerConfig:
minInstances: 10
maxInstances: 10
secondaryWorkerConfig:
maxInstances: 50
basicAlgorithm:
cooldownPeriod: 4m
yarnConfig:
scaleUpFactor: 0.05
scaleDownFactor: 1.0
gracefulDecommissionTimeout: 1h
7. הגדרת רכיבים אופציונליים של Apache Spark מנוהל
תתחיל הרצה של אשכול מנוהל של Apache Spark.
כשיוצרים אשכול מנוהל של Apache Spark, רכיבים סטנדרטיים של מערכת Apache Hadoop מותקנים באשכול באופן אוטומטי (ראו רשימת הגרסאות המנוהלות של Apache Spark). כשיוצרים את האשכול, אפשר להתקין רכיבים נוספים שנקראים רכיבים אופציונליים.

במהלך יצירת אשכול מנוהל של Apache Spark דרך המסוף, הפעלנו רכיבים אופציונליים ובחרנו באפשרות Jupyter Notebook כרכיב אופציונלי.
8. פינוי משאבים
כדי לנקות את האשכול, לוחצים על Stop (עצירה) אחרי שבוחרים את האשכול במסוף Managed Apache Spark. אחרי שהאשכול ייעצר, לוחצים על מחיקה כדי למחוק את האשכול.
אחרי שמוחקים את אשכול Apache Spark המנוהל, צריך למחוק את דלי ה-GCS שאליהם הועתק הקוד.
כדי לנקות את המשאבים ולהפסיק חיובים לא רצויים, צריך קודם להפסיק את אשכול Apache Spark המנוהל ואז למחוק אותו.
לפני שמפסיקים ומוחקים את האשכול, צריך לוודא שכל הנתונים שנכתבו באחסון HDFS מועתקים ל-GCS לאחסון עמיד.
כדי לעצור את האשכול, לוחצים על עצירה.

אחרי שהאשכול ייעצר, לוחצים על מחיקה כדי למחוק את האשכול.
בתיבת הדו-שיח לאישור, לוחצים על מחיקה כדי למחוק את האשכול.
