הפעלת שירות Dataproc Container for Spark

‫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, צריך לבצע את השלבים הבאים:

  1. בודקים את התמונה 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
    
  2. כותבים SparkApplication מפרט ומאחסנים אותו בקובץ YAML. מידע נוסף זמין בקטע כתיבת מפרט של אפליקציית Spark.

  3. שליחה, הרצה ומעקב אחרי אפליקציית Spark שהוגדרה במפרט SparkApplication באשכול GKE באמצעות הפקודה kubectl. מידע נוסף זמין בקטע דוגמאות לשימוש.

  4. בודקים את סטטוס הבקשה.

  5. אופציונלי: בודקים את יומני האפליקציות. מידע נוסף זמין בקטע הצגת היומנים של אפליקציית Spark 3.

  6. אפשר להשתמש באפליקציית 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, פועלים לפי השלבים הבאים:

  1. החלת הדוגמה הבאה של מפרט 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"
    
  2. כדי לוודא שדוגמת המפרט SparkApplication פועלת ומושלמת תוך דקה עד שתיים, מריצים את הפקודה הבאה:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
    
  3. כדי לראות את התוצאה, אפשר לעיין ביומני הנהגים:

    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, מבצעים את השלבים הבאים:

  1. כדי להריץ אפליקציית Spark SQL שבוחרת את הערך 1, משתמשים בשאילתה הבאה:

    select 1;
    
  2. החלת הדוגמה הבאה של מפרט 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"
    
  3. מוודאים שדוגמת המפרט של SparkApplication פועלת ומסתיימת תוך פחות מדקה באמצעות הפקודה הבאה:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n mkt-system
    

Spark MLlib

כדי להריץ את Spark MLlib, פועלים לפי השלבים הבאים:

  1. בדוגמה הבאה של 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")
    
  2. החלת הדוגמה הבאה של מפרט 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"
    
  3. מוודאים שדוגמת המפרט של SparkApplication פועלת ומסתיימת תוך פחות מדקה באמצעות הפקודה הבאה:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-ml -n mkt-system
    

SparkR

כדי להריץ את SparkR, פועלים לפי השלבים הבאים:

  1. אפשר להשתמש בקוד לדוגמה הבא כדי להריץ מופע של SparkR שמעמיס מערך נתונים בחבילה ומדפיס את השורה הראשונה:

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. החלת הדוגמה הבאה של מפרט 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"
    
  3. מוודאים שדוגמת המפרט של SparkApplication פועלת ומסתיימת תוך פחות מדקה באמצעות הפקודה הבאה:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-r-dataframe -n mkt-system
    

צפייה ביומנים של אפליקציית Spark 3

ל-Spark יש שני סוגים של יומנים שאפשר להציג באופן חזותי:

משתמשים במסוף כדי להריץ פקודות.

יומני נהגים

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

  1. מאתרים את ה-pod של מנהל ההתקן של Spark:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
    
  2. פותחים את היומנים מ-Spark driver pod:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs DRIVER_POD -n mkt-system
    

    מחליפים את DRIVER_POD בשם של ה-pod של מנהל ה-Spark שמצאתם בשלב הקודם.

יומני אירועים

אפשר למצוא יומני אירועים בנתיב שצוין בקובץ ה-YAML של מפרט SparkApplication.

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

  1. פותחים את קובץ ה-YAML של מפרט SparkApplication.
  2. מאתרים את השדה spec בקובץ.
  3. מאתרים את השדה sparkConf שמוטמע בשדה spec.
  4. מאתרים את הערך של השדה spark.eventLog.dir שמוטמע בקטע sparkConf.
  5. פותחים את הנתיב כדי לראות את יומני האירועים.

דוגמה לקובץ YAML של מפרט SparkApplication מופיעה במאמר כתיבת מפרט של אפליקציית Spark.

למידע נוסף אפשר לפנות אל מנהל החשבון.