GDC מספק מאגר Dataproc ל-Spark. זו סביבת Apache Spark לעיבוד נתונים. מידע נוסף על Apache Spark זמין ב-https://spark.apache.org/. אפשר להשתמש בקונטיינרים של Dataproc Container for Spark כדי להריץ אפליקציות Spark חדשות או קיימות באשכול GDC Kubernetes עם שינויים מינימליים. אם אתם מכירים את הכלים של Spark, אתם יכולים להמשיך להשתמש בהם.
מגדירים את אפליקציית Spark בקובץ YAML, ו-GDC מקצה את המשאבים בשבילכם. הקונטיינר Dataproc Container for Spark מתחיל לפעול תוך שניות. ה-executors של Spark מתרחבים או נסגרים בהתאם לצרכים שלכם.
אפשר להגדיר קונטיינרים מ-Dataproc Container for Spark ב-GDC לשימוש בחומרה ייעודית, כמו צמתים של חומרה ייעודית או מעבדי GPU.
דרישות מוקדמות להפעלת אפליקציות Spark
לפני שמריצים אפליקציית Spark, צריך לבקש מאדמין הפלטפורמה (PA) להעניק לכם גישה לתפקיד Spark Operator (mkt-spark-operator) במרחב השמות mkt-system.
הרצת אפליקציות לדוגמה של Spark 3
העברת אפליקציות Spark לקונטיינרים מפשטת את ההפעלה של אפליקציות Big Data במקום באמצעות GDC. בתור מפעיל אפליקציות (AO), אתם יכולים להריץ אפליקציות Spark שצוינו באובייקטים של GKE מסוג המשאב המותאם אישית SparkApplication.
כדי להריץ ולהשתמש באפליקציית Apache Spark 3 ב-GDC, צריך לבצע את השלבים הבאים:
בודקים את התמונה
spark-operatorבפרויקט כדי למצוא את$DATAPROC_IMAGEשאליו צריך להפנות באפליקציית Spark:export DATAPROC_IMAGE=$(kubectl get pod --kubeconfig INFRA_CLUSTER_KUBECONFIG \ --selector app.kubernetes.io/name=spark-operator -n mkt-system \ -o=jsonpath='{.items[*].spec.containers[0].image}' \ | sed 's/spark-operator/dataproc/')לדוגמה:
export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17כותבים
SparkApplicationמפרט ומאחסנים אותו בקובץ YAML. מידע נוסף זמין בקטע כתיבת מפרט של אפליקציית Spark.שליחה, הרצה ומעקב אחרי אפליקציית Spark שהוגדרה במפרט
SparkApplicationבאשכול GKE באמצעות הפקודהkubectl. מידע נוסף זמין בקטע דוגמאות לשימוש.בודקים את סטטוס הבקשה.
אופציונלי: בודקים את יומני האפליקציות. מידע נוסף זמין בקטע הצגת היומנים של אפליקציית Spark 3.
אפשר להשתמש באפליקציית Spark כדי לאסוף את הסטטוס של ה-driver וה-executors ולהציג אותו למשתמש.
כתיבת מפרט של אפליקציית Spark
מפרט SparkApplication כולל את הרכיבים הבאים:
- השדה
apiVersion. - השדה
kind. - השדה
metadata. - החלק
spec.
מידע נוסף זמין במאמר בנושא כתיבת מפרט של SparkApplication ב-GitHub: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec
דוגמאות לשימוש באפליקציה
בקטע הזה מופיעות דוגמאות עם המפרטים התואמים שלהן לביצוע אפליקציות Spark:
SparkApplication
Spark Pi
בקטע הזה יש דוגמה להרצת אפליקציית Spark Pi שדורשת הרבה משאבי מחשוב ומבצעת הערכה של 𝛑 (פאי) על ידי זריקת חצים למעגל.
כדי להריץ את Spark Pi, פועלים לפי השלבים הבאים:
החלת הדוגמה הבאה של מפרט
SparkApplicationבאשכול התשתית של הארגון:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: mkt-system spec: type: Python pythonVersion: "3" mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/pi.py" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"כדי לוודא שדוגמת המפרט
SparkApplicationפועלת ומושלמת תוך דקה עד שתיים, מריצים את הפקודה הבאה:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-systemכדי לראות את התוצאה, אפשר לעיין ביומני הנהגים:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs spark-pi-driver -n mkt-system | grep "Pi is roughly"הפלט אמור להיראות כך:
Pi is roughly 3.1407357036785184
מידע נוסף זמין במקורות המידע הבאים:
- במאמר Pi estimation במסמכי העזרה של Apache Spark מופיע קוד האפליקציה:
https://spark.apache.org/examples.html. - דוגמה לקובץ YAML של Spark Pi מופיעה במאמר בנושא כתיבת מפרט של אפליקציית Spark.
Spark SQL
כדי להריץ Spark SQL, מבצעים את השלבים הבאים:
כדי להריץ אפליקציית Spark SQL שבוחרת את הערך
1, משתמשים בשאילתה הבאה:select 1;החלת הדוגמה הבאה של מפרט
SparkApplicationבאשכול של תשתית הארגון:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: pyspark-sql-arrow namespace: mkt-system spec: type: Python mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/sql/arrow.py" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"מוודאים שדוגמת המפרט של
SparkApplicationפועלת ומסתיימת תוך פחות מדקה באמצעות הפקודה הבאה:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n mkt-system
Spark MLlib
כדי להריץ את Spark MLlib, פועלים לפי השלבים הבאים:
בדוגמה הבאה של Scala מריצים מופע של Spark MLlib שמבצע ניתוח סטטיסטי ומדפיס תוצאה במסוף:
import org.apache.spark.ml.linalg.{Matrix, Vectors} import org.apache.spark.ml.stat.Correlation import org.apache.spark.sql.Row val data = Seq( Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))), Vectors.dense(4.0, 5.0, 0.0, 3.0), Vectors.dense(6.0, 7.0, 0.0, 8.0), Vectors.sparse(4, Seq((0, 9.0), (3, 1.0))) ) val df = data.map(Tuple1.apply).toDF("features") val Row(coeff1: Matrix) = Correlation.corr(df, "features").head println(s"Pearson correlation matrix:\n $coeff1") val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head println(s"Spearman correlation matrix:\n $coeff2")החלת הדוגמה הבאה של מפרט
SparkApplicationבאשכול התשתית של הארגון:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-ml namespace: mkt-system spec: type: Scala mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainClass: org.apache.spark.examples.ml.SummarizerExample mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples_2.12-3.1.3.jar" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"מוודאים שדוגמת המפרט של
SparkApplicationפועלת ומסתיימת תוך פחות מדקה באמצעות הפקודה הבאה:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-ml -n mkt-system
SparkR
כדי להריץ את SparkR, פועלים לפי השלבים הבאים:
אפשר להשתמש בקוד לדוגמה הבא כדי להריץ מופע של SparkR שמעמיס מערך נתונים בחבילה ומדפיס את השורה הראשונה:
library(SparkR) sparkR.session() df <- as.DataFrame(faithful) head(df)החלת הדוגמה הבאה של מפרט
SparkApplicationבאשכול של תשתית הארגון:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-r-dataframe namespace: mkt-system spec: type: R mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: Always mainApplicationFile: "local:///usr/lib/spark/examples/src/main/r/dataframe.R" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"מוודאים שדוגמת המפרט של
SparkApplicationפועלת ומסתיימת תוך פחות מדקה באמצעות הפקודה הבאה:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-r-dataframe -n mkt-system
צפייה ביומנים של אפליקציית Spark 3
ל-Spark יש שני סוגים של יומנים שאפשר להציג באופן חזותי:
משתמשים במסוף כדי להריץ פקודות.
יומני נהגים
כדי לראות את יומני הרישום של מנהל התקנים באפליקציית Spark, צריך לבצע את השלבים הבאים:
מאתרים את ה-pod של מנהל ההתקן של Spark:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-systemפותחים את היומנים מ-Spark driver pod:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs DRIVER_POD -n mkt-systemמחליפים את
DRIVER_PODבשם של ה-pod של מנהל ה-Spark שמצאתם בשלב הקודם.
יומני אירועים
אפשר למצוא יומני אירועים בנתיב שצוין בקובץ ה-YAML של מפרט SparkApplication.
כדי לראות את יומני האירועים של אפליקציית Spark, פועלים לפי השלבים הבאים:
- פותחים את קובץ ה-YAML של מפרט
SparkApplication. - מאתרים את השדה
specבקובץ. - מאתרים את השדה
sparkConfשמוטמע בשדהspec. - מאתרים את הערך של השדה
spark.eventLog.dirשמוטמע בקטעsparkConf. - פותחים את הנתיב כדי לראות את יומני האירועים.
דוגמה לקובץ YAML של מפרט SparkApplication מופיעה במאמר כתיבת מפרט של אפליקציית Spark.
למידע נוסף אפשר לפנות אל מנהל החשבון.